2010-07-12 15 views
7

Quiero leer de un archivo de Excel en C. El archivo de Excel 2007 contiene aproximadamente 6000 filas y 2 columnas. Quiero almacenar los contenidos en una matriz 2-D en C. Si existe una biblioteca C o algún otro método, por favor avíseme.Lea del archivo de Excel en C

+7

¿se puede exportar como csv? – ShinTakezou

Respuesta

11

Excel 2007 almacena los datos en un grupo de archivos, la mayoría de ellos en XML, todos agrupados en un archivo zip. Si desea ver los contenidos, puede cambiar el nombre de su .xlsx al whatever.zip y luego ábralo y mire los archivos que están dentro.

Suponiendo que el archivo de Excel solo contiene los datos en bruto, y lo único que importa es la lectura (es decir, lo hace no necesidad/quiere actualizar su contenido y obtener Excel para abrir de nuevo), es en realidad la lectura de los datos muy fácil. Dentro del archivo zip, está buscando el subdirectorio xl\worksheets\, que contendrá un número de archivos .xml, uno para cada hoja de cálculo de Excel (por ejemplo, un libro de trabajo predeterminado tendrá tres hojas de cálculo llamadas sheet1.xml, sheet2.xml y sheet3.xml).

Dentro de esos, está buscando la etiqueta <sheet data>. Dentro de eso, tendrá <row> etiquetas (una para cada fila de datos), y dentro de ellas <c> etiquetas con un atributo r=RC donde RC se reemplaza por la notación de fila/columna normal (por ejemplo, "A1"). La etiqueta <c> habrá anidado la etiqueta <v> donde encontrará el valor para esa celda.

me siento obligado a añadir una advertencia sin embargo: mientras que la lectura de datos muy simple puede ser de hecho así de fácil, la vida puede obtener una gran cantidad más complejo en un apuro si decide hacer mucho más que la lectura de filas simples/columnas de números. Intentando hacer cualquier cosa, incluso ligeramente más complejo que eso, puede obtener un lote más complejo a toda prisa.

+0

¡Estaba escribiendo esto! +1 por pensar como yo cciotti

+2

@cciotti: Es todo ** superficialmente ** muy fácil ... PERO: necesito examinar la secuencia 'xl/_rels/workbook.xml.rels' en caso de que el usuario haya barajado la hoja de orden ; El elemento '' para celdas de texto le da un índice en la secuencia 'xl/sharedStrings.xml'; ¿Tienes fechas en tus datos? Es posible que desee buscar en la secuencia 'xl/styles.xml' y decodificar' num_format_str' para saber si sus flotadores son fechas o números y buscar en la corriente 'xl/workbook.xml' para fecha epoch (1900 o 1904) además de otra información útil a nivel de libro de trabajo; '_xdead__xbeef_'-style escape de caracteres XML no válidos. –

+0

muy emocionante ver el archivo zip escondido usando la máscara del archivo * .xlsx. ¡Guauu! – RBT

3

Tiene varias opciones:
1) Guarde su hoja de trabajo de Excel en un archivo csv y analice eso.
2) Utilice la API COM (propiedad de Windows y complicada)
3) See this link para una clase de C++ que puede modificar.

+0

4) pure python solution :) http://juno-devel.ovh.org/Public/Code/Python/xls2csv.0.4.py - solo depende del paquete "xlrd" –

+0

La clase C++ vinculada solo parece funcionar para el formato anterior '.xls', no el formato Excel 2007' .xlsx'. Hay poca similitud entre los formatos. –

+0

@Marco Mariani: El OP quiere leer datos de Excel en la memoria; él no quiere destruirlo y escribirlo en un archivo pseudo-CSV. Debería usar 'xlrd' directamente [si está contento con Python en lugar de C, y feliz con el uso del código alfa para leer archivos XLSX]. –

1

Se puede encontrar otra lib de C para leer datos de archivos de Excel here.

+0

xls no es xlsx – Hubro

Cuestiones relacionadas