- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Запись Данных в Eplan из сценария
Модератор: специалисты Eplan
-
- знаток Eplan
- Сообщения: 97
- Зарегистрирован: 09 апр 2014, 09:55
- Имя: Александр Павлов
- Страна: РФ
- город/регион: Санкт Петербург
- Благодарил (а): 12 раз
- Поблагодарили: 6 раз
Запись Данных в Eplan из сценария
Попытался записывать XML в Eplan при помощи команды XMActionDCImport.
если путь к проекту содержит кириллицу, то команда не работает. Eplan выдаёт сообщение "Указанное имя проекта отсутствует!".
если использую латиницу, то всё работает.
Пробовал перекодировку utf16 в utf8 - не помогло.
Eplan 2.6 сборка 10395
string sCommXMLImport = "XMActionDCImport /ProjectLink:" + sProjectPathUtf8 + " /DataConfigurationFile:c:\\Testing\\Connections.xml";
oCLI.Execute(sCommXMLImport);
Подскажите, поддерживает ли eplan кириллицу?
если путь к проекту содержит кириллицу, то команда не работает. Eplan выдаёт сообщение "Указанное имя проекта отсутствует!".
если использую латиницу, то всё работает.
Пробовал перекодировку utf16 в utf8 - не помогло.
Eplan 2.6 сборка 10395
string sCommXMLImport = "XMActionDCImport /ProjectLink:" + sProjectPathUtf8 + " /DataConfigurationFile:c:\\Testing\\Connections.xml";
oCLI.Execute(sCommXMLImport);
Подскажите, поддерживает ли eplan кириллицу?
Eplan 2.6 сборка 10395
-
- знаток Eplan
- Сообщения: 97
- Зарегистрирован: 09 апр 2014, 09:55
- Имя: Александр Павлов
- Страна: РФ
- город/регион: Санкт Петербург
- Благодарил (а): 12 раз
- Поблагодарили: 6 раз
Запись Данных в Eplan из сценария
Код: Выделить всё
public class RegisterScriptMenu
{
private CommandLineInterpreter oCLI = new CommandLineInterpreter();
// командная строка экспорта XML файла из Eplan
private string sCommXMLExport = "XMExportConnectionsAction /ConfigScheme:Connections /CompleteProject:1 /Language:ru_RU /Destination:c:\\Testing\\Connections.xml /ExecutionMode:0";
[DeclareAction("MyScriptActionWithMenu")]
public void MyFunctionAsAction()
{
new Decider().Decide(EnumDecisionType.eOkDecision, "MyFunctionAsAction was called!", "RegisterScriptMenu", EnumDecisionReturn.eOK, EnumDecisionReturn.eOK);
// Экcпорт соединений из Eplan
oCLI.Execute(sCommXMLExport);
new Decider().Decide(EnumDecisionType.eOkDecision, "Export complete!", "RegisterScriptMenu", EnumDecisionReturn.eOK, EnumDecisionReturn.eOK);
// читаю XML файл
XmlDocument conInXML = new XmlDocument();
String FileInXML = "c:\\Testing\\Connections.xml";
conInXML.Load(FileInXML);
//читаю путь к проекту
string sProjectPath = "";
XmlNodeList ProjectPathNode = conInXML.GetElementsByTagName("EplanPxfRoot");
XmlNode ProjectRoot = conInXML.DocumentElement;
foreach (XmlNode ProjectNode in ProjectPathNode)
{
sProjectPath = ProjectNode.Attributes["SourceProject"].Value.ToString();
}
new Decider().Decide(EnumDecisionType.eOkDecision, sProjectPath, "RegisterScriptMenu", EnumDecisionReturn.eOK, EnumDecisionReturn.eOK);
// Импорт соединений в Eplan
// командная строка импорта XML файла в Eplan
//Подготовка sProjectPath
string sProjectPathUtf8= Utf16ToUtf.Utf16ToUtf8(sProjectPath);
// выводим результат перекодировки
new Decider().Decide(EnumDecisionType.eOkDecision, sProjectPathUtf8, "RegisterScriptMenu", EnumDecisionReturn.eOK, EnumDecisionReturn.eOK);
string sCommXMLImport = "XMActionDCImport /ProjectLink:" + sProjectPathUtf8 + " /DataConfigurationFile:c:\\Testing\\Connections.xml";
oCLI.Execute(sCommXMLImport);
new Decider().Decide(EnumDecisionType.eOkDecision, sCommXMLImport, "RegisterScriptMenu", EnumDecisionReturn.eOK, EnumDecisionReturn.eOK);
// Импорт соединений в Eplan
oCLI.Execute(sCommXMLImport);
new Decider().Decide(EnumDecisionType.eOkDecision, "Import complete!", "RegisterScriptMenu", EnumDecisionReturn.eOK, EnumDecisionReturn.eOK);
return;
}
[DeclareMenu]
public void MenuFunction()
{
Eplan.EplApi.Gui.Menu oMenu = new Eplan.EplApi.Gui.Menu();
oMenu.AddMenuItem("Connections", "MyScriptActionWithMenu");
}
}
public class Utf16ToUtf
{
public static string Utf16ToUtf8(string utf16String)
{
/**************************************************************
* Every .NET string will store text with the UTF16 encoding, *
* known as Encoding.Unicode. Other encodings may exist as *
* Byte-Array or incorrectly stored with the UTF16 encoding. *
* *
* UTF8 = 1 bytes per char *
* ["100" for the ansi 'd'] *
* ["206" and "186" for the russian 'κ'] *
* *
* UTF16 = 2 bytes per char *
* ["100, 0" for the ansi 'd'] *
* ["186, 3" for the russian 'κ'] *
* *
* UTF8 inside UTF16 *
* ["100, 0" for the ansi 'd'] *
* ["206, 0" and "186, 0" for the russian 'κ'] *
* *
* We can use the convert encoding function to convert an *
* UTF16 Byte-Array to an UTF8 Byte-Array. When we use UTF8 *
* encoding to string method now, we will get a UTF16 string. *
* *
* So we imitate UTF16 by filling the second byte of a char *
* with a 0 byte (binary 0) while creating the string. *
**************************************************************/
// Storage for the UTF8 string
string utf8String = String.Empty;
// Get UTF16 bytes and convert UTF16 bytes to UTF8 bytes
byte[] utf16Bytes = Encoding.Unicode.GetBytes(utf16String);
byte[] utf8Bytes = Encoding.Convert(Encoding.Unicode, Encoding.UTF8, utf16Bytes);
// Fill UTF8 bytes inside UTF8 string
for (int i = 0; i < utf8Bytes.Length; i++)
{
// Because char always saves 2 bytes, fill char with 0
byte[] utf8Container = new byte[2] { utf8Bytes[i], 0 };
utf8String += BitConverter.ToChar(utf8Container, 0);
}
// Return UTF8
return utf8String;
}
}
Последний раз редактировалось aranea 20 сен 2018, 17:56, всего редактировалось 1 раз.
Причина: для кода используйте тег [code][/code]
Причина: для кода используйте тег [code][/code]
Eplan 2.6 сборка 10395
-
- знаток Eplan
- Сообщения: 97
- Зарегистрирован: 09 апр 2014, 09:55
- Имя: Александр Павлов
- Страна: РФ
- город/регион: Санкт Петербург
- Благодарил (а): 12 раз
- Поблагодарили: 6 раз
Запись Данных в Eplan из сценария
C:\Users\Public\EPLAN\Data\Проекты\Company name\Сборный проект.elk - до кодировки.
После кодировки вместо русских букв кракозябры.
Для проверки использовал код, который дал Satyr. В окошко вводил команду
XMActionDCImport /ProjectLink:C:\\Users\\Public\\EPLAN\\Data\\Проекты\\Company name\\Сборный проект.elk /DataConfigurationFile:c:\\Testing\\Connections.xml
Получил такое же сообщение
После кодировки вместо русских букв кракозябры.
Для проверки использовал код, который дал Satyr. В окошко вводил команду
XMActionDCImport /ProjectLink:C:\\Users\\Public\\EPLAN\\Data\\Проекты\\Company name\\Сборный проект.elk /DataConfigurationFile:c:\\Testing\\Connections.xml
Получил такое же сообщение
Eplan 2.6 сборка 10395
-
- знаток Eplan
- Сообщения: 1457
- Зарегистрирован: 17 окт 2012, 11:24
- Имя: Виталий
- Страна: Беларусь
- город/регион: Минск
- Благодарил (а): 61 раз
- Поблагодарили: 182 раза
Запись Данных в Eplan из сценария
А двойные слэши зачем? Это имеет смысл если строка в студии пишется для компилятора, т.к. это литерал, для вызова они не нужны.
-
- знаток Eplan
- Сообщения: 97
- Зарегистрирован: 09 апр 2014, 09:55
- Имя: Александр Павлов
- Страна: РФ
- город/регион: Санкт Петербург
- Благодарил (а): 12 раз
- Поблагодарили: 6 раз
Запись Данных в Eplan из сценария
Попробовал без двойных слешей - результат аналогичный. Если не использовать кириллицу, то работает.
Eplan 2.6 сборка 10395
-
- знаток Eplan
- Сообщения: 1457
- Зарегистрирован: 17 окт 2012, 11:24
- Имя: Виталий
- Страна: Беларусь
- город/регион: Минск
- Благодарил (а): 61 раз
- Поблагодарили: 182 раза
Запись Данных в Eplan из сценария
Возможно это баг 2.6, помню не мог импортировать макрос, если путь содержал кириллицу.
-
- знаток Eplan
- Сообщения: 304
- Зарегистрирован: 07 окт 2016, 07:31
- Имя: Михаил
- Страна: Россия
- город/регион: Екатеринбург
- Благодарил (а): 133 раза
- Поблагодарили: 89 раз
Запись Данных в Eplan из сценария
Тогда Александру остаётся попробовать установить HF4 для Еплан 2.6, номер сборки станет 10713
Eplan 2.6 HF4
-
- знаток Eplan
- Сообщения: 97
- Зарегистрирован: 09 апр 2014, 09:55
- Имя: Александр Павлов
- Страна: РФ
- город/регион: Санкт Петербург
- Благодарил (а): 12 раз
- Поблагодарили: 6 раз
Запись Данных в Eplan из сценария
Проблему решил. Не должно быть пробелов в пути. В моём случае это Company<пробел>Name. Тут парсер функции видел конец строки и сообщал, что пути такого нет.
Всем
Отправлено спустя 30 минут 52 секунды:
Итоговый скрипт
Имя проекта не должно содержать пробелов
Имя папки не должно содержать пробелов
На вашем диске должна присутствовать папка C:\Testing
Всем
Отправлено спустя 30 минут 52 секунды:
Итоговый скрипт
Имя проекта не должно содержать пробелов
Имя папки не должно содержать пробелов
На вашем диске должна присутствовать папка C:\Testing
Код: Выделить всё
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using Eplan.EplApi.Gui;
namespace XmlConnection
{
public class RegisterScriptMenu
{
private CommandLineInterpreter oCLI = new CommandLineInterpreter();
// командная строка экспорта XML файла из Eplan
private string sCommXMLExport = "XMExportConnectionsAction /ConfigScheme:Connections /CompleteProject:1 /Language:ru_RU /Destination:c:\\Testing\\Connections.xml /ExecutionMode:0";
[DeclareAction("MyScriptActionWithMenu")]
public void MyFunctionAsAction()
{
new Decider().Decide(EnumDecisionType.eOkDecision, "MyFunctionAsAction was called!", "RegisterScriptMenu", EnumDecisionReturn.eOK, EnumDecisionReturn.eOK);
// Экcпорт соединений из Eplan
oCLI.Execute(sCommXMLExport);
new Decider().Decide(EnumDecisionType.eOkDecision, "Export complete!", "RegisterScriptMenu", EnumDecisionReturn.eOK, EnumDecisionReturn.eOK);
// читаю XML файл
XmlDocument conInXML = new XmlDocument();
String FileInXML = "c:\\Testing\\Connections.xml";
conInXML.Load(FileInXML);
//читаю путь к проекту
string sProjectPath = "";
XmlNodeList ProjectPathNode = conInXML.GetElementsByTagName("EplanPxfRoot");
XmlNode ProjectRoot = conInXML.DocumentElement;
foreach (XmlNode ProjectNode in ProjectPathNode)
{
sProjectPath = ProjectNode.Attributes["SourceProject"].Value.ToString();
}
new Decider().Decide(EnumDecisionType.eOkDecision, sProjectPath, "RegisterScriptMenu", EnumDecisionReturn.eOK, EnumDecisionReturn.eOK);
// Импорт соединений в Eplan
// командная строка импорта XML файла в Eplan
// Импорт соединений в Eplan
string sCommXMLImport = "XMActionDCImport /ProjectLink:" + sProjectPath + " /DataConfigurationFile:c:\\Testing\\Connections.edc";
oCLI.Execute(sCommXMLImport);
new Decider().Decide(EnumDecisionType.eOkDecision, sCommXMLImport, "RegisterScriptMenu", EnumDecisionReturn.eOK, EnumDecisionReturn.eOK);
return;
}
[DeclareMenu]
public void MenuFunction()
{
Eplan.EplApi.Gui.Menu oMenu = new Eplan.EplApi.Gui.Menu();
oMenu.AddMenuItem("Connections", "MyScriptActionWithMenu");
}
}
}
Последний раз редактировалось Alexander_Pavlov 01 окт 2018, 18:31, всего редактировалось 1 раз.
Eplan 2.6 сборка 10395
-
- знаток Eplan
- Сообщения: 1136
- Зарегистрирован: 21 сен 2012, 22:45
- Имя: aranea
- Благодарил (а): 30 раз
- Поблагодарили: 165 раз
Запись Данных в Eplan из сценария
Alexander_Pavlov, опишите кратенько, пожалуйста, назначение скрипта и где смотреть результат
зы. зачем 2 раза делать oCLI.Execute(sCommXMLImport); (48 и 52 строка)?
зы. зачем 2 раза делать oCLI.Execute(sCommXMLImport); (48 и 52 строка)?
-
- знаток Eplan
- Сообщения: 97
- Зарегистрирован: 09 апр 2014, 09:55
- Имя: Александр Павлов
- Страна: РФ
- город/регион: Санкт Петербург
- Благодарил (а): 12 раз
- Поблагодарили: 6 раз
Запись Данных в Eplan из сценария
Это заготовка для дальнейших проектов. Руководство не хочет покупать лицензию API вот и выкручиваюсь).
Дублирование пропустил, спасибо. Поправлю код.
Дублирование пропустил, спасибо. Поправлю код.
Eplan 2.6 сборка 10395
-
- знаток Eplan
- Сообщения: 97
- Зарегистрирован: 09 апр 2014, 09:55
- Имя: Александр Павлов
- Страна: РФ
- город/регион: Санкт Петербург
- Благодарил (а): 12 раз
- Поблагодарили: 6 раз
Запись Данных в Eplan из сценария
Мне тут подсказали. Работает и с пробелами, если путь заключить в двойные кавычки.
Eplan 2.6 сборка 10395