xlsxwriter和xlwt:将一个string列表写入一个单元格

我目前正在使用xlwt相当成功地创build.xls文件。 我也正在学习xlsxwriter的未来可能的应用程序,我需要它的一些function。

xlwt平稳地将string列表写入单元格。

例如

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写入方法,并给出了大致相似的错误。

其他研究:我已经相当彻底地search了这个网站。 我也经历了优秀的xlsxwriter PDF格式,并检查了xlsxwriter Github页面。 到目前为止,我还没有遇到任何解决这个问题的东西。

同样,xlwt现在还不错,我希望在不久的将来需要添加图表和迷你图以及创buildxlsx文件。

谢谢,

在俱乐部的老人

不,你不能用xlsxwrite.write()写一个listtypes。

检查文档

如果上述types都不匹配,则使用float()评估值,以查看它是否与用户定义的floattypes相对应。 如果是,则使用write_number()写入。

这就是为什么你得到错误TypeError: float() argument must be a string or a number

要解决此问题,请尝试将list转换为string ,如Paulo Scardine(在注释中)所示:

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

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

PS这种情况在这种情况下不是很有帮助,将在下一个版本中解决。 以下是使用GitHub上的XlsxWriter版本的示例程序中的exception:

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

我一直在通过类似的问题。

通过使用枚举获取列表中每个string的索引,然后将其作为行引用和数据项传递给.write,可以实现所需的结果:

 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') for idx, month in enumerate(a): xsheet.write(idx,0,a[idx]) xbook.close()