データでいっぱいのxlsbファイルが提供されました。 Pythonを使用してデータを処理したい。 ExcelまたはOpenOfficeを使用してcsvに変換できますが、プロセス全体をより自動化したいと思います。何か案は?
更新:私はこれを見て 質問 そして最初の答えを使用しました:
import subprocess
subprocess.call("cscript XlsToCsv.vbs data.xlsb data.csv", Shell=False)
問題は、ファイルにギリシャ文字が含まれているため、エンコーディングが保持されないことです。 Notepad ++でcsvを開くと、本来のように見えますが、データベースに挿入しようとすると、次のようになります。ファイルをcsvとして開くと、テキストを読むためだけに、ΒΕΛの代わりに\ xc2\xc5\xcbのように表示されます。
エンコーディングの問題だと思いますが、xlsbファイルをcsvに変換して元のエンコーディングを保持することは可能ですか?
最も人気のあるExcel pythonパッケージ openpyxl および xlrd はxlsb
形式をサポートしていません(バグトラッカーエントリ: openpyxl 、 xlrd )。
したがって、ネイティブpython way = /はありません。ただし、Windowsを使用しているため、外部ツールを使用してタスクをスクリプト化するのは簡単です。
プログラムでXLSをXLSBに変換しますか? を確認することをお勧めします。タイトルでpython)と述べていますが、質問の問題は、あなたがそれに強く結びついていることを意味するものではないので、純粋なc#の方法で進むことができます。
pythonの答えの1つだけで本当に快適だと感じる場合は、 Convert-XLSB という名前のコマンドラインツールを提案します。外部としてスクリプトを作成できます。 python with subprocess
のツール。
これは良い答えではないことは知っていますが、今のところ、より良い/より簡単な方法はないと思います。
私はこれと同じ問題に遭遇しました、そして 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
私も問題を調べました、そして、以下は私のために働きました。最初に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()
以前の経験では、libreofficeコマンドラインユーティリティを使用してxlsbの変換を処理していました。
Rubyでは、システムコマンドを実行してlibreofficeを呼び出し、xlsb形式をcsvに変換します。
`libreoffice --headless --convert-to csv your_csv_file.xlsb --outdir /path/csv`
エンコーディングを変更するには、コマンドラインを使用してiconvを使用し、Ruby:
`iconv -f ISO-8859-1 -t UTF-8 your_csv_file.csv > new_file_csv.csv`
XLSBはバイナリ形式であり、現在のpythonツールとパッケージで解析することはできないと思います。それでも何らかの方法でpython他の人があなたに言ったことを実行し、そのウィンドウをスクリプト化することができます 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コマンドを理解する必要があります...
お役に立てば幸いです...頑張ってください!
参照するスクリプトは、ExcelへのActiveXインターフェイスを使用しており、そのWorkbook.SaveAs
メソッドを介して保存しているようです。 MSDNドキュメント によると、このメソッドにはTextCodepage
引数があります。
補足:PythonでVBスクリプトを書き直すことができます。 この質問 を参照してください。