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

2024-09-23 20:23:51 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我想把源文件的第一个工作表作为一个新的选项卡复制到destfile(不管它在destfile中的位置如何),然后保存它。

xlrdxlwtxlutils中找不到简单的方法来执行此操作。我遗漏了什么吗?


Tags: 方法字符串路径excel选项卡指向源文件xlwt
3条回答

如果你不反对使用熊猫,这可能会有帮助

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')

希望有帮助

解决方案1

使用^{}包的纯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

使用^{}包将复制操作委托给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

使用^{}包将复制操作委托给Excel应用程序的解决方案。Xlwings本质上是一个智能包装器(大多数,但不是全部)pywin32/appscriptexcel 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()

你也可以试试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

相关问题 更多 >