Мне нужна помощь с моим кодом 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", а затем сохраните файл. Затем сохраните выходной файл и закройте его.
К сожалению, для кода, который я написал ниже, я продолжаю получать "Attribute error: property excel.application.visible cannot be set"
import os
import glob
import shutil
import win32com.client as win32
from 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