Інструмент командного рядка для перегляду файлів 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 тощо)

Файл, який я зараз намагаюся відкрити, містить лише 1 аркуш, названий Sheet1.

Відповіді:


22

Так, хоч трохи хакі. Почнемо з установки двох пакетів:

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

Дуже pretteh. Очевидно, що це не підтримуватиме будь-який тип макросу, редагування чи будь-яку інтерактивність. Це суто глядач. Ви також можете попрацювати над тим, щоб викреслити лапки, які обгортають речі. Мене це особливо не турбує на даний момент.

Якщо вам не потрібно, щоб він був настільки табличним, ви можете просто мати щось подібне:

py_xls2csv spreadsheet.xls 2>&1 | less

Ви можете піти далі і відобразити його трохи приємніше:

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 питання (простіше відформатувати там речі, ніж у коментарі)
David Oneill

py_xls2csvважко зашифровано для роботи з кодовою сторінкою cp1251 . Я виявив, що заміна трьох екземплярів cp1251з utf-8вирішує "проблему" не відображення символів unicode ... Я вважаю, що це залежить від того, що знаходиться в електронній таблиці. Але за допомогою utf-8 працював на мене ... (Я не усвідомлював цього, поки не опублікував свою відповідь, але це може бути
корисно

Запізнілий коментар ... Я просто спробував використовувати це для підрахунку текстового файлу CSV (перетворюючи спочатку в xls) .., і хоча згенерований файл htmlпідтримує декілька пробілів, виведений вихід відображає їх як єдиний простір (типово для html) .. тобто <td> cows         moo </td>відображається як cows moo... Мабуть, для цього є якийсь простий твіт, але мої HTML-знання не виходять за рамки можливості написання 'html' .. :)
Peter.O

1

Ось метод, який підтримує символи Unicode.
тобто. воно відображає , а не демонструє значення кодировки Unicode\U0906

Сценарій використовує OpenOffice.org і PyODConverter.py для перетворення одного формату документа 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 не запускався ...

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.