Outil de ligne de commande pour afficher les fichiers xls


27

Existe-t-il un outil en ligne de commande pour afficher / ouvrir les fichiers Excel (.xls)?

La réponse fonctionne donc très bien, sauf si les feuilles de calcul n'ont pas de nom personnalisé.

Lorsque j'essaie d'ouvrir le fichier, j'obtiens:

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.

Cependant, si j'ouvre le fichier et renomme la feuille en «test» ou quelque chose, cela fonctionne bien. Que dois-je modifier pour qu'il puisse gérer les noms par défaut? (Feuille1, etc.)

Le fichier que j'essaie d'ouvrir actuellement n'a qu'une seule feuille, nommée Sheet1.

Réponses:


22

Oui, c'est un peu hacky cependant. Commençons par installer deux packages:

sudo apt-get install python-excelerator w3m

À partir de là, nous utilisons un script fourni avec python-exceleratorpour convertir le document en fichier HTML. Nous redirigeons ensuite cela dans un navigateur de ligne de commande ( w3m) et l'afficherons.

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

Vous pouvez créer une fonction ou un alias bash avec cela si vous ne souhaitez pas continuer à le taper. Cela devrait vous donner une sortie comme celle-ci:

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

Très pretteh. De toute évidence, cela ne prendra en charge aucune sorte de macro, d'édition ou d'interactivité. Ceci est purement un spectateur. Vous pouvez également travailler à supprimer les guillemets qui enveloppent les choses. Je ne les dérange pas particulièrement à ce stade.

Si vous n'en avez pas besoin pour être aussi tabulaire, vous pouvez simplement avoir quelque chose comme ceci:

py_xls2csv spreadsheet.xls 2>&1 | less

Vous pouvez aller un peu plus loin et l'afficher de manière légèrement plus agréable:

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

Cela vous donne ce qui suit:

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

Pour le vider dans un fichier texte brut: links -dump /tmp/tempspreadsheet.html ..... Aussi: en l'état, il imprime les caractères Unicode au \u0950format ... Peut-être existe-t-il un moyen de traiter la sortie pour produire le caractère Unicode ... Si quelqu'un connaît un " simple ", j'aimerais le voir ...
Peter.O

@fred Je l'ai changé w3mmaintenant (parce que c'est plus joli) et cela a quelques options de jeu de caractères (voir w3m --help). J'ai également réduit la longueur, y compris la nécessité de la rediriger vers un fichier.
Oli

Impressionnant! Cela fonctionne dans la plupart des cas: voir la modification dans le message principal pour la partie 2 de la question (il est plus facile de formater les choses là-bas que dans un commentaire)
David Oneill

py_xls2csvest codé en dur pour fonctionner avec la page de codescp1251 .. J'ai trouvé que la substitution des 3 instances de cp1251with utf-8résout le "problème" de ne pas afficher les caractères unicode ... Je suppose que cela dépend de ce qui est dans la feuille de calcul. mais en utilisant utf-8 travaillé pour moi ... (Je ne m'en suis rendu compte qu'après avoir posté ma réponse, mais cela peut être utile pour d'autres conversions)
Peter.O

Un commentaire tardif ... J'ai juste essayé de l'utiliser pour tabuler un fichier texte csv (en convertissant d'abord en xls) .. et bien que le généré htmlait conservé plusieurs espaces, la sortie rendue les affiche comme un seul espace (typique du html) .. . ie .. <td> cows         moo </td>s'affiche comme cows moo... Il y a probablement quelques ajustements simples à cela, mais mes connaissances en html ne vont pas bien au-delà de la capacité à épeler 'html' .. :)
Peter.O

1

Voici une méthode qui conserve les caractères Unicode.
c'est à dire. il affiche , plutôt que de supprimer la valeur Unicode Codepoint\U0906

Le script utilise OpenOffice.org et PyODConverter.py pour convertir un format de document OOo en un autre format OOo. Les types de conversion sont basés sur les extensions de nom de fichier:

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

Il y a probablement un autre moyen de quitter OOo (mais je ne le sais pas)
Et il y a probablement un moyen de démarrer une instance indépendante de OOo aussi, mais je ne sais pas comment le faire non plus, en l'état, cela nécessite que OOo ne fonctionne pas ...

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.