Alat baris perintah untuk melihat file xls

27

Apakah ada alat commandline untuk melihat / membuka file excel (.xls)?

Jadi jawabannya bekerja dengan baik kecuali lembar kerja tidak memiliki nama khusus.

Ketika saya mencoba membuka file, saya mendapatkan:

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.

Namun, jika saya membuka file dan mengganti nama sheet untuk 'menguji' atau sesuatu itu berfungsi dengan baik. Apa yang perlu saya atur agar dapat menangani nama default? (Sheet1, dll)

File yang saya coba buka saat ini hanya memiliki 1 lembar, bernama Sheet1.

David Oneill
sumber

Jawaban:

22

Ya itu agak sedikit berantakan. Mari kita mulai dengan menginstal dua paket:

sudo apt-get install python-excelerator w3m

Dari sana, kami menggunakan skrip yang disertakan python-exceleratoruntuk mengonversi dokumen menjadi file HTML. Kami kemudian menyalurkannya ke browser baris perintah ( w3m) dan menampilkannya.

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

Anda dapat membuat fungsi bash atau alias dengan itu jika Anda tidak ingin terus mengetiknya. Ini akan memberi Anda output seperti ini:

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

Sangat pretteh. Jelas ini tidak akan mendukung segala jenis makro, pengeditan atau interaktivitas apapun. Ini murni pemirsa. Anda juga bisa berupaya menghilangkan tanda kutip yang membungkus sesuatu. Saya tidak terlalu terganggu oleh mereka pada saat ini.

Jika Anda tidak membutuhkannya sebagai tabular, Anda bisa memiliki sesuatu seperti ini:

py_xls2csv spreadsheet.xls 2>&1 | less

Anda dapat melangkah lebih jauh dari itu dan menampilkannya dengan cara yang sedikit lebih baik:

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

Itu memberi Anda hal berikut:

  1 this   is    a       spreadsheet
  2 it     is    very    nice
  3 this   has   three   rows
Oli
sumber
Untuk membuangnya ke file teks biasa: links -dump /tmp/tempspreadsheet.html ..... Juga: apa adanya, ia mencetak karakter Unicode dalam \u0950format ... Mungkin ada beberapa cara untuk memproses output untuk menghasilkan karakter Unicode ... Jika seseorang mengetahui " sederhana "cara, saya ingin melihatnya ...
Peter.O
@ Fred Saya sudah beralih ke w3msekarang (karena hanya terlihat lebih bagus) dan yang memang memiliki beberapa opsi charset (lihat w3m --help). Saya juga memotong panjangnya, termasuk nuking kebutuhan untuk mem-pipe-nya ke file.
Oli
Luar biasa! Ini berfungsi dalam kebanyakan kasus: lihat sunting ke pos utama untuk bagian 2 dari pertanyaan (Lebih mudah untuk memformat hal-hal di sana daripada di komentar)
David Oneill
py_xls2csvkeras-kode untuk bekerja dengan codepage cp1251 .. Saya telah menemukan bahwa mengganti 3 contoh cp1251dengan utf-8menyelesaikan 'masalah "tidak menampilkan karakter unicode ... Saya kira itu tergantung pada apa yang ada di spreadsheed, tetapi menggunakan utf-8 bekerja untuk saya ... (Saya tidak menyadari hal ini sampai setelah saya memposting jawaban saya, tetapi mungkin berguna untuk konversi lain)
Peter.O
Sebuah komentar yang terlambat ... Saya baru saja mencoba menggunakan ini untuk mentabulasi file teks csv (mengkonversi ke xls terlebih dahulu) .. dan meskipun yang dihasilkan htmltelah mempertahankan banyak spasi, output yang diberikan menampilkannya sebagai ruang tunggal (tipikal html) .. Yaitu <td> cows         moo </td>menampilkan sebagai cows moo... Mungkin ada beberapa tweak sederhana untuk ini, tetapi pengetahuan html saya tidak jauh melampaui mampu mengeja 'html' .. :)
Peter.O
1

Berikut adalah metode yang memelihara karakter Unicode.
yaitu. itu ditampilkan , daripada menampilkan nilai Unicode Codepoint\U0906

Script menggunakan OpenOffice.org dan PyODConverter.py untuk mengkonversi satu format dokumen OOo ke format OOo lainnya. Jenis konversi didasarkan pada ekstensi nama file:

  • pdf html odt doc txt dari 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
#

Mungkin ada beberapa cara lain untuk keluar dari OOo (tapi saya tidak mengetahuinya)
Dan mungkin ada beberapa cara untuk memulai instance OOo yang independen juga, tetapi saya juga tidak tahu bagaimana cara melakukannya, jadi seperti itu, itu mensyaratkan bahwa OOo tidak berjalan ...

Peter.O
sumber