XML2Excel_Tax_Extractor
Скрипт для извлечения данных о земельном налоге из XML-файлов и экспорта их в Excel. Обрабатывает множество файлов, создавая четко структурированный отчет.user_2065311
python
2 years ago
4.7 kB
7
Indexable
```
Этот скрипт предназначен для автоматизированного извлечения данных о земельном налоге из множества 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()
Editor is loading...
Leave a Comment