如何使用Python将XLSB文件转换为CSV?

14 投票
7 回答
39569 浏览
提问于 2025-04-17 22:02

我手里有一个满是数据的 xlsb 文件。我想用 Python 来处理这些数据。我可以通过 Excel 或者 Open Office 把它转换成 csv 格式,但我希望这个过程能更自动化一点。有没有什么好主意?

更新:我查看了这个 问题,并使用了第一个答案:

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

问题是这个文件里有希腊字母,所以编码没有保持好。我用 Notepad++ 打开 csv 文件时看起来没问题,但当我试图把它插入数据库时,就变成了 ���。以 csv 格式打开文件时,读取的文本显示成这样: \xc2\xc5\xcb,而不是 ΒΕΛ。

我意识到这是编码的问题,但有没有办法在把 xlsb 文件转换成 csv 时保持原来的编码呢?

7 个回答

2

XLSB是一种二进制格式,我觉得现在的Python工具和库可能无法直接处理它。如果你还是想用Python来自动化这个过程,可以按照其他人说的,使用一个Windows的命令行工具。通过命令行调用这个.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命令就可以了……

希望这能帮到你……祝好运!

7

我也看了这个问题,下面的方法对我有效。首先通过Python在Excel中打开文件,然后再保存为不同的文件。这有点像变通的方法,但我觉得比其他解决方案更好。在这个例子中,我使用的是格式6,也就是CSV格式,不过你也可以使用其他格式。

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

在我之前的经验中,我使用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`
29

我也遇到过这个问题,使用 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
14

最受欢迎的Excel Python库openpyxlxlrd都不支持xlsb格式(相关问题可以在这里查看:openpyxl, xlrd)。

所以我担心目前没有原生的Python方法来处理这个问题=/. 不过,既然你在使用Windows,利用外部工具来完成这个任务应该会比较简单。

我建议你看看这个链接:如何程序化地将XLS转换为XLSB?。你在标题中提到了Python,但问题的内容并不一定要和Python紧密相关,所以你也可以考虑用纯C#的方法。

如果你只想用Python,有个回答提到了一款命令行工具,名字叫Convert-XLSB。你可以通过subprocess在Python中将它作为外部工具来使用。

我知道这不是一个很好的答案,但目前我觉得没有更好或更简单的方法了。

撰写回答