Me doy cuenta de que esto no una pregunta completamente relacionada con Unix/Linux. Pero como esto es algo que haré en Linux, espero que alguien tenga una respuesta.
Tengo un archivo de Excel en línea (.xlsx
) que se actualiza periódicamente (por otra persona). Quiero escribir un script y ponerlo como un cronjob para procesar esa hoja de Excel. Pero para hacer eso, necesito convertirlo en un archivo de texto (entonces un .csv
) con columnas separadas por punto y coma. Desafortunadamente, no se puede separar por comas ya que algunas columnas tienen comas. ¿Es posible hacer esta conversión desde Shell? Tengo Open Office instalado y puedo hacer esto usando su GUI, pero quiero saber si es posible hacerlo desde la línea de comandos. ¡Gracias!
PD:También tengo una máquina Mac, así que si alguna solución puede funcionar allí, también es bueno. 🙂
Respuesta aceptada:
OpenOffice viene con el programa unoconv para realizar conversiones de formato en la línea de comandos.
unoconv -f csv filename.xlsx
Para requisitos más complejos, puede analizar archivos XLSX con Spreadsheet::XLSX
en Perl o openpyxl
en Python. Por ejemplo, aquí hay una secuencia de comandos rápida para imprimir una hoja de trabajo como un archivo CSV separado por punto y coma (advertencia:no probado, escrito directamente en el navegador):
perl -MSpreadsheet::XLSX -e '
$ = "n"; $, = ";";
my $workbook = Spreadsheet::XLSX->new()->parse($ARGV[0]);
my $worksheet = ($workbook->worksheets())[0];
my ($row_min, $row_max) = $worksheet->row_range();
my ($col_min, $col_max) = $worksheet->col_range();
for my $row ($row_min..$row_max) {
print map {$worksheet->get_cell($row,$_)->value()} ($col_min..$col_max);
}
' filename.xlsx >filename.csv