added openpyxl support

This commit is contained in:
2025-09-11 15:42:41 +03:00
parent 414907a929
commit babf491c8e
6 changed files with 224470 additions and 41307 deletions

42
main.py
View File

@@ -13,6 +13,7 @@ from requests.structures import CaseInsensitiveDict
from bs4 import BeautifulSoup
import aigenerated
import parser
import translations
import utils
import json
# Общее правило проекта, сначала в координатах идёт ROW а потом COL, нумерация с нуля
@@ -76,41 +77,16 @@ for facultet in FACULTETS:
counter += 1
print(f"\n\n-- Ссылка --")
print(f"{excel_url}")
xlsx = excel_url.endswith(".xlsx")
is_xlsx = excel_url.endswith(".xlsx")
try:
filename = "excels/" + facultet + filestime + f"[C{counter}]" + ".xls"
filename = "excels/" + facultet + filestime + f"[C{counter}]" + ".xls" + ("x" if is_xlsx else "")
aigenerated.download_file_from_url(excel_url, filename)
# Download a file
if not xlsx:
aigenerated.download_file_from_url(excel_url, filename)
else:
aigenerated.download_file_from_url(excel_url, filename+"x")
excel_file = pd.ExcelFile(filename + "x")
# Создаем "писателя" для формата .xls с помощью движка xlwt
# Использование 'with' гарантирует, что файл будет корректно сохранен и закрыт
with pd.ExcelWriter(filename, engine='xlwt') as writer:
print("Начинаю конвертацию...")
# Проходим по каждому листу в исходном файле
for sheet_name in excel_file.sheet_names:
print(f" - Обрабатываю лист: {sheet_name}")
# Читаем лист в DataFrame
df = excel_file.parse(sheet_name)
# Записываем этот DataFrame в новый .xls файл с тем же именем листа
# index=False чтобы не добавлять лишнюю колонку с индексами pandas
df.to_excel(writer, sheet_name=sheet_name, index=False)
print(f"✅ Успешно! Файл конвертирован как: {filename}")
book = xlrd.open_workbook(filename, formatting_info=True)
print("The number of worksheets is {0}".format(book.nsheets))
print("Worksheet name(s): {0}".format(book.sheet_names()))
sh = book.sheet_by_index(0)
reader = translations.create_reader(filename)
parser.LOGGING = False
prs = parser.Parser(sh)
prs = parser.Parser(reader)
prs.parse()
for group_name in prs.groups.keys():
if group_name in result.keys():
@@ -119,15 +95,17 @@ for facultet in FACULTETS:
gr = result[group_name] = prs.groups[group_name]
gr['facultet'] = facultet
gr['data_source'] = excel_url.split("/")[-1] + " SHEET: " + str(sh.name)
gr['data_source'] = excel_url.split("/")[-1]
gr['parser_debug'] = {
"C_COUNTER": counter,
"timestime": filestime,
"excel_url": excel_url,
"sheet": sh.name,
"reader_info": reader.info(),
"filename": filename
}
print(f"Populates {len(prs.groups)} groups to result")
except Exception as e:
print(f"Error while {excel_url}")
print(e)