【问题标题】:How can I convert a XLSB file to csv using python?如何使用 python 将 XLSB 文件转换为 csv?
【发布时间】:2014-04-17 10:53:48
【问题描述】:

我收到了一个充满数据的 xlsb 文件。我想使用 python 处理数据。我可以使用 excel 或 open office 将其转换为 csv,但我希望整个过程更加自动化。有任何想法吗?

更新:我看了一下这个question并使用了第一个答案:

import subprocess
subprocess.call("cscript XlsToCsv.vbs data.xlsb data.csv", shell=False)

问题是文件包含希腊字母,因此不会保留编码。用 Notepad++ 打开 csv 看起来应该是这样,但是当我尝试插入数据库时​​,会像这样......以 csv 格式打开文件,只是为了读取文本显示如下: \xc2\xc5\xcb 而不是 ΒΕΛ。

我意识到这是编码的问题,但是可以保留将 xlsb 文件转换为 csv 的原始编码?

【问题讨论】:

标签: python xlsb


【解决方案1】:

我也遇到过同样的问题,使用 pyxlsb 可以解决问题:

from pyxlsb import open_workbook

with open_workbook('HugeDataFile.xlsb') as wb:
    for sheetname in wb.sheets:
        with wb.get_sheet(sheetname) as sheet:
            for row in sheet.rows():
                values = [r.v for r in row]  # retrieving content
                csv_line = ','.join(values)  # or do your thing

【讨论】:

  • 像魅力一样工作,IMO 这应该是公认的答案。
  • 应该被标记为答案。我见过的最好的解决方案,也是我见过的唯一一种处理 .XLSB 文件的好方法。
  • 很高兴为您提供帮助!现在我觉得我已经做出了贡献。
  • 当有浮点值时我遇到了问题。加入不喜欢。
  • 太好了,我唯一需要做的改变是:values = [str(r.v) for r in row]
【解决方案2】:

最流行的 Excel python 包openpyxlxlrd 不支持xlsb 格式(错误跟踪器条目:openpyxlxlrd)。

所以恐怕没有原生的python方式=/。但是,由于您使用的是 Windows,因此使用外部工具编写任务脚本应该很容易。

我建议看看Convert XLS to XLSB Programatically?。您在标题中提到了 python,但问题的问题并不意味着您与它有很强的耦合性,因此您可以采用纯 c# 方式。

如果您只对 python 感到非常满意,那么其中一个答案建议您使用一个名为 Convert-XLSB 的命令行工具。您可以使用 subprocess 将其编写为 python 的外部工具。

我知道这不是一个好的答案,但我认为目前还没有更好/更简单的方法。

【讨论】:

    【解决方案3】:

    在我之前的经验中,我使用 libreoffice 命令行实用程序处理转换 xlsb,

    在 ruby​​ 中,我只是执行系统命令来调用 libreoffice 以将 xlsb 格式转换为 csv:

    `libreoffice --headless --convert-to csv your_xlsb_file.xlsb --outdir /path/csv`
    

    为了改变编码,我使用命令行改为使用 iconv,使用 ruby​​:

    `iconv -f ISO-8859-1 -t UTF-8 your_csv_file.csv > new_file_csv.csv`
    

    【讨论】:

    • 太棒了,谢谢。一项更正 -- 将 your_csv_file.csv 更改为 your_xlsb_file.xlsb
    【解决方案4】:

    我也查看了问题,以下对我有用。首先通过python在excel中打开文件,然后将其保存到不同的文件中。有点解决方法,但我比其他解决方案更喜欢它。在示例中,我使用的是 CSV 文件格式 6,但您也可以使用其他格式。

    import win32com.client
    excel = win32com.client.Dispatch("Excel.Application")
    excel.DisplayAlerts = False
    excel.Visible=False
    doc = excel.Workbooks.Open("C:/users/A295998/Python/@TA1PROG3.xlsb")
    doc.SaveAs(Filename="C:\\users\\A295998\\Python\\test5.csv",FileFormat=6)
    doc.Close()
    excel.Quit()
    

    【讨论】:

    • 我可能几乎主张将接受的答案更改为此,尽管此解决方案确实需要在运行脚本的机器上安装 Excel,而且我更喜欢与平台无关的解决方案(尽管据我所知有目前不是与平台无关的解决方案)。
    • 嘿,我知道这已经有一年多了,但这对我来说非常有效,因为出于某种原因,我需要聚合的一堆文件都在 xlsb 中。我有一个问题 - 我运行了这段代码,它从第三个选项卡中引入了正确的数据 - 这正是我正在寻找的巧合 - 我如何告诉它从每个文件中使用哪个选项卡?
    【解决方案5】:

    XLSB 是一种二进制格式,我认为您无法使用当前的 python 工具和包来解析它。如果您仍想以某种方式使用 python 自动化该过程,您可以按照其他人告诉您的操作并编写 windows CLI tool 的脚本。使用子进程从命令行调用 .exe,并传递要转换的文件数组。

    即:使用与此类似的脚本,您可以将放置在“xlsb”文件夹中的所有 .xlsb 文件转换为 .csv 格式...

    ├── xlsb
    │   ├── file1.xlsb
    │   ├── file2.xlsb
    │   └── file3.xlsb
    └── xlsb_to_csv.py
    


    xlsb_to_csv.py

    #!/usr/bin/env python
    
    import os
    
    files = [f for f in os.listdir('./xlsb')]
    for f in files:
        subprocess.call("ConvertXLS.EXE " + str(f) + " --arguments", shell=True)
    

    注意:Windows 命令是伪代码...我使用类似的方法在无头 Windows 服务器中批量转换内容以测试目的。你只需要弄清楚exe位置和windows命令...

    希望它有所帮助......祝你好运!

    【讨论】:

      【解决方案6】:

      我认为您可以使用pyuno 来做到这一点。此blog entry 展示了如何将 xls 文件转换为 csv,并且由于开放式办公室自版本 3.2 起支持 xlsb 文件,此代码可能适合您。不过,您将不得不经历设置 pyuno 环境的麻烦..

      【讨论】:

      • 此链接似乎不再可用。
      【解决方案7】:

      您引用的脚本似乎使用 Excel 的 ActiveX 接口,并通过其Workbook.SaveAs 方法保存。 根据MSDN documentation,此方法有一个TextCodepage 参数,可能会有所帮助。

      旁注:可以用python重写VB脚本,见this question

      【讨论】:

        猜你喜欢
        • 2014-08-01
        • 2018-01-04
        • 1970-01-01
        • 2015-11-11
        • 1970-01-01
        • 1970-01-01
        • 2023-03-28
        • 2019-12-01
        • 2021-11-21
        相关资源
        最近更新 更多