Kommandozeilen-Tool zum Anzeigen von XLS-Dateien


27

Gibt es ein Befehlszeilentool zum Anzeigen / Öffnen von Excel-Dateien (.xls)?

Die Antwort funktioniert also hervorragend, es sei denn, die Arbeitsblätter haben keinen benutzerdefinierten Namen.

Wenn ich versuche, die Datei zu öffnen, erhalte ich:

Traceback (most recent call last):
  File "/usr/bin/py_xls2csv", line 17, in <module>
    for sheet_name, values in parse_xls(arg, 'cp1251'): # parse_xls(arg) -- default encoding
  File "/usr/lib/python2.5/site-packages/pyExcelerator/ImportXLS.py", line 334, in parse_xls
    raise Exception, 'No workbook stream in file.'
Exception: No workbook stream in file.

Wenn ich jedoch die Datei öffne und das Blatt in "Test" oder etwas anderes umbenenne, funktioniert es einwandfrei. Was muss ich tun, damit es die Standardnamen handhaben kann? (Sheet1, etc)

Die Datei, die ich derzeit zu öffnen versuche, hat nur 1 Blatt mit dem Namen Sheet1.

Antworten:


22

Ja, es ist ein bisschen abgedreht. Beginnen wir mit der Installation von zwei Paketen:

sudo apt-get install python-excelerator w3m

Von dort verwenden wir ein mitgeliefertes Skript, python-exceleratorum das Dokument in eine HTML-Datei zu konvertieren. Wir leiten das dann in einen Kommandozeilen-Browser ( w3m) und zeigen es an.

py_xls2html spreadsheet.xls 2>/dev/null | sed 's/"//g' | w3m -dump -T 'text/html'

Sie können damit eine Bash-Funktion oder einen Alias ​​erstellen, wenn Sie die Eingabe nicht fortsetzen möchten. Es sollte folgende Ausgabe geben:

Sheet = Sheet1
┏━━━━┯━━━┯━━━━━┯━━━━━━━━━━━━┓
┃this│is │a    │spreadsheet ┃
┠────┼───┼─────┼────────────┨
┃it  │is │very │nice        ┃
┠────┼───┼─────┼────────────┨
┃this│has│three│rows        ┃
┗━━━━┷━━━┷━━━━━┷━━━━━━━━━━━━┛
Sheet = Sheet2 Sheet = Sheet3

Sehr hübsch. Offensichtlich wird dies keine Art von Makro, Bearbeitung oder Interaktivität unterstützen. Dies ist nur ein Betrachter. Sie könnten auch daran arbeiten, die Anführungszeichen, die die Dinge umschließen, zu entfernen. Sie stören mich an dieser Stelle nicht sonderlich.

Wenn es nicht so tabellarisch sein soll, können Sie einfach so etwas haben:

py_xls2csv spreadsheet.xls 2>&1 | less

Sie können noch einen Schritt weiter gehen und ihn auf eine etwas schönere Weise anzeigen:

py_xls2csv spreadsheet.xls 2>&1 | grep '^"' | sed 's/"//g' | column -s, -t | less -#2 -N -S

Das gibt Ihnen Folgendes:

  1 this   is    a       spreadsheet
  2 it     is    very    nice
  3 this   has   three   rows

Um es in eine reine Textdatei zu kopieren: links -dump /tmp/tempspreadsheet.html ..... Auch: wie es ist, druckt es Unicode-Zeichen im \u0950Format ... Vielleicht gibt es eine Möglichkeit, die Ausgabe zu verarbeiten, um das Unicode-Zeichen zu erzeugen ... Wenn jemand ein " simple "way, ich würde es gerne sehen ...
Peter.O

@fred Ich habe es w3mjetzt umgestellt (weil es nur schöner aussieht) und das hat einige Zeichensatzoptionen (siehe w3m --help). Ich habe auch die Länge gekürzt, einschließlich der Notwendigkeit, sie in eine Datei zu leiten.
Oli

Genial! Dies funktioniert in den meisten Fällen: siehe Bearbeiten des Hauptpostens für Teil 2 der Frage (Es ist einfacher, dort
Inhalte

py_xls2csvhartcodiert wird mit zur Arbeit Codepage cp1251 .. Ich habe , dass die drei Fälle von Substitution gefunden cp1251mit utf-8löst das ‚Problem“ der nicht angezeigt Unicode - Zeichen ... Ich nehme an, es hängt davon ab , was in der Tabellenkalkulation ist. aber mit utf-8 arbeitete für mich ... (Ich merkte das erst, nachdem ich meine Antwort gepostet hatte, aber es könnte für andere Konvertierungen von Nutzen sein)
Peter.O

Ein verspäteter Kommentar ... Ich habe gerade versucht, mit diesem Befehl eine CSV-Textdatei zu tabellieren (zuerst in xls konvertieren). Obwohl die generierte Datei htmlmehrere Leerzeichen enthält, zeigt die gerenderte Ausgabe diese als einzelnes Leerzeichen an (typisch für HTML). . dh .. <td> cows         moo </td>Displays wie cows moo... ist wahrscheinlich einige einfachen zwicken für diese gibt, aber meine hTML - Kenntnisse nicht weit über die Lage zu buchstabieren ‚html‘ gehen .. :)
Peter.O

1

Hier ist eine Methode, die die Unicode-Zeichen verwaltet.
dh Es wird angezeigt , anstatt den Unicode-Codepoint-Wert zu verschieben\U0906

Das Skript verwendet OpenOffice.org und PyODConverter.py , um ein OOo-Dokumentformat in ein anderes OOo-Format zu konvertieren. Die Konvertierungstypen basieren auf den Dateinamenerweiterungen:

  • pdf html odt doc txt ods xls csv odp ppt swf

#
oextn="html" # output type
ifile="My_OOo_File"   ;echo ifile="$ifile"
ofile="$ifile.$oextn" ;echo ofile="$ofile"
[[ -f "$ofile" ]] && { rm "$ofile"; }
[[ -f "$ofile" ]] && { echo "A pre-existing Output file was NOT removed" ;exit; } 
#
sofport=8100
soffice="$(locate -br "^soffice.bin$")"
soffarg=( '-invisible' '-accept=socket,port='$sofport';urp;' )
soffrex="$soffice ${soffarg[@]}"
#
  soffpid=$(($(pgrep -f -n "$soffice")))
((soffpid!=0)) && { echo "A OpenOffice is already running. PID=$soffpid" ;exit; } 
#
# Start OpenOffice
"$soffice" "${soffarg[@]}" &
soffpid=$(($(pgrep -f -n "$soffrex")))
((soffpid== 0)) && { echo "A OpenOffice has not started yet=$soffpid" ;exit; } 
#
# Start OpenOffice
echo "** Attempting to connect to OpenOffice.org on port $sofport"
x=1; while ((x!=0)) ;do
    /usr/bin/python "$(which DocumentConverter.py)" "$ifile" "$ofile"
    x=$?
done
#
# Start Terminal Browser
w3m   "$ofile" -T 'text/html'
kill -15 $soffpid
#

Es gibt wahrscheinlich einen anderen Weg, um OOo zu beenden (aber ich weiß es nicht).
Und es gibt wahrscheinlich auch einen Weg, um eine unabhängige Instanz von OOo zu starten, aber ich weiß auch nicht, wie das geht, so wie es ist. es setzt voraus, dass OOo nicht läuft ...

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.