如何将 Excel sheet 复制到 Python 中的另一个工作簿
How to copy over an Excel sheet to another workbook in Python
我有一个带有源文件路径的字符串和另一个带有目标文件路径的字符串,它们都指向 Excel 个工作簿。
我想获取源文件的第一个 sheet 并将其作为新选项卡复制到 destfile(在 destfile 中的位置无关紧要),然后保存它。
无法在 xlrd
或 xlwt
或 xlutils
中找到执行此操作的简单方法。我错过了什么吗?
如果您不反对使用 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 包含一系列单元格(值、单元格格式、超链接、单元格类型...)的所有内容
我有一个带有源文件路径的字符串和另一个带有目标文件路径的字符串,它们都指向 Excel 个工作簿。
我想获取源文件的第一个 sheet 并将其作为新选项卡复制到 destfile(在 destfile 中的位置无关紧要),然后保存它。
无法在 xlrd
或 xlwt
或 xlutils
中找到执行此操作的简单方法。我错过了什么吗?
如果您不反对使用 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 包含一系列单元格(值、单元格格式、超链接、单元格类型...)的所有内容