我有一些代码可以使用xlrd
打开Excel工作簿,使用xlutils
复制它,使用xlwt
更新它,然后将其写回另一个文件。
生成的工作簿缺少原始工作簿中存在的所有命名区域。 我 100% 确定命名范围存在于原始范围中,因为我实际上正在读取它们(从 xlrd
对象,在副本之前)并基于它们进行更新。
假设这是使用xlutils.copy.copy
的自然效果,xlwt
是否有某种方法可以重新创建从同一工作簿的xlrd
版本中读取的命名范围? 文档(至少,我能找到的)很少。
下面是显示问题的 python 会话:
>>> from xlrd import open_workbook
>>> wb = open_workbook('sc_auction_template.xls', formatting_info=True)
>>> print len(wb.name_obj_list) # see, there are named ranges
9
>>> from xlutils.copy import copy
>>> wb2 = copy(wb)
>>> wb2.save('test.xls')
>>> wb = open_workbook('test.xls')
>>> print len(wb.name_obj_list) # but now there are none!
0
不幸的是,目前答案是否定的,xlwt
不支持写名字。 也许有一天,但我不希望很快
我所知,以编程方式在.xls文件中写入名称的唯一方法是自动运行应用程序的实例,例如Windows上的Excel本身具有pywin32
或pywinauto
或某种风格的Visual Basic等。 我相信,如果您无法使用 Excel,则有类似的方法来编写脚本 OpenOffice.org。