Ferramenta de linha de comando para visualizar arquivos xls

22

Existe uma ferramenta de linha de comando para visualizar / abrir arquivos do Excel (.xls)?

Portanto, a resposta funciona muito bem, a menos que as planilhas não tenham um nome personalizado.

Quando tento abrir o arquivo, obtenho:

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.

No entanto, se eu abrir o arquivo e renomear a planilha para 'teste' ou algo assim funcionará bem. O que preciso ajustar para poder manipular os nomes padrão? (Folha1, etc)

O arquivo que estou tentando abrir no momento tem apenas 1 folha, chamada Planilha1.

    
por David Oneill 08.06.2011 / 17:44

2 respostas

20

Sim, é um pouco hacky. Vamos começar instalando dois pacotes:

sudo apt-get install python-excelerator w3m

A partir daí, usamos um script que vem com python-excelerator para converter o documento em um arquivo HTML. Nós então canalizamos isso em um navegador de linha de comando ( w3m ) e o exibimos.

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

Você pode criar uma função bash ou um alias com isso se não quiser continuar digitando. Deve dar uma saída assim:

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

Muito pretteh. Obviamente, isso não suportará nenhum tipo de macro, edição ou interatividade. Isto é puramente um espectador. Você também pode trabalhar para retirar as aspas que envolvem as coisas. Eu não estou particularmente incomodado por eles neste momento.

Se você não precisa que seja tão tabular, pode simplesmente ter algo assim:

py_xls2csv spreadsheet.xls 2>&1 | less

Você pode ir além disso e exibi-lo de uma maneira um pouco mais agradável:

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

Isso fornece o seguinte:

  1 this   is    a       spreadsheet
  2 it     is    very    nice
  3 this   has   three   rows
    
por Oli 08.06.2011 / 18:12
1

Aqui está um método que mantém os caracteres Unicode.
ie. ele exibe , em vez de discar o valor do Codepoint do Unicode \U0906

O script usa o OpenOffice.org e PyODConverter.py para converter um formato de documento OOo em outro formato OOo. Os tipos de conversão são baseados nas extensões de nome de arquivo:

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

Provavelmente existe outra maneira de sair do OOo (mas eu não sei)
E provavelmente há alguma maneira de iniciar uma instância independente do OOo também, mas também não sei como fazer isso, portanto, é necessário que o OOo não esteja em execução ...

    
por Peter.O 09.06.2011 / 13:34