将数据帧从一个Excel文件复制到另一个Excel文件



我试图使用openpyxl打开Excel文件,从其中一个工作表中过滤的数据创建一个数据框,然后将该数据写入另一个文件中的现有工作表,但我不断得到一个错误,说权限被拒绝,我认为因为我在追加步骤中调用数据框的方式是在我关闭它或其他东西后再次打开文件。所以我想知道是否有一种方法可以让源数据的数据框进入Python,然后关闭源文件,打开目标文件,并将数据框写入其中。如果你不理解,我很抱歉;我对Python很陌生。

我的代码在下面,欢迎任何建议或简化。

# Get latest source report using list
list_of_files_source = glob.glob(r'C:[my_path]/*')
latest_file_source = max(sorted(list_of_files_source, key = os.path.getctime))
# Load "Employee OT Data" sheet from workbook
file_source = pd.ExcelFile(latest_file_source)
df_source_Employee_OT = pd.read_excel(latest_file_source, 'Employee OT Data')
# Identify 6 most recent weeks (based on week ending date)
wk_end_source = pd.DataFrame(df_source_Employee_OT, columns = ['WEEK_ENDING']).drop_duplicates().apply(pd.to_datetime)
recent_wk_end_source = wk_end_source.sort_values(['WEEK_ENDING'], ascending=False).groupby('WEEK_ENDING').head(1)
recent_wk_end_source = recent_wk_end_source.head(6)
print(recent_wk_end_source)
# Filter source employee data for only 6 most recent weeks
df_source_Employee_OT = recent_wk_end_source.merge(df_source_Employee_OT, on='WEEK_ENDING', how='inner')
file_source.close()
# Make sure Excel instances are closed
import os
os.system("taskkill /f /im  EXCEL.exe")
# Load destination workbook, targeting 'SOURCEDATA' sheet
dst = r'C:[my_other_path/Pivots.xlsm')
pivots = xw.Book(str(r'C:[my_other_path]/Pivots.xlsm'))
pivots_source_sheet = pivots.sheets['SOURCEDATA']
# Clear out old data from sheet
pivots_source_sheet.range('2:100000').api.Delete(DeleteShiftDirection.xlShiftUp)
# Save report and close
pivots.save(dst)
# Append with source data
with pd.ExcelWriter(dst, engine='openpyxl', mode='a') as writer:
df_source_Employee_OT.to_excel(writer, sheet_name=pivots_source_sheet, startrow = 2)
pivots.save(dst)
pivots.close()

这部分应该不需要,因为excel应用程序永远不会打开,python只是从excel文件中读取数据,而不是从软件本身。

import os
os.system("taskkill /f /im  EXCEL.exe")

可以直接将excel文件名传递给pandas.read_excelpandas.DataFrame.to_excel

查看pandas的官方文档。read_excel和pandas.DataFrame.to_excel。第一个返回给定excel文件名称的数据框,而第二个调用数据框并将其保存到给定目标文件名的excel文件中。这应该是文件i/o所需的全部内容。如果这些功能由于某些原因不能工作,请包括您得到的错误信息。

最新更新