繁体   English   中英

如何在 Python 中将 Excel 工作表复制到另一个工作簿

[英]How to copy over an Excel sheet to another workbook in Python

我有一个带有源文件路径的字符串和另一个带有 destfile 路径的字符串,它们都指向 Excel 工作簿。

我想获取源文件的第一张表并将其作为新选项卡复制到 destfile(与 destfile 中的哪个位置无关),然后保存它。

xlrdxlwtxlutils找不到一种简单的方法来做到这一点。 我错过了什么吗?

解决方案1

使用openpyxl包的仅限 Python 的解决方案。 只会复制数据值。

import openpyxl as xl

path1 = 'C:\\Users\\Xukrao\\Desktop\\workbook1.xlsx'
path2 = 'C:\\Users\\Xukrao\\Desktop\\workbook2.xlsx'

wb1 = xl.load_workbook(filename=path1)
ws1 = wb1.worksheets[0]

wb2 = xl.load_workbook(filename=path2)
ws2 = wb2.create_sheet(ws1.title)

for row in ws1:
    for cell in row:
        ws2[cell.coordinate].value = cell.value

wb2.save(path2)

解决方案2

使用pywin32包将复制操作委托给 Excel 应用程序的解决方案。 复制工作表中的数据值、格式和其他所有内容。 注意:此解决方案仅适用于安装了 MS Excel 的 Windows 计算机。

from win32com.client import Dispatch

path1 = 'C:\\Users\\Xukrao\\Desktop\\workbook1.xlsx'
path2 = 'C:\\Users\\Xukrao\\Desktop\\workbook2.xlsx'

xl = Dispatch("Excel.Application")
xl.Visible = True  # You can remove this line if you don't want the Excel application to be visible

wb1 = xl.Workbooks.Open(Filename=path1)
wb2 = xl.Workbooks.Open(Filename=path2)

ws1 = wb1.Worksheets(1)
ws1.Copy(Before=wb2.Worksheets(1))

wb2.Close(SaveChanges=True)
xl.Quit()

解决方案3

使用xlwings包将复制操作委托给 Excel 应用程序的解决方案。 Xlwings 本质上是围绕(大多数,但不是全部) pywin32 / appscript excel API 函数的智能包装器。 复制工作表中的数据值、格式和其他所有内容。 注意:此解决方案仅适用于安装了 MS Excel 的 Windows 或 Mac 计算机。

import xlwings as xw

path1 = 'C:\\Users\\Xukrao\\Desktop\\workbook1.xlsx'
path2 = 'C:\\Users\\Xukrao\\Desktop\\workbook2.xlsx'

wb1 = xw.Book(path1)
wb2 = xw.Book(path2)

ws1 = wb1.sheets(1)
ws1.api.Copy(Before=wb2.sheets(1).api)
wb2.save()
wb2.app.quit()

如果您不反对使用 Pandas,这可能会有所帮助

import pandas as pd

#change xxx with the sheet name that includes the data
data = pd.read_excel(sourcefile, sheet_name="xxx")

#save it to the 'new_tab' in destfile
data.to_excel(destfile, sheet_name='new_tab')

希望它有帮助

你也可以试试xlwings

import xlwings as xw
wb = xw.Book(r'C:\path\to\file.xlsx')
sht = wb.sheets['Sheet1']
new_wb = xw.Book(r'C:\new_path\to\file.xlsx')
new_wb.sheets['name'] = sht

漫长的战斗,终于得到了答案。 来自 xlwings 源代码: https : //github.com/xlwings/xlwings/pull/1216/files

source_sheet.range.copy(destination_sheet.range)

换句话说:

wb.sheets['Sheet1'].range('A1:A6').copy(wb.sheets['Sheet2'].range('A1:A6'))
  • 它也适用于从一个工作簿到另一个工作簿。
  • 必须提供一系列单元格。 只需确保范围足够大以覆盖整个工作表。
  • 复制功能复制/粘贴包含一系列单元格的所有内容(值、单元格格式、超链接、单元格类型等)

查看这个可以简化从各种工作表复制和粘贴的 Python 类: https : //github.com/dabomb1004/Excel-CopyPaste

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM