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?
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)
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()
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