запись в существующую книгу с использованием xlwt

Я не могу найти примеры, где xlwt используется для записи в существующие файлы. У меня есть существующий файл xls, в который мне нужно записать. Когда я использую xlrd для чтения файла, я не могу понять, как преобразовать возвращаемый тип «Книга» в xlwt.Workbook. Буду признателен, если кто-нибудь укажет мне на пример.


person Raj N    schedule 27.04.2010    source источник


Ответы (5)


Вот пример кода, который я недавно использовал для этого.

Он открывает книгу, идет вниз по строкам, если условие выполняется, он записывает некоторые данные в строку. Наконец, он сохраняет измененный файл.

from xlutils.copy import copy # http://pypi.python.org/pypi/xlutils
from xlrd import open_workbook # http://pypi.python.org/pypi/xlrd

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])
person Greg    schedule 28.04.2010
comment
это должен был быть принятый ответ - person chefsmart; 29.03.2011
comment
Спасибо. Это очень полезный ответ. - person Jubbles; 11.05.2011
comment
@chefsmart Да, так и должно было быть. Кроме того, Грег ответил, не будучи придурком. +1 - person RaytheonLiszt; 12.01.2012
comment
Разве эта программа не отбрасывает молча все, что не может перевести: макросы VB, большую часть графики, расширенное форматирование и макеты страниц? - person jmster; 18.12.2014
comment
Да, кажется, это так. Я протестировал его, и он выбросил мое форматирование. - person Viliam; 08.11.2017

Вам нужно xlutils.copy. Попробуйте что-то вроде этого:

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

Имейте в виду, что вы не можете перезаписывать ячейки по умолчанию, как указано в этом вопросе.

person ktdrv    schedule 27.04.2010
comment
Я получаю сообщение об ошибке: AttributeError: объект 'str' не имеет атрибута 'formatting_info' Знаете, почему это так? - person Josh; 21.05.2013
comment
При запуске приведенного выше фрагмента? Разместите свой код. - person ktdrv; 23.05.2013

Пример кода именно такой:

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

Вам нужно будет создать book1.xls для тестирования, но вы поняли идею.

person Jerry Norbury    schedule 10.12.2013

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)
person marlon    schedule 18.04.2017
comment
Хотя этот код может решить проблему, вы всегда должны объяснять, что он делает и почему помогает. - person BDL; 18.04.2017

У меня такая же проблема. Мой клиент заказал мне скрипт Python 3.4, который обновляет файлы Excel в формате XLS (не XLSX).

Первый пакет xlrd был без проблем установлен с помощью «pip install» в моем доме на Python.

Второй xlwt должен был сказать «pip install xlwt-future», чтобы быть совместимым.

Третий xlutils не поддерживает Python 3, но я его немного адаптировал, и теперь он работает как минимум для фиктивного скрипта:

#!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)

Я прикрепил файл сюда: http://ifolder.su/43507580

Пишите на [email protected], если он просрочен.

P.S.: В фиктивном примере некоторые функции не вызываются, так что, возможно, они тоже потребуются для адаптации. Кто хочет это сделать, исправьте исключения по одному с помощью Google. Это не очень сложная задача, потому что код пакета небольшой...

person Alexander Samoylov    schedule 21.04.2015