繁体   English   中英

如何使用 python 将 XLSB 文件转换为 csv?

[英]How can I convert a XLSB file to csv using python?

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

我遇到了同样的问题,使用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

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

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

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

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

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

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

我还查看了问题,以下内容对我有用。 首先通过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()

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命令......

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM