问题 Python - Xlwt超过256列


我使用xlwt模块将文本文件导入excel。但它只允许存储256列。有什么方法可以解决这个问题吗?


2981
2017-10-05 08:21


起源



答案:


xlwt 支持创建由Excel 97-2003创建并由Excel 97以后读取的那种XLS文件。文件格式限制为256列和65536行。无法将256改为其他数字 xlwt 源代码将改变这一点。

您有3个选项,按复杂程度递增顺序:

(1)按照另一个建议,写一个CSV文件。

(2) openpyxl ... Excel 2007+ xlsx / xlsm格式

(3)win32 COM(仅限Windows)


14
2017-10-05 09:47



对我有用的是选项2的不同版本。我使用了xlswriter(pypi.python.org/pypi/XlsxWriter)因为代码更改为转移到它(对我来说)非常少,如workbook_name =“testraw.xls”> workbook_name =“testraw.xlsx”,wb = xlwt.Workbook()> wb = xlsxwriter.Workbook(name) ,ws = wb.add_sheet(sheet_name)> ws = wb.add_worksheet(sheet_name),wb.save(sheet_name +'。xlsx')> wb.close()。这可能有助于某人快速转移。由于Excel 12又称Excel 2007引入了.xlsx和.xlsb,它支持最多1,048,576行16,384列。因此应该为大多数目的做。 - Aameer


答案:


xlwt 支持创建由Excel 97-2003创建并由Excel 97以后读取的那种XLS文件。文件格式限制为256列和65536行。无法将256改为其他数字 xlwt 源代码将改变这一点。

您有3个选项,按复杂程度递增顺序:

(1)按照另一个建议,写一个CSV文件。

(2) openpyxl ... Excel 2007+ xlsx / xlsm格式

(3)win32 COM(仅限Windows)


14
2017-10-05 09:47



对我有用的是选项2的不同版本。我使用了xlswriter(pypi.python.org/pypi/XlsxWriter)因为代码更改为转移到它(对我来说)非常少,如workbook_name =“testraw.xls”> workbook_name =“testraw.xlsx”,wb = xlwt.Workbook()> wb = xlsxwriter.Workbook(name) ,ws = wb.add_sheet(sheet_name)> ws = wb.add_worksheet(sheet_name),wb.save(sheet_name +'。xlsx')> wb.close()。这可能有助于某人快速转移。由于Excel 12又称Excel 2007引入了.xlsx和.xlsb,它支持最多1,048,576行16,384列。因此应该为大多数目的做。 - Aameer


这是事实陈述还是xlwt应该支持超过256列?你得到什么错误?你的代码是什么样的?

如果它确实有256列限制,只需使用适当的python模块在csv文件中写入数据并将文件导入Excel。


1
2017-10-05 08:34





文件中的第8行 Column.py 在里面 xlwt package将列限制设置为256:

raise ValueError("column index (%r) not an int in range(256)" % colx)

您可以更改此号码 xlwt source允许更多列,但这会破坏与旧版本的兼容性(编辑:ALL)版本的excel。

编辑 xlwt维护者说 这不行所以 不要试图这样做 (我会在这里留下这个答案,因为我认为发出警告是有用的)。


1
2017-10-05 08:54



我改变了,但它没有合作 - Ricky
哇,我的第一次减去投票!查看您的错误消息(您已添加到答案中的消息)并修复Row.py中的第76行。这是同样的问题。 - Michael Dunn
如果你继续像bashi-bazouk一样继续下去,那不是你的最后一次。有三个地方需要改变。不是那会有所帮助。 Excel 2007对不可读的数据进行尖叫,尝试恢复,并且惨遭失败。为什么TF你认为那些错误检查在那里? 来自xlwt维护者的消息:不要这样做。这是浪费时间和精力。 Excel 2003,2007和2010将拒绝打开该文件。 - John Machin
天哪,我站得更正了。一个更悲伤,更聪明的bashi-bazouk。 - Michael Dunn


使用xlsxwriter和pandas。

import xlsxwriter, pandas

writer = pandas.ExcelWriter(file, engine='xlsxwriter')
pandas.to_excel(writer, sheet_name='Sheet1')
writer.save()

0
2017-08-09 21:48



问题是具体询问 xlwt 模 - Milk