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

如何使用python将XLSB文件转换为csv?,python,xlsb,Python,Xlsb,我已经收到了一个包含大量数据的xlsb文件。我想使用python处理数据。我可以使用excel或open office将其转换为csv,但我希望整个过程更加自动化。有什么想法吗 更新:我看了一下,并使用了第一个答案: import subprocess subprocess.call("cscript XlsToCsv.vbs data.xlsb data.csv", shell=False) 问题是文件包含希腊字母,因此编码没有保留。用Notepad++打开csv看起来应该是这样的,但是当我

我已经收到了一个包含大量数据的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时可以保留原始编码?

我认为您可以使用。这显示了如何将xls文件转换为csv,而且由于OpenOffice自版本以来支持xlsb文件,因此此代码可能适合您。不过,您将不得不经历设置pyuno环境的麻烦

最流行的Excel python软件包,不支持
xlsb
格式(bug跟踪器条目:,)

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

我建议你去看看。您在标题中提到了python,但问题的实质并不意味着您与它有很强的耦合,因此您可以采用纯c#方式

如果您觉得只使用python很舒服,那么其中一个答案就是建议使用一个名为的命令行工具。您可以使用python将其作为外部工具编写脚本


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

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

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

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

xlsb_到_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服务器中的内容,以测试Purpouse。你只需要找出exe的位置和windows命令


希望对你有帮助。。。祝你好运

您引用的脚本似乎使用ActiveX界面创建Excel,并通过其
工作簿.SaveAs
方法进行保存。 根据这个方法,有一个
TextCodepage
参数可能会有帮助


旁注:您可以用python重写VB脚本,请参阅。

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

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

`libreoffice --headless --convert-to csv your_csv_file.xlsb --outdir /path/csv`
要更改编码,我使用命令行,使用ruby,使用iconv

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

我遇到了同样的问题,使用它可以帮我:

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

你使用的是什么系统,或者说目标是什么?看。太棒了,谢谢。一个更正——将
您的_csv_文件.csv
更改为
您的_xlsb_文件.xlsb
。我几乎主张将公认的答案更改为这一点,尽管此解决方案确实要求在运行脚本的机器上安装Excel,而且我更喜欢平台无关的解决方案(尽管据我所知,目前还没有平台不可知的解决方案).嘿,我知道这已经超过一年了,但这对我来说非常有效,因为出于某种原因,我需要聚合的一堆文件都在xlsb中。我有一个问题-我运行了这个代码,它从第三个选项卡中引入了正确的数据-这是我一直在寻找的-我如何从每个文件中告诉它使用哪个选项卡?工作原理如下魅力,依我看,这应该是公认的答案。应该被标记为答案。我见过的最好的解决方案,也是我见过的处理.XLSB文件的唯一体面的方法。很高兴提供帮助!现在我觉得我做出了贡献。当存在浮点值时,我遇到了一个问题。Join不喜欢它。Excellent,我需要做的唯一更改是:value=[str(r.v)表示行中的r]此链接似乎不再可用。