13

我得到了一个充满数据的 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 的原始编码吗?

4

7 回答 7

28

我遇到了同样的问题,使用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
于 2018-01-25T04:53:44.077 回答
14

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

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

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

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

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

于 2014-04-22T11:45:49.733 回答
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`
于 2014-06-25T05:06:04.683 回答
7

我还查看了问题,以下内容对我有用。首先通过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()
于 2017-03-24T18:20:17.943 回答
2

XLSB 是一种二进制格式,我认为您无法使用当前的 python 工具和包来解析它。如果您仍然想以某种方式使用 python 自动化该过程,您可以按照其他人告诉您的操作并编写该 windows CLI 工具的脚本。使用子进程从命令行调用 .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命令......

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

于 2014-04-23T00:29:52.403 回答
1

我认为你可以使用pyuno来做到这一点。此博客条目展示了如何将 xls 文件转换为 csv,并且由于 open office 从版本3.2开始支持 xlsb 文件,因此此代码可能只适合您。不过,您将不得不经历设置 pyuno 环境的麻烦..

于 2014-04-22T11:06:53.057 回答
1

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

旁注:您可以在 python 中重写 VB 脚本,请参阅此问题

于 2014-04-29T07:40:36.867 回答