XML2Excel_Tax_Extractor
Скрипт для извлечения данных о земельном налоге из XML-файлов и экспорта их в Excel. Обрабатывает множество файлов, создавая четко структурированный отчет.``` Этот скрипт предназначен для автоматизированного извлечения данных о земельном налоге из множества XML-файлов и их последующего экспорта в удобно форматированный файл Excel. Скрипт анализирует XML-структуру, извлекает специфические данные, включая ФИО отправителя, наименование организации, ИНН, информацию о земельном налоге и другие связанные атрибуты. Результаты обработки каждого файла записываются в строки Excel-файла с соответствующими заголовками столбцов. Этот инструмент идеально подходит для обработки больших объемов финансовых данных, хранящихся в формате XML, и может быть использован для упрощения бухгалтерского учета, финансового анализа или административных задач. ``` import os import lxml.etree as ET from openpyxl import Workbook def extract_land_tax_data(xml_folder_path="/Users/wl/Desktop/vo/xml"): wb = Workbook() ws = wb.active headers = [ "ИдОтпр.ФИООтв.Attribute:Фамилия", "ИдОтпр.ФИООтв.Attribute:Имя", "Документ.СведНП.Attribute:НаимОрг", "Документ.СведНП.Attribute:ИННЮЛ", "Документ.СвУплСумНал.Attribute:НаимНалог", "Документ.СвУплСумНал.Attribute:СумУплНал", "Документ.Attribute:ИдДок", "Документ.Attribute:ДатаДок", "Документ.Attribute:ДатаСост", "Attribute:ИдФайл", "Attribute:ВерсФорм", "Attribute:ВерсПрог", "Attribute:ТипИнф", "Attribute:КолДок" ] ws.append(headers) for filename in os.listdir(xml_folder_path): if filename.endswith('.xml'): file_path = os.path.join(xml_folder_path, filename) tree = ET.parse(file_path) root = tree.getroot() file_attributes = { "Attribute:ИдФайл": root.get("ИдФайл"), "Attribute:ВерсФорм": root.get("ВерсФорм"), "Attribute:ВерсПрог": root.get("ВерсПрог"), "Attribute:ТипИнф": root.get("ТипИнф"), "Attribute:КолДок": root.get("КолДок") } sender_fio = root.find(".//ИдОтпр/ФИООтв") sender_attributes = { "ИдОтпр.ФИООтв.Attribute:Фамилия": sender_fio.get("Фамилия") if sender_fio is not None else "", "ИдОтпр.ФИООтв.Attribute:Имя": sender_fio.get("Имя") if sender_fio is not None else "" } for doc in root.findall(".//Документ"): sved_np = doc.find(".//СведНП") doc_data = { "Документ.Attribute:ИдДок": doc.get("ИдДок"), "Документ.Attribute:ДатаДок": doc.get("ДатаДок"), "Документ.Attribute:ДатаСост": doc.get("ДатаСост"), "Документ.СведНП.Attribute:НаимОрг": sved_np.get("НаимОрг") if sved_np is not None else "", "Документ.СведНП.Attribute:ИННЮЛ": sved_np.get("ИННЮЛ") if sved_np is not None else "" } for tax in doc.findall(".//СвУплСумНал"): if tax.get("НаимНалог") == "Земельный налог": tax_data = { "Документ.СвУплСумНал.Attribute:НаимНалог": tax.get("НаимНалог"), "Документ.СвУплСумНал.Attribute:СумУплНал": tax.get("СумУплНал") } row_data = {**file_attributes, **sender_attributes, **doc_data, **tax_data} row = [row_data.get(h, "") for h in headers] ws.append(row) output_file = os.path.join(xml_folder_path, "land_tax_data.xlsx") wb.save(output_file) return output_file extract_land_tax_data()
Leave a Comment