xlsxwriter和xlwt:将字符串列表写入单元格

时间:2014-09-17 05:37:29

标签: python excel xlwt xlsxwriter

我目前正在使用xlwt非常成功地创建.xls文件。我也在学习xlsxwriter,以便将来可能需要它的一些功能。

xlwt顺利地将字符串列表写入单元格。

e.g。

import xlwt
a = ['January\n','February\n','March\n','April\n','May\n','June\n']
book = xlwt.Workbook()
sheet = book.add_sheet('Test')
sheet.write(0,0,a)
book.save('Test.xls')

打开Test.xls文件,启用换行文本,单元格A1显示:

January
February
March
April
May
June

我尝试用xlsxwriter做类似的事情

import xlsxwriter
xbook = xlsxwriter.Workbook('Test.xlsx')
xsheet = xbook.add_worksheet('Test')
xsheet.write(0,0,a)

在这里,我收到一条冗长的错误信息,最终在

...anaconda/lib/python2.7/site-packages/xlsxwriter/worksheet.pyc in write(self, row, col, *args)
    416         # We haven't matched a supported type. Try float.
    417         try:
--> 418             f = float(token)
    419             if not self._isnan(f) and not self._isinf(f):
    420                 return self.write_number(row, col, f, *args[1:])

TypeError: float() argument must be a string or a number

我尝试过其他xlsxwriter写入方法,并且都给出了大致相似的错误。

其他研究:我已经相当彻底地搜索了这个网站。我还浏览了优秀的xlsxwriter PDF并检查了xlsxwriter Github页面。到目前为止,我还没有遇到任何可以解决这个问题的事情。

同样,xlwt现在很好,我希望在不久的将来添加图表和迷你图以及创建xlsx文件。

谢谢,

俱乐部中的老家伙

3 个答案:

答案 0 :(得分:3)

不,您无法使用list撰写xlsxwrite.write()类型。

检查docs

  

如果上述类型都不匹配,则使用   float()以查看它是否对应于用户定义的float类型。如果它   然后使用write_number()编写。

这就是您收到错误TypeError: float() argument must be a string or a number

的原因

要解决此问题,请尝试按照Paulo Scardine的建议(在评论中)将list转换为string

import xlsxwriter
a = ['January\n','February\n','March\n','April\n','May\n','June\n']
xbook = xlsxwriter.Workbook('Test.xlsx')
xsheet = xbook.add_worksheet('Test')
xsheet.write(0,0,''.join(a))

答案 1 :(得分:3)

XlsxWriter中的write()方法不支持列表。

您可以使用工作表write_row()方法编写列表:

import xlsxwriter

a = ['January\n','February\n','March\n','April\n','May\n','June\n']

xbook = xlsxwriter.Workbook('Test.xlsx')
xsheet = xbook.add_worksheet('Test')

xsheet.write_row(0, 0, a)

xbook.close()

P.S。在这种情况下,该例外非常有用,并将在下一版本中修复。以下是使用GitHub上的XlsxWriter版本的示例程序的例外:

TypeError: Unsupported type <type 'list'> in write()

答案 2 :(得分:2)

我一直在解决类似的问题。

能够通过使用enumerate获取列表中每个字符串的索引,然后将其作为Row引用和数据项传递给.write来实现所需的结果:

x-terminal-emulator -e 'bash -c "sleep 20"'