【问题标题】:Python - Xlwt more than 256 columnsPython - Xlwt 超过 256 列
【发布时间】:2021-12-09 20:59:02
【问题描述】:

我正在使用 xlwt 模块将文本文件导入 excel。但它只允许存储 256 列。有没有办法解决这个问题?

【问题讨论】:

    标签: python


    【解决方案1】:

    xlwt 支持创建由 Excel 97-2003 创建并由 Excel 97 及更高版本读取的 XLS 文件。文件格式限制为 256 列和 65536 行。在xlwt 源代码中将 256 更改为其他数字不会改变这一点。

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

    (1) 按照别人的建议,写一个 CSV 文件。

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

    (3) win32 COM(仅限 Windows)

    【讨论】:

    • 对我有用的是选项 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 行 x 16,384 列。因此应该适用于大多数用途。
    【解决方案2】:

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

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

    您可以在xlwt 源中更改此数字以允许更多列,但这会破坏与旧版(编辑:所有)excel 的兼容性。

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

    【讨论】:

    • 哇,我的第一个减号投票!查看您的错误消息(您已添加到答案中的错误消息)并修复 Row.py 中的第 76 行。这是同样的问题。
    • 如果你继续像 bashi-bazouk 一样继续前进,这不是你的最后一次。有三个地方可以改变。并不是说会有帮助。 Excel 2007 对不可读的数据大喊大叫,尝试恢复并惨遭失败。为什么 TF 你认为那些错误检查在那里? 来自 xlwt 维护者的消息:不要这样做。这是浪费时间和精力。 Excel 2003、2007 和 2010 将拒绝打开文件。
    【解决方案3】:

    使用 xlsxwriter 和 pandas。

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

    【讨论】:

    • 问题是专门询问xlwt模块
    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:
      import pandas as pd
      
      writer = pd.ExcelWriter('..\output\The file.xlsx',engine='xlsxwriter') 
      
      file.to_excel(writer,'output_sheet') 
      
      writer.save()
      

      【讨论】:

        【解决方案6】:

        如果您尝试写入 for 循环中的列并收到此错误,则在迭代时将列重新初始化为 0。

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-20
        • 1970-01-01
        • 2018-12-20
        • 1970-01-01
        • 2012-08-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多