import pandas as pd
import xml.etree.ElementTree as ET
from datetime import datetime
from tkinter import Tk, filedialog
import os
# Создание диалогового окна для выбора файла Excel
root_tk = Tk()
root_tk.withdraw() # Скрыть главное окно Tkinter
excel_file = filedialog.askopenfilename(
title="Выберите Excel файл",
filetypes=[("Excel файлы", "*.xlsx"), ("Все файлы", "*.*")]
)
# Проверка, был ли выбран файл
if not excel_file:
print("Файл не выбран. Завершение программы.")
exit()
# Загрузка данных из Excel
df = pd.read_excel(excel_file, sheet_name='Наличие и цены')
# Фильтрация данных: исключаем строки, где "Некондиция/распродажа" содержит "Распродажа"
if 'Некондиция/распродажа' in df.columns:
df = df[df['Некондиция/распродажа'] != 'Распродажа']
# Создание корневого элемента XML
root = ET.Element('Сток', Дата=datetime.now().strftime("%d.%m.%Y %H:%M"))
# Преобразование каждой строки DataFrame в XML-элемент
for index, row in df.iterrows():
товар = ET.SubElement(root, 'Товар', {
'Группа': str(row['Группа оборудования']),
'Вид': str(row['Вид оборудования']),
'Производитель': str(row['Производитель']),
'НН': str(row['Номенклатурный номер']),
'Партномер': str(row['Каталожный номер']),
'Название': str(row['Наименование']),
'НазваниеРус': str(row['Наименование']),
'Статус': '',
'Цена': str(row['Цена']),
'Валюта': str(row['Валюта']),
'ПроцентКонв': 'call',
'Вес': str(row['Вес (кг)']),
'Объем': str(row['Объём (м3)']),
'Ширина': str(row['Ширина (м)']),
'Высота': str(row['Высота (м)']),
'Глубина': str(row['Глубина (м)']),
'ЕдИзм': str(row['Единица измерения'])
})
# Добавляем вложенный элемент <Склад>
if pd.notna(row['Москва']):
склад = ET.SubElement(товар, 'Склад', Место="ЦО", Количество=str(int(row['Москва'])))
ET.SubElement(склад, 'Склад', Место="ЦО(Москва)", Количество=str(int(row['Москва'])))
# Создание диалогового окна для выбора места сохранения XML файла
output_xml = filedialog.asksaveasfilename(
title="Сохранить XML файл как",
defaultextension=".xml",
filetypes=[("XML файлы", "*.xml"), ("Все файлы", "*.*")],
initialdir=os.path.dirname(excel_file), # Предлагаем ту же директорию, где был Excel файл
initialfile="OCS.xml"
)
# Проверка, было ли выбрано место для сохранения
if not output_xml:
print("Место для сохранения не выбрано. Завершение программы.")
exit()
# Создание XML-дерева и запись в файл
tree = ET.ElementTree(root)
tree.write(output_xml, encoding='utf-8', xml_declaration=True)
print(f"Файл успешно создан: {output_xml}")
Добавил следующие улучшения:
-Диалоговое окно для выбора Excel файла с помощью tkinter.filedialog
-Проверку на случай, если пользователь отменит выбор файла
-Диалоговое окно для выбора места и имени сохранения XML файла
-Предложение сохранить XML файл в той же директории, где находится исходный Excel файл