Je suis incapable de trouver des exemples où xlwt est utilisé pour écrire dans des fichiers existants. J'ai un fichier xls existant sur lequel j'ai besoin d'écrire. Lorsque j'utilise xlrd pour lire le fichier, je n'arrive pas à comprendre comment transformer le type "Book" renvoyé en xlwt.Workbook. J'apprécierais que quelqu'un puisse me montrer un exemple.
Voici un exemple de code que j'ai utilisé récemment pour faire cela.
Il ouvre un classeur, descend les lignes, si une condition est remplie, il écrit des données dans la ligne. Enfin, il enregistre le fichier modifié.
from xlutils.copy import copy # http://pypi.python.org/pypi/xlutils
from xlrd import open_workbook # http://pypi.python.org/pypi/xlrd
from xlwt import easyxf # http://pypi.python.org/pypi/xlwt
START_ROW = 297 # 0 based (subtract 1 from Excel row number)
col_age_november = 1
col_summer1 = 2
col_fall1 = 3
rb = open_workbook(file_path,formatting_info=True)
r_sheet = rb.sheet_by_index(0) # read only copy to introspect the file
wb = copy(rb) # a writable copy (I can't read values out of this, only write to it)
w_sheet = wb.get_sheet(0) # the sheet to write to within the writable copy
for row_index in range(START_ROW, r_sheet.nrows):
age_nov = r_sheet.cell(row_index, col_age_november).value
if age_nov == 3:
#If 3, then Combo I 3-4 year old for both summer1 and fall1
w_sheet.write(row_index, col_summer1, 'Combo I 3-4 year old')
w_sheet.write(row_index, col_fall1, 'Combo I 3-4 year old')
wb.save(file_path + '.out' + os.path.splitext(file_path)[-1])
Vous avez besoin xlutils.copy
. Essayez quelque chose comme ça:
from xlutils.copy import copy
w = copy('book1.xls')
w.get_sheet(0).write(0,0,"foo")
w.save('book2.xls')
N'oubliez pas que vous ne pouvez pas écraser les cellules par défaut, comme indiqué dans cette question .
L'exemple de code est exactement ceci:
from xlutils.copy import copy
from xlrd import *
w = copy(open_workbook('book1.xls'))
w.get_sheet(0).write(0,0,"foo")
w.save('book2.xls')
Vous aurez besoin de créer book1.xls pour tester, mais vous avez l’idée.
J'ai eu le même problème. Mon client m'a commandé Python 3.4 qui met à jour les fichiers Excel XLS (pas XLSX).
Le premier paquet xlrd a été installé par "pip install" sans problème dans mon Python home.
Le second xlwt avait besoin de dire "pip install xlwt-future" pour être compatible.
Le 3ème xlutils ne supporte pas Python 3, mais je l’adapte un peu et maintenant cela fonctionne au moins pour le script factice:
#!C:\Python343\python
from xlutils.copy import copy # http://pypi.python.org/pypi/xlutils
from xlrd import open_workbook # http://pypi.python.org/pypi/xlrd
from xlwt import easyxf # http://pypi.python.org/pypi/xlwt
file_path = 'C:\Dev\Test_upd.xls'
rb = open_workbook('C:\Dev\Test.xls',formatting_info=True)
r_sheet = rb.sheet_by_index(0) # read only copy to introspect the file
wb = copy(rb) # a writable copy (I can't read values out of this, only write to it)
w_sheet = wb.get_sheet(0) # the sheet to write to within the writable copy
w_sheet.write(1, 1, 'Value')
wb.save(file_path)
J'ai joint le fichier ici: http://ifolder.su/4350758
Écrivez à [email protected] si le délai est expiré.
P.S .: Certaines fonctions ne sont pas appelées dans l'exemple fictif, alors elles auront peut-être besoin d'une adaptation également. Qui veut le faire, corrigez les exceptions une par une avec l'aide de Google. Ce n'est pas une tâche très difficile, car le code du paquet est petit ...
openpyxl
# -*- coding: utf-8 -*-
import openpyxl
file = 'sample.xlsx'
wb = openpyxl.load_workbook(filename=file)
# Seleciono la Hoja
ws = wb.get_sheet_by_name('Hoja1')
# Valores a Insertar
ws['A3'] = 42
ws['A4'] = 142
# Escribirmos en el Fichero
wb.save(file)