Инструмент командной строки для просмотра файлов 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.

Однако, если я открою файл и переименую лист в «test» или что-то в этом роде, он будет работать нормально. Что мне нужно настроить, чтобы он мог обрабатывать имена по умолчанию? (Лист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

Очень претте. Очевидно, что это не будет поддерживать какие-либо макросы, редактирование или какую-либо интерактивность. Это чисто зритель. Вы также можете убрать кавычки, которые обертывают вещи. Я не особенно обеспокоен ими в этом пункте.

Если вам не нужно, чтобы он был табличным, вы можете просто получить что-то вроде этого:

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). Я также сократил длину, в том числе избавился от необходимости передавать его в файл.
Оли

Потрясающе! Это работает в большинстве случаев: см. Редактирование основного сообщения для второй части вопроса (там легче отформатировать материал, чем в комментарии)
David Oneill

py_xls2csvжестко запрограммирован для работы с кодовой страницей cp1251 .. Я обнаружил, что замена 3 экземпляров cp1251with utf-8решает проблему не отображения символов Unicode ... Я полагаю, это зависит от того, что находится в таблице. Но использование utf-8 работал на меня ... (Я не осознавал этого, пока не опубликовал свой ответ, но он может быть
полезен

Запоздалый комментарий ... Я только что попытался использовать это для табулирования текстового файла csv (сначала преобразуя в xls) ... и хотя сгенерированный htmlсохранил несколько пробелов, визуализированный вывод отображает их как один пробел (типичный для html) .. то есть .. <td> cows         moo </td>отображается как cows moo... Вероятно, есть некоторая простая настройка для этого, но мои знания html не выходят далеко за рамки способности писать "html" .. :)
Peter.O

1

Вот метод, который поддерживает символы Unicode.
то есть. он показывает , а не dislaying значения 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.