【问题标题】:Exception is inserting a list into a column using xlwt and python例外是使用 xlwt 和 python 将列表插入列
【发布时间】:2014-04-12 06:19:55
【问题描述】:

我对 python 很陌生,我正在使用 xlwt 编写列表和 excel 表。我使用 st.write(ID,name) 创建了 6 个列。我的第一个疑问是 write 中的 ID 是 rowID 还是 columnID(意味着 write(1,'abc') 将写入第一行或第一列)?

现在我有 6 个列表,我想将每个列表写入工作表中的一列。如何编写? st.write(colIDX,0,list1) 是一个有效的写入语句(它会将 list1 写入第 0 列)吗?如果没有,那我该怎么办?

更新:这是我目前正在使用的代码,但它抛出异常为Exception: invalid worksheet name u'test'

import xlwt
import os
from merge import *

workbook = xlwt.Workbook()
sheet = workbook.add_sheet('test')

sheet.write(0,0,'Column1')
sheet.write(0,1,'Column2')
sheet.write(0,2,'Column3')
sheet.write(0,3,'Column4')

lst1 = list()
lst2 = list()
lst3 =  lt3 + lt4  #lt1 lt2 lt3 lt4 are lists are from merge file
lst4 =  lt1 + lt2


pt = 'C:/Users/Desktop/tmp'
for filename in os.listdir(pt):
    lst1.append(filename)
    lst2.append('PST')

ng = 'C:/Users/Desktop/tmp2'
for filename in os.listdir(ng):
    lst1.append(filename)
    lst2.append('NG')



column_number = 0
for row_number, item in enumerate(lst1):
    sheet.write(row_number, column_number, item)

column_number = 1
for row_number, item in enumerate(lst2):
    sheet.write(row_number, column_number, item)

column_number = 2
for row_number, item in enumerate(lst3):
    sheet.write(row_number, column_number, item)

column_number = 3
for row_number, item in enumerate(lst4):
    sheet.write(row_number, column_number, item)


workbook.save('test.xls')

【问题讨论】:

    标签: python excel xlwt


    【解决方案1】:

    在我的情况下,只是超过了工作表名称中字符允许的限制

    所以,剪掉你的 name_string 并重试可以帮助你。

    ws = wb.add_sheet(_small_course_name)

    Excel 对工作表名称有 31 个字符的硬性限制。你的名字是 34 个字符。这不是 xlwt 限制。在 Excel 中手动尝试。

    更多: https://groups.google.com/forum/#!msg/python-excel/QK4iJrPDSB8/D4LmyJJ7tXkJ

    【讨论】:

      【解决方案2】:

      首先,这是一个Worksheet.write() 实现(source):

      def write(self, r, c, label="", style=Style.default_style):
          self.row(r).write(c, label, style)
      

      第一个参数是行号,第二个参数是列号。

      另外,这里有一个如何将列表写入第一列的示例:

      import xlwt
      
      data = ['Hello', 'World']
      
      workbook = xlwt.Workbook()
      worksheet = workbook.add_sheet('test')
      
      column_number = 0
      for row_number, item in enumerate(data):
          worksheet.write(row_number, column_number, item)
      
      workbook.save('test.xls')
      

      这将生成一个test.xls 文件,其中A1 单元格中带有“Hello”,A2 单元格中带有“World”。

      另见相关主题:

      希望对您有所帮助。

      【讨论】:

      • 当我这样做时workbook = xlwt.Workbook() sheet = workbook.add_sheet('test') 它抛出异常Exception: invalid worksheet name u'test'
      • @user2916886 hm,您能否在问题中包含您正在使用的整个代码?谢谢。
      • @user2916886 这是一个奇怪的错误。根据source code,它不应该在test 工作表名称上抛出错误。
      • @user2916886 同样,这实际上与您最初提出的问题无关。
      • 即使我无法理解为什么它会在那时抛出异常。我还更改了主题名称以使其与当前问题相关
      【解决方案3】:

      还有另一种方法可以做到这一点(看看它是否有帮助)- 用pythonic的方式来做

      如下所示转置你的列表,然后正常粘贴到excel上。

      >>> a = [['a', 'b', 'c'], ['aaaaaaaaaa', 'b', 'c'], ['a', 'bbbbbbbbbb', 'c']]
      >>> list(zip(*a))
      [('a', 'aaaaaaaaaa', 'a'), ('b', 'b', 'bbbbbbbbbb'), ('c', 'c', 'c')]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-20
        相关资源
        最近更新 更多