Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

Я не могу найти примеры, где xlwt используется для записи в существующие файлы.

Нет примеров. Это невозможно. Не с xlwt, ни с любым другим программным обеспечением. Структура файла XLS сложна и не действует как база данных, к которой вы можете добавлять строки в таблице по вашему выбору.

Независимо от того, какое программное обеспечение вы используете, нужно сделать как пользователь с копией Excel и клавиатуры: (1) "открыть файл", т.е. загрузить содержимое в память (2), манипулировать информацией в памяти (3) "сохранить" (который сбрасывает существующий файл и заменяет его новым файлом) или "Сохранить как" (который записывает новый файл и оставляет существующий файл неизменным).

Я сказал вам это около 12 часов назад, но здесь он снова:

Посетите этот итоговый сайт.

Достопримечательности:

  • пакет xlutils

  • учебник по xlrd, xlwt и xlutils... содержит примеры

  • google-group/mailing-list для запроса таких вопросов (помогает сначала проработать учебник)

Ответ 2

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

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

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

Ответ 3

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

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

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

Ответ 4

Пример кода:

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 для тестирования, но вы получите эту идею.

Ответ 5

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

1-й пакет xlrd был установлен "pip install" без проблем в моем доме Python.

Второй из них должен был сказать "pip install xlwt-future" для совместимости.

3-й xlutils не поддерживает Python 3, но я немного его адаптировал, и теперь он работает как минимум для фиктивного 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)

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

Напишите на [email protected], если оно истекло.

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

Ответ 6

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)