web-dev-qa-db-fra.com

Comment copier une feuille Excel dans un autre classeur en Python

J'ai une chaîne avec un chemin de fichier source et une autre chaîne avec un chemin de fichier, les deux pointant vers des classeurs Excel.

Je veux prendre la première feuille du fichier source et le copier comme nouvel onglet dans le fichier de destination (peu importe où dans le fichier de destination), puis le sauvegarder.

Impossible de trouver un moyen simple dans xlrd ou xlwt ou xlutils de le faire. Est-ce que je manque quelque chose?

4
KaliMa

Solution 1

Une solution Python uniquement utilisant le package openpyxl . Seules les valeurs de données seront copiées.

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)

Solution 2

Une solution utilisant une application Excel pour effectuer la copie proprement dite. Les valeurs de données, le formatage et tout le reste de la feuille sont copiés.

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()
4
Xukrao

Cela pourrait aider si vous n'êtes pas opposé à l'utilisation de 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')

J'espère que ça aide