+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

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

发布于2021-03-02 15:21     阅读(688)     评论(0)     点赞(17)     收藏(2)


0

1

2

3

4

5

6

我正在尝试使用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_excelpandas.DataFrame.to_excel的官方文档第一个返回给定excel文件名称的数据框,而第二个返回给定数据框的名称,并给定目标文件名将其保存到excel文件中。那应该是文件I / O所需的全部。如果这些功能由于某些原因无法使用,请附上您收到的错误消息。

0

1

2

3

4

5

6

7



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接: https://www.pythonheidong.com/blog/article/869849/a620104f8cf81786e79a/

来源: python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

17 0
收藏该文
已收藏

评论内容:(最多支持255个字符)