2014-03-12 10 views
6

Ich wurde mit einer xlsb-Datei voller Daten zur Verfügung gestellt. Ich möchte die Daten mit Python verarbeiten. Ich kann es mit Excel oder Open Office in CSV konvertieren, aber ich möchte den gesamten Prozess mehr automatisiert werden. Irgendwelche Ideen?Wie kann ich eine XLSB-Datei mithilfe von Python in CSV konvertieren?

Update: Ich nahm einen Blick auf diese question und verwendet, um die erste Antwort:

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

Das Problem ist die Datei griechische Buchstaben enthält, so dass die Codierung nicht erhalten bleibt. Öffnen Sie die CSV mit Notepad ++ sieht es so aus, wie es sollte, aber wenn ich versuche, in eine Datenbank einfügen, kommt so . Öffnen Sie die Datei als CSV, nur um Text zu lesen, wird so angezeigt: \ xc2 \ xc5 \ xcb anstelle von ΒΕΛ.

Ich weiß, es ist ein Problem bei der Codierung, aber es ist möglich, die ursprüngliche Codierung zu erhalten, die xlsb-Datei in CSV konvertieren?

+0

Welche Systeme sind Sie verwenden oder Targeting? – luk32

+0

Ich bin unter Windows 7. – GiannisIordanou

+0

Siehe [_Excel zu CSV mit UTF8-Codierung_] (http://stackoverflow.com/questions/4221176/excel-to-csv-with-utf8-encoding). – martineau

Antwort

9

Populärste Excel Python-Pakete openpyxl und xlrd für xlsb Format keine Unterstützung haben (Bug-Tracker-Einträge: openpyxl, xlrd).

Also ich fürchte, es gibt keine native Python Weg = /. Da Sie Windows verwenden, sollte es jedoch einfach sein, die Aufgabe mit externen Tools zu skripten.

Ich würde vorschlagen, Blick auf Convert XLS to XLSB Programatically?. Sie erwähnen Python in Titel, aber die Frage der Frage bedeutet nicht, dass Sie stark daran gekoppelt sind, so dass Sie rein gehen könnten.

Wenn Sie nur mit Python wirklich wohl fühlen, schlägt eine der Antworten dort ein Befehlszeilenwerkzeug unter einem fantastischen Namen Convert-XLSB vor. Sie können es als externes Werkzeug von Python mit subprocess Skript.

Ich weiß, das ist keine gute Antwort, aber ich glaube nicht, dass es jetzt einen besseren/leichteren Weg gibt.

+0

Sie sind genau richtig ... – SDude

1

Ich denke, dass Sie dies mit pyuno tun können. Diese blog entry zeigt, wie xls-Dateien in CSV konvertieren, und da Open Office xlsb-Dateien seit Version 3.2 unterstützt, könnte dieser Code nur für Sie arbeiten. Sie müssen durch Ärger gehen von obwohl die PyUNO Umgebung einrichten ..

2

XLSB ist ein binäres Format, und ich glaube nicht, dass Sie es mit aktuellen Python-Tools und -Pakete analysieren können. Wenn Sie den Prozess mit python noch irgendwie automatisieren wollen, können Sie tun, was die anderen Ihnen gesagt haben, und das Skript dieses Windows CLI tool. Rufen Sie die .exe über die Befehlszeile mit Unterprozess auf, und übergeben Sie ein Array der Dateien, die Sie konvertieren möchten.

Dh: mit einem Skript ähnlich wie diese findet man alle .xlsb Dateien umwandeln könnte, die Sie im „xlsb“ Ordner speichern Format .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) 

Hinweis: der Windows-Befehl ist Pseudo-Code ... ich verwende einen ähnlichen Ansatz zu Batch-convert Sachen in kopflos Windows-Server zum Testen purpouses. Sie müssen nur den exe-Ort und den Windows-Befehl herausfinden ...

Hoffe es hilft ... viel Glück!

1

Das Skript, das Sie verweisen, scheint die ActiveX-Schnittstelle zu Excel zu verwenden und über seine Workbook.SaveAs-Methode zu speichern. Nach der MSDN documentation diese Methode ein TextCodepage Argument, das hilfreich sein kann.

Hinweis: Sie können das VB-Skript in Python neu schreiben, siehe this question.

3

In meiner früheren Erfahrung, ich war Umgang Libreoffice Befehlszeilenprogramm Umwandlung xlsb verwenden,

in Ruby i Libreoffice nur Systembefehl ausführen rufen für die CSV-Format konvertieren xlsb:

`libreoffice --headless --convert-to csv your_csv_file.csv --outdir /path/csv` 

und zum Ändern der Codierung verwende ich die Befehlszeile zur Verwendung von iconv, mit Ruby:

`iconv -f ISO-8859-1 -t UTF-8 your_csv_file.csv > new_file_csv.csv` 
+0

Super, danke. Eine Korrektur - ändern Sie 'your_csv_file.csv' in' your_xlsb_file.xlsb'. – mpettis

1

Ich schaute auch auf das Problem und das folgende funktionierte für mich. Öffnen Sie zunächst die Datei in Excel über Python und speichern Sie sie dann in einer anderen Datei. Ein bisschen wie ein Workaround, aber ich mag es mehr als andere Lösungen. Im Beispiel verwende ich das Dateiformat 6, das CSV ist, aber Sie können auch andere verwenden.

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() 
+0

Ich könnte fast befürworten, dass die akzeptierte Antwort geändert wird, obwohl diese Lösung erfordert, dass Excel auf der Maschine installiert wird, auf der das Skript läuft, und ich plattformunabhängige Lösungen bevorzuge (obwohl meines Wissens derzeit keine Plattform-agnostische Lösung existiert)). – FluxIX

0

Ich habe das gleiche Problem gestoßen und mit pyxlsb tut es für mich:

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 
Verwandte Themen