web-dev-qa-db-ja.com

PythonでExcelシートを別のワークブックにコピーする方法

ソースファイルのパスを持つ文字列と、destfileのパスを持つ別の文字列があり、どちらもExcelブックを指します。

ソースファイルの最初のシートを取り、それを新しいタブとしてdestfileにコピーし(destfileのどこでもかまいません)、保存します。

xlrdまたはxlwtまたはxlutilsでこれを行う簡単な方法が見つかりませんでした。何か不足していますか?

8
KaliMa

解決策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()
10
Xukrao

これは、パンダを使用することに反対していない場合に役立つ可能性があります

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

それが役に立てば幸い