xlsファイルを表示するためのコマンドラインツール


27

Excel(.xls)ファイルを表示/開くためのコマンドラインツールはありますか?

そのため、ワークシートにカスタム名がない場合を除き、答えはうまく機能します。

ファイルを開こうとすると、次のメッセージが表示されます。

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.

ただし、ファイルを開いて、シートの名前を「テスト」などに変更すると、問題なく動作します。デフォルト名を処理できるように微調整するには何が必要ですか?(シート1など)

現在開こうとしているファイルには、Sheet1という名前のシートが1つしかありません。

回答:


22

ええ、それは少しハッキーです。2つのパッケージをインストールすることから始めましょう。

sudo apt-get install python-excelerator w3m

そこから、付属のスクリプトを使用しpython-exceleratorて、ドキュメントをHTMLファイルに変換します。次に、それをコマンドラインブラウザー(w3m)にパイプして表示します。

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

入力を続けたくない場合は、bash関数またはエイリアスを作成できます。次のような出力が得られます。

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

とてもきれい。明らかに、これは、あらゆる種類のマクロ、編集、または対話性をサポートしません。これは純粋にビューアです。また、物を包む引用符を取り除くこともできます。私は、現時点で彼らに特に悩まされていません。

表形式にする必要がない場合は、次のようにするだけです。

py_xls2csv spreadsheet.xls 2>&1 | less

さらに1つ進んで、少し見やすく表示することができます。

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

これにより、次のことが可能になります。

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

プレーンテキストファイルにダンプするには:links -dump /tmp/tempspreadsheet.html .....また、そのままで、Unicode文字を\u0950形式で出力します...出力を処理してUnicode文字を生成する方法があります...シンプルな」方法、私はそれを見てみたい
...-Peter.O

@fred w3m(見た目が良くなったので)今に切り替えましたが、それにはいくつかの文字セットオプションがあります(を参照w3m --help)。また、長さを短くしました。これは、ファイルにパイプで送る必要性を減らすことを含みます。
オリ

驚くばかり!これはほとんどの場合に機能します:質問のパート2のメイン投稿への編集を参照してください(コメントよりもそこにあるものをフォーマットする方が簡単です)
デイヴィッドオニール

py_xls2csvで動作するようにハードコードされているコードページ cp1251 ..私はの3つの事例代入することを発見したcp1251とのutf-8Unicode文字を表示しない「問題」の解決を...私はそれがspreadsheedであるかに依存しているとします。しかし、使用してUTF-8を私のために働いた...(答えを投稿するまで気づかなかったが、他の変換に
役立つ

遅ればせながらのコメント...これを使用してcsvテキストファイルを表形式にしようとしました(最初にxlsに変換しますhtml)。 。すなわち.. <td> cows         moo </td>として表示さcows moo...あり、このためのいくつかの簡単な微調整は、おそらくですが、私のHTMLの知識がはるかに「HTML」を綴ることができることを超えていません... :)
Peter.O

1

以下は、Unicode文字を保持するメソッドです。
すなわち。Unicode Codepoint値を表示するのではなく、表示します\U0906

このスクリプトは、OpenOffice.orgPyODConverter.pyを使用して、1つのOOoドキュメント形式を他のOOo形式に変換します。変換タイプは、ファイル名拡張子に基づいています。

  • 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
#

おそらくOOoを終了する他の方法もあります(しかし、私は知りません)
そして、おそらくOOoの独立したインスタンスを開始する方法もありますが、それを行う方法もわかりません。 OOoが実行されていないことが必要です...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.