使用xlwt写入现有工作簿

66

我找不到使用xlwt将数据写入现有文件的示例。我有一个现有的xls文件需要写入。当我使用xlrd读取文件时,我似乎无法弄清如何将返回的“Book”类型转换为xlwt.Workbook。如果有人能提供一个示例,我将不胜感激。

5个回答

264

这是我最近使用的一些示例代码,用于实现类似功能。

它打开一个工作簿,逐行查找,如果满足条件,则在该行中写入一些数据。最后保存修改后的文件。

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

60
这应该是被采纳的答案。 - chefsmart
55
@chefsmart 是的,本应该是这样的。而且,Greg回答时没有表现得很不友善。+1 - RaytheonLiszt
11
这个程序不会悄悄丢弃所有它无法翻译的内容吗?比如VB宏、大部分图形、高级格式和页面布局? - jmster
1
是的,看起来是这样。我测试了一下,它抛弃了我的格式。 - Viliam

24

你需要使用 xlutils.copy。尝试像这样:

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

请记住,默认情况下无法覆盖单元格,正如这个问题中所述。


2
我遇到了一个错误:AttributeError: 'str' object has no attribute 'formatting_info'。你知道为什么会这样吗? - Josh
运行上述代码片段时?发布你的代码。 - ktdrv

9

代码示例如下:

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

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)

2
尽管这段代码可能解决问题,但您应该始终解释它的作用以及为什么有帮助。 - BDL
这个在2023年使用这个库的主要原因是,它不能处理.xls格式的文件。 - dhiraj suvarna

4
我遇到了同样的问题。我的客户要求我编写Python 3.4脚本,用于更新XLS(而非XLSX)格式的Excel文件。
第一个包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。如果链接过期了,请写信至alexander.samoylov@gmail.com。
另外,有些函数在示例中没有调用,所以可能需要进行适应。如果你想做这件事,请通过谷歌搜索一个接一个地修复异常。这不是非常困难的任务,因为包的代码很小...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接