22 votos

la conversión de Excel (xls) archivo separado por comas (csv) archivo sin la interfaz gráfica de usuario

Hay una forma sencilla de traducir de XLS a un archivo con formato CSV sin iniciar Excel la ventana de la aplicación?

Necesito proceso de algunos de Excel XLS libros con secuencias de comandos. Para ello necesito convertir el archivo xls en un archivo csv. Esto se puede hacer con un guardar como de la aplicación de Excel. Pero, me gustaría automatizar este (por tanto, no abrir el Excel la ventana de la aplicación).

Será suficiente si la primera hoja del libro de trabajo se traduce al formato CSV. Yo simplemente por la necesidad de procesar los datos de esa hoja.

He Cygwin y Excel instalado en mi sistema -- si eso ayuda.

Edit: Ok, tengo una solución de trabajo con Perl. La actualización para el uso futuro de los demás.

He instalado la Hoja de cálculo::ParseExcelmódulo. y, a continuación, utilizar read-excel.pl de la muestra.

Mi código es una ligera variación de este código de ejemplo, a continuación.

#!/usr/bin/perl -w
# For each tab (worksheet) in a file (workbook),
# spit out columns separated by ",",
# and rows separated by c/r.

use Spreadsheet::ParseExcel;
use strict;

my $filename = shift || "Book1.xls";
my $e = new Spreadsheet::ParseExcel;
my $eBook = $e->Parse($filename);
my $sheets = $eBook->{SheetCount};
my ($eSheet, $sheetName);

foreach my $sheet (0 .. $sheets - 1) {
    $eSheet = $eBook->{Worksheet}[$sheet];
    $sheetName = $eSheet->{Name};
    print "#Worksheet $sheet: $sheetName\n";
    next unless (exists ($eSheet->{MaxRow}) and (exists ($eSheet->{MaxCol})));
    foreach my $row ($eSheet->{MinRow} .. $eSheet->{MaxRow}) {
        foreach my $column ($eSheet->{MinCol} .. $eSheet->{MaxCol}) {
            if (defined $eSheet->{Cells}[$row][$column])
            {
                print $eSheet->{Cells}[$row][$column]->Value . ",";
            } else {
                print ",";
            }
        }
        print "\n";
    }
}

Actualización: Aquí es un script de Powershell que también podría ser fácil trabajar con ellos; como es desde este blog de MSDN y, de MODO de Referencia.

$excel = New-Object -comobject Excel.Application
$workbooks = $excel.Workbooks.Open("C:\test.xlsx")
$worksheets = $workbooks.Worksheets
$worksheet = $worksheets.Item(1)
$range = $worksheet.UsedRange
foreach($row in $range.Rows)
{
    foreach($col in $row.Columns)
    {
        echo $col.Text
    }
}

Actualización: recientemente me encontré con una herramienta de Windows CSVed en este Superusuario respuesta que podría ser útil para algunas personas.

7voto

Rory Puntos 8667

Usted puede utilizar xls2csv de la catdoc paquete si estás en Debian/Ubuntu

5voto

John Machin Puntos 39706

@desconocido (google):

Descargo de responsabilidad: yo soy el autor de xlrd (http://pypi.python.org/pypi/xlrd).

Gracias por traer pyXLreader mi atención, y yo nunca había oído hablar de él antes.

Yo podría ser seriamente equivocado, pero parece que no se han mantenido desde el año 2005, tiene una extraordinaria pendientes de fallo en el sourceforge tracker (se omiten las fracciones, todos los números que se presentan como números enteros) además de unos cuantos más problemas que he encontrado en un par de minutos de jugar con ella (se bloquea en archivos de gran tamaño, a veces imprime "FCUKDATE" (no es broma!) cuando hay fechas en los datos, el tiempo transcurrido por lo menos 6 veces mayor que la de xlrd y posiblemente es O(N**2), la memoria utilizada es de al menos 7 veces más que la de xlrd).

¿Usas mucho a ti mismo?

4voto

PatrickBateman Puntos 71

El uso de un script en perl. El uso de la Hoja de cálculo::ParseExcel perl módulo de CPAN para analizar el archivo xls seguido por la salida como csv debería funcionar bien.

http://search.cpan.org/dist/Spreadsheet-ParseExcel

También puede probar utilizando VBScript.

4voto

jens Puntos 1006

En el mundo de Java puede utilizar apache poi. Usted puede comenzar por la siguiente Groovy fragmento de código.

FileInputStream fis = new FileInputStream(filename);
Workbook wb = new HSSFWorkbook(fis); 
Sheet sheet = wb.getSheetAt(0);
for (Row row : sheet) {
  for (Cell cell : row) {
    doSomething(cell.toString())
  }

}

3voto

Marcello Nuccio Puntos 3091

De Gnumeric docs:

Gnumeric es distribuido junto con un programa llamado ssconvert que es el programa utilizado para convertir archivos de forma automática. Todos los formatos de archivo compatibles con Gnumeric pueden ser utilizados, salvo por el Postscript y PDF formatos de archivo que operan a través del sistema de impresión.

Lo estoy usando y funciona bien.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X