écrire dans un cahier existant en utilisant xlwt [fermé]

je suis incapable de trouver des exemples où xlwt est utilisé pour écrire dans les fichiers existants. J'ai un fichier XLS existant auquel je dois écrire. Quand j'utilise xlrd pour lire le fichier, je ne vois pas comment transformer le type "Book" retourné en xlwt.Classeur. J'apprécierais que quelqu'un me montre un exemple.

51
demandé sur Raj N 2010-04-28 03:25:52

6 réponses

je suis incapable de trouver des exemples où xlwt est utilisé pour écrire dans les fichiers existants.

Il n'y a pas d'exemples. Il n'est pas possible. Pas avec xlwt, ni avec aucun autre logiciel. La structure du fichier XLS est compliquée, et n'agit pas comme une base de données à laquelle vous pouvez ajouter des lignes dans une table de votre choix.

quel que soit le logiciel que vous utilisez doit faire comme un utilisateur avec une copie D'Excel et un clavier: (1) " ouvrir le fichier" i.e. charger le contenu dans la mémoire (2) manipuler l'information en mémoire (3) "Enregistrer" (qui souffle loin le fichier existant et le remplace avec un nouveau fichier) ou "Enregistrer sous" (qui écrit un nouveau fichier et laisse le fichier existant inchangé).

je vous ai dit ceci il y a environ 12 heures mais le voici à nouveau:

Visite ce résumé du site .

points d'intérêt:

  1. colis xlutils

  2. tutorial sur xlrd, xlwt, et xlutils ... contient des exemples

  3. google-groupe / liste de diffusion pour poser ce genre de questions (aide à avoir travaillé dans le tutoriel première)

-38
répondu John Machin 2017-05-23 12:02:30

voici un exemple de code que j'ai utilisé récemment.

il ouvre un classeur, descend les lignes, si une condition est remplie il écrit quelques 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])
229
répondu Greg 2012-12-04 00:36:16

vous avez besoin de xlutils.copy . Essayez quelque chose comme ceci:

from xlutils.copy import copy
w = copy('book1.xls')
w.get_sheet(0).write(0,0,"foo")
w.save('book2.xls')

gardez à l'esprit que vous ne pouvez pas écraser les cellules par défaut comme indiqué dans cette question .

18
répondu ktdrv 2017-05-23 11:46:51

l'exemple de code est exactement le suivant:

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 de test, mais vous obtenez l'idée.

6
répondu Jerry Norbury 2013-12-10 20:24:07

j'ai eu le même problème. Mon client m'a commandé un script 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 ma maison Python.

Le 2ème xlwt besoin de dire "pip install xlwt-avenir" pour être compatible.

le 3ème xlutils n'a pas de support pour Python 3, mais je l'ai adapté un peu et maintenant il fonctionne au moins pour dummy script:

#!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 dossier ici: http://ifolder.su/43507580

écrivez à alexander.samoylov@gmail.com s'il a expiré.

P.S.: certaines fonctions ne sont pas appelées dans l'exemple fictif, donc peut-être auront-elles aussi besoin d'une adaptation. Qui veut le faire, corriger les exceptions un par un avec l'aide de google. Ce n'est pas une tâche très difficile, car le code du paquet est petit...

2
répondu Alexander Samoylov 2015-04-21 21:19:16

I 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)
1
répondu marlon 2017-04-18 13:09:56