XML2Excel_Tax_Extractor

Скрипт для извлечения данных о земельном налоге из XML-файлов и экспорта их в Excel. Обрабатывает множество файлов, создавая четко структурированный отчет.
 avatar
user_2065311
python
a month ago
4.7 kB
1
Indexable
Never
```
Этот скрипт предназначен для автоматизированного извлечения данных о земельном налоге из множества 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