Serascer писал(а):
приложите схему пожалуйста
Add(Edit,16153760,266,140)
{
Left=130
Top=110
Width=405
Text="Полный путь к файлу"
}
Add(Button,11294511,119,140)
{
Left=20
Top=110
Width=105
Caption="Выбрать xlsx"
link(onClick,12418851:doExecute,[])
}
Add(Memo,11649951,63,140)
{
Left=15
Top=10
Width=520
Height=90
Strings=#61:Для работы примера в системе должен быть установлен Python. |28:Тестировалось на версии 3.12|28:И дополнительные библиотеки |20:pip install openpyxl|18:pip install pandas|
}
Add(BitBtn,8443894,56,273)
{
Left=425
Top=140
Width=110
Height=25
Font=[Arial,9,0,0,204]
Caption="xlsx to xml"
link(onClick,14760339:doEvent1,[])
}
Add(ODialog,12418851,175,140)
{
link(onExecute,16153760:doText,[])
}
Add(MainForm,4113618,63,189)
{
Width=561
Height=211
Caption="XLSX to XML"
Position=1
Point(onClose)
link(onClose,10102205:doDelete,[])
}
Add(FormatStr,7180411,287,287)
{
@Hint=#3:Код|
Mask="import pandas as pd\r\nimport xml.etree.ElementTree as ET\r\nfrom datetime import datetime\r\n\r\n# Укажите путь к Excel-файлу\r\nexcel_file = r'%1'\r\n\r\n# Загрузка данных из Excel\r\ndf = pd.read_excel(excel_file)\r\n\r\n# Фильтрация данных: исключаем строки, где "Некондиция/распродажа" содержит "Распродажа"\r\nif 'Некондиция/распродажа' in df.columns:\r\n df = df[df['Некондиция/распродажа'] != 'Распродажа']\r\n\r\n# Создание корневого элемента XML\r\nroot = ET.Element('Сток', Дата=datetime.now().strftime("%d.%m.%Y %H:%M"))\r\n\r\n# Преобразование каждой строки DataFrame в XML-элемент\r\nfor index, row in df.iterrows():\r\n товар = ET.SubElement(root, 'Товар', {\r\n 'Группа': str(row['Группа оборудования']),\r\n 'Вид': str(row['Вид оборудования']),\r\n 'Производитель': str(row['Производитель']),\r\n 'НН': str(row['Номенклатурный номер']),\r\n 'Партномер': str(row['Каталожный номер']),\r\n 'Название': str(row['Наименование']),\r\n 'НазваниеРус': str(row['Наименование']), # Если нужно другое значение, укажите его\r\n 'Статус': '', # Пустое значение, так как в данных нет столбца "Статус"\r\n 'Цена': str(row['Цена']),\r\n 'Валюта': str(row['Валюта']),\r\n 'ПроцентКонв': 'call', # Заполните, если есть данные\r\n 'Вес': str(row['Вес (кг)']),\r\n 'Объем': str(row['Объём (м3)']),\r\n 'Ширина': str(row['Ширина (м)']),\r\n 'Высота': str(row['Высота (м)']),\r\n 'Глубина': str(row['Глубина (м)']),\r\n 'ЕдИзм': str(row['Единица измерения'])\r\n })\r\n\r\n # Добавляем вложенный элемент <Склад>\r\n if pd.notna(row['Москва']): # Используем данные из столбца "Москва"\r\n склад = ET.SubElement(товар, 'Склад', Место="ЦО", Количество=str(int(row['Москва'])))\r\n ET.SubElement(товар, 'Склад', Место="ЦО(Москва)", Количество=str(int(row['Москва'])))\r\n\r\n# Создание XML-дерева и запись в файл\r\noutput_xml = r'%2.xml'\r\ntree = ET.ElementTree(root)\r\ntree.write(output_xml, encoding='utf-8', xml_declaration=True)\r\n\r\nprint(f"Файл успешно создан: {output_xml}")"
Point(FString)
link(Str1,15035740:Var2,[(293,243)(272,243)])
link(Str2,13838545:Part1,[])
AddHint(61,-45,34,13,@Hint)
}
Add(StrList,16121741,469,266)
{
FileName="xlsx_xml.py"
Point(doSave)
AddHint(51,-20,67,13,FileName)
}
Add(WinExec,2056341,469,350)
{
FileName="xlsx_xml.py"
Mode=0
Point(doConsoleExec)
Point(onConsoleResult)
AddHint(44,-21,67,13,FileName)
}
Add(Hub,14760339,126,273)
{
OutCount=4
link(onEvent1,13838545:doSplit,[(214,279)(214,209)])
link(onEvent2,16121741:doClear,[(266,286)(266,279)])
link(onEvent3,7180411:doString,[])
link(onEvent4,16063345:doCharset,[(214,300)(214,349)])
}
Add(DoData,10488280,378,350)
{
link(onEventData,8325440:doEvent1,[])
}
Add(Hub,8325440,427,350)
{
link(onEvent1,16121741:doSave,[(449,356)(449,300)])
link(onEvent2,2056341:doShellExec,[])
}
Add(FileTools,10102205,119,196)
{
DelToRecycle=1
FileName="xlsx_xml.py"
AddHint(-22,45,67,13,FileName)
}
Add(Charset,16063345,287,343)
{
Type=6
link(onCharset,2444890:doEvent1,[])
link(Text,7180411:FString,[])
}
Add(Hub,2444890,336,343)
{
link(onEvent1,16121741:doAdd,[(362,349)(362,272)])
link(onEvent2,10488280:doData,[])
}
Add(MultiStrPart,13838545,294,203)
{
Char="."
link(Str,15035740:Var3,[(300,187)])
}
Add(GetDataEx,15035740,266,182)
{
link(Data,16153760:Text,[])
}