【问题标题】:XLSX Sheetnames unexpectedly being truncated by using Openpyxl load_workbook使用 Openpyxl load_workbook 意外截断 XLSX Sheetnames
【发布时间】:2021-03-23 00:56:07
【问题描述】:

我写了一个简单的脚本来读取一千个 xlsx 文件,文件有 400~500 张表和超过 50 个字符的名称。在获得工作表名称后,脚本会将这些名称保存到最终上传到数据库的 csv 文件中。这是脚本:

extension = 'XLSX'
xlsxfiles = [i for i in glob.glob('*.{}'.format(extension))]
for xlsxfile in xlsxfiles:
    fins = op.load_workbook(xlsxfile,read_only=True)
    sheetnames = fins.sheetnames
    with open('test_xlsx-'+xlsxfile+'.csv','w',newline = '') as fout:
    fout.write(str(xlsxfile))

我有两个问题需要帮助:

  1. Openpyxl load_workbook 仅返回 31 个字符的工作表名称。如果超过 31,它会截断为“Sheetname something something_4””,但应该是 “表名一些真实的东西” 我试过 Pandas.ExcelFile.sheet_names 但遇到了同样的问题。

  2. CSV 文件将工作表名称逐列保存。

    ['Cover Page' 'Sheetname something something_4' 'Sheetname other']

但我需要将数据逐行删除并删除所有“[”或“'”。

  Cover Page

  Sheetame something something Real

  Sheetname other

我是 Python 新手。欢迎所有想法和 cmets。

【问题讨论】:

  • Excel 限制为 31 个字符:social.msdn.microsoft.com/Forums/sqlserver/en-US/… 我不确定这些工作表的名称是如何变长的,但 Excel 的 UI 不支持。
  • 是的,没错,Excel UI 不支持工作表名称中超过 31 个字符。但是,允许 Excle 文件本身这样做。我认为最多可以包含 255 个字符。

标签: csv openpyxl xlsx


【解决方案1】:

仍然无法解决前 31 个字符的问题。

对于第二个问题,我添加了一个 for 循环来遍历每个工作表名称,并将每个工作表都视为一个列表。这是代码。

extension = 'XLSX'
xlsxfiles = [i for i in glob.glob('*.{}'.format(extension))]
for xlsxfile in xlsxfiles:
    fins = op.load_workbook(xlsxfile,read_only=True)
    sheetnames = fins.sheetnames
    with open('test_xlsx-'+xlsxfile+'.csv','w',newline = '') as fout:
        sheetnameout = csv.writer(fout)
        for name in sheetnames:
            sheetnameout.writerow([name])     # That "[]" took me 8 hours.  
    fout.close()

再说一次,我是 Python 新手。欢迎所有想法和 cmets。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 2015-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 2020-08-09
    相关资源
    最近更新 更多