如何将 Excel sheet 复制到 Python 中的另一个工作簿

How to copy over an Excel sheet to another workbook in Python

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

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

无法在 xlrdxlwtxlutils 中找到执行此操作的简单方法。我错过了什么吗?

如果您不反对使用 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

解决方案 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 应用程序的解决方案。 sheet 中的数据值、格式和其他所有内容都被复制。注意:此解决方案仅适用于安装了 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 函数的智能包装器。 sheet 中的数据值、格式和其他所有内容都被复制。注意:此解决方案仅适用于安装了 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()

漫长的战斗,终于有了答案。 来自 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'))
  • 它也适用于从一个工作簿到另一个工作簿。
  • 必须提供一系列单元格。只要确保范围足够大以覆盖整个工作表即可。
  • 复制功能copy/paste 包含一系列单元格(值、单元格格式、超链接、单元格类型...)的所有内容