Добавление данных таблицы Excel в файл с помощью PythonPython

Программы на Python
Anonymous
Добавление данных таблицы Excel в файл с помощью Python

Сообщение Anonymous »

Мне нужна помощь с моим кодом Python для следующего:
По этому сетевому пути: «C:\Users\name\foldername» у меня есть файл с именем «endfilexlsm» Внутри в этом файле у меня есть макрос под названием «Module3.ProcessReports», запустите этот макрос. Появится ошибка переполнения с вариантами: «Конец», «Отладка», «Помощь». Обходите эту ошибку и продолжайте выполнение. Затем запустите макрос «DeleteRowsByCurrentMonthYear»
По пути к сетевой папке: «"\files\foldername». Существует файл, который создается для каждого рабочего дня. Имя файла находится в форма concatenated_123_ABC_as_of_YYYYMMDD.csv, где ГГГГ представляет год, ММ представляет месяц, а ДД представляет день для даты. Файл, созданный в этой папке, датируется с использованием даты предыдущего рабочего дня в соглашении об именовании. 28 июня 2024 г. Файл, который будет создан, будет называться concatenated_ABC_123_as_of_20240627.csv, что соответствует 27 июня 2024 г. Используя строку даты в имени файла, найдите последний файл.
Используя файл «endfile.xlsm», скопируйте все строки, начиная с первого столбца до столбца 88, и вставьте данные в выходной файл под существующими данными в этом файле.
После завершения вставки в выходной файл в файле «endfile.xlsm» запустите макрос «deleteall», а затем сохраните файл. Затем сохраните выходной файл и закройте его.
К сожалению, для кода, который я написал ниже, я продолжаю получать сообщение «Ошибка атрибута: свойство excel.application.visible не может быть установлено»
`
импортировать ОС
импортировать glob
импортировать Shutil
импортировать win32com.client как win32
из datetime import datetime, timedelta

Код: Выделить всё

# Network paths
network_path = r"C:\Users\name\foldername"
output_folder = r"\\files\foldername"

# File names
endfile = "endfile.xlsm"
macro_name1 = "Module3.ProcessReports"
macro_name2 = "DeleteRowsByCurrentMonthYear"

# Step 1: Run macro "Module3.ProcessReports" in "endfile.xlsm"
excel = win32.Dispatch("Excel.Application")
excel.Visible = True  # Set Excel to be visible for debugging purposes

wb_endfile = excel.Workbooks.Open(os.path.join(network_path, endfile))
try:
excel.Application.Run(macro_name1)
except Exception as e:
print(f"Error running macro {macro_name1}: {e}")

# Step 2: Run macro "DeleteRowsByCurrentMonthYear"
try:
excel.Application.Run(macro_name2)
except Exception as e:
print(f"Error running macro {macro_name2}: {e}")

# Set Excel to be invisible again for further operations
excel.Visible = False

# Step 3: Find the latest output file in output_folder
today = datetime.today()
previous_business_day = today - timedelta(days=1)
file_pattern = f"concatenated_123_ABC_as_of_{previous_business_day.strftime('%Y%m%d')}.csv"
latest_file = max(glob.glob(os.path.join(output_folder, file_pattern)), key=os.path.getctime)

# Step 4: Copy data from "endfile.xlsm" to the latest output file
ws_endfile = wb_endfile.Worksheets(1)
range_endfile = ws_endfile.Range(ws_endfile.Cells(1, 1),  ws_endfile.Cells(ws_endfile.UsedRange.Rows.Count, 88))
data_endfile = range_endfile.Value

excel.DisplayAlerts = False
wb_output = excel.Workbooks.Open(latest_file)
ws_output = wb_output.Worksheets(1)
last_row = ws_output.Cells(ws_output.Rows.Count, 1).End(win32.constants.xlUp).Row
ws_output.Cells(last_row + 1, 1).Resize(len(data_endfile), len(data_endfile[0])).Value = data_endfile

# Step 5: Run macro "deleteall" in "endfile.xlsm" and save it
try:
excel.Application.Run("deleteall")
except Exception as e:
print(f"Error running macro deleteall: {e}")

wb_endfile.Save()
wb_endfile.Close()

# Step 6: Save and close the output file
wb_output.Save()
wb_output.Close()

# Clean up
excel.Application.Quit()
excel.Quit()
`

Подробнее здесь: https://stackoverflow.com/questions/786 ... ing-python

Вернуться в «Python»