¿Cómo puedo imprimir nombres de hojas de una hoja de cálculo usando la línea de comandos de Linux?

11

Soy consciente de usar in2csvpara guardar una hoja de trabajo en particular como .csv:

in2csv --sheet "sheet name" file1.xls > sheet-name.csv

Pero, ¿hay otras herramientas para imprimir los nombres de las hojas?

¿Quizás hay opciones con Perl?

csheth
fuente

Respuestas:

11

in2csvproporciona la opción --namesu -npara eso: [ Fuente ]

 -n, --names     Display sheet names from the input Excel file.

En su ejemplo, el comando sería:

in2csv -n file1.xls

Resulta que esta característica solo se agregó en csvkit1.0.2, que aún no está disponible en las fuentes oficiales del paquete . Usted necesita

  • compilar el programa desde la fuente o
  • instalarlo a través pipde

    sudo pip install csvkit
    

para obtener la última versión

postre
fuente
Hubiera aceptado esta respuesta, pero resulta que tengo una versión de la opción de in2csvfalta -n. Extraño, tratando de descubrir cómo obtener lo último, pero teniendo problemas con csvkit y eliminando los viejos in2csv... suspiro
csheth
2
Simplemente lo eliminaría sudo apt remove python3-csvkite instalaría uno más nuevo, preferiblemente desde packages.ubuntu.com , o bien desde github.com/wireservice/csvkit/tree/1.0.2 . La función se introdujo con este commit etiquetado como "1.0.2", por lo que cualquier versión a partir de ese momento debería tener esta opción.
postre
Desafortunadamente, parece que ninguna de las versiones empaquetadas alcanza este número de versión, por lo que compilar la fuente de github parece ser el único camino a seguir; en este caso, prefiero no desinstalar la versión del paquete, sino simplemente escribir una función de envoltorio llamada in2csveso llamadas /path/to/new/in2csven caso de que se llama con la -nopción y la costumbre /usr/bin/in2csvmás.
postre
1
Okay. Usé sudo apt remove python3-csvkit, instalé el más nuevo y funcionó. La función de envoltura es muy útil sí!
csheth
8

in2csves la opción más simple, pero la dejaré en caso de que alguien pueda encontrarla útil. Hay un buen comando llamado xlhtmlpara convertir archivos XLS a HTML o XML. Y una vez que tenga el XML, se pueden usar varias herramientas de procesamiento de XML para realizar una amplia variedad de consultas. En este caso:

$ xlhtml -xml ~/foo.xls | xmlstarlet sel -t -m '//pagetitle' -v . -n
Sheet1
Sheet2

El XML que xlhtmlgenera es así:

<?xml version="1.0" encoding="iso-8859-1" ?>
<excel_workbook>
    <sheets>
        <sheet>
            <page>0</page>
            <pagetitle>Sheet1</pagetitle>
            <firstrow>0</firstrow>
            <lastrow>11</lastrow>
            <firstcol>0</firstcol>
            <lastcol>0</lastcol>

Entonces, para los nombres de las hojas, podemos consultar los pagetitlenodos, que uséxmlstarlet .

muru
fuente
+1 Excelente solución, lo siento mucho por encontrar la aburrida. ; P
postre
No está disponible para 16.04 Xenial. ¿Quizás útil agregarlo a su respuesta?
csheth