2010-04-20 9 views
8

Uso Spreadsheet_Excel_Writer para generar el archivo .xls y funciona bien hasta que tenga que ocuparme de una gran cantidad de datos. En cierta etapa, simplemente escribe algunos caracteres sin sentido y termina llenando ciertas columnas. Sin embargo, algunas columnas son campo hasta el final (generalmente datos numéricos)La salida de datos de Spreadsheet_Excel_Writer está dañada

No estoy muy seguro de cómo se forma el documento xls: fila por fila, o col por col ... También obviamente no es un error en una cadena, porque cuando recorto algunos datos, el error aparece un poco más.

creo que no es necesario en todos los de mi código

aquí están algunos elementos esenciales

$filename = 'file.xls'; 
$workbook = & new Spreadsheet_Excel_Writer(); 
$workbook->setVersion(8); 
$contents =& $workbook->addWorksheet('Logistics'); 
$contents->setInputEncoding('UTF-8'); 

$workbook->send($filename); 

//here is the part where I write data down 
$contents->write(0, 0, 'Field A'); 
$contents->write(0, 1, 'Field B'); 
$contents->write(0, 2, 'Field C'); 

$ROW=1; 
foreach($ordersArr as $key=>$val){ 
    $contents->write($ROW, 0, $val['a']); 
    $contents->write($ROW, 1, $val['b']); 
    $contents->write($ROW, 2, $val['c']); 

    $ROW++; 
} 
$workbook->close(); 
+0

¿Qué tan grande es su conjunto de datos? – richsage

+0

* (alternativa) * http://phpexcel.codeplex.com/ – Gordon

+0

¿Podría aceptar como "la respuesta correcta" la respuesta del mabi que realmente resuelve el problema, esto ahorrará muchos dolores de cabeza a otras personas. – Sych

Respuesta

17

que tenían el mismo problema, he encontrado esta solución que funciona para mí:

http://pear.php.net/bugs/bug.php?id=19284&edit=3

[2012-08- 08 17:12 UTC] identit (Vincent Dubourg)

La solución es el cambio en Root.php \ line 623:

fwrite($FILE, pack("V", 1)); 

a

fwrite($FILE, pack("V", $num_sb_blocks)); 

el archivo está pera/OLE/PPS/Root.php en el paquete OLE 1.0.0RC2 (beta)

+0

Gracias por la información. +1 – Memochipan

+0

Gran thansk grande para su respuesta –

1

Spreadsheet_Excel_Writer está cerca de ser desaprobado por PERA. Te sugiero que intentes usar phpexcel - http://phpexcel.codeplex.com/ - en su lugar.

+2

... pero verifique que PHP tenga habilitada la extensión zip. Y tenga en cuenta que PHPExcel necesita mucha memoria ... – herrjeh42

+1

Comencé usando PHPExcel, pero luego la cantidad de datos que mi script tiene que generar aumentó y 2 GB de RAM ya no eran suficientes. Spreadsheet_Excel_Writer es mucho más rápido y consume menos memoria, por lo que si planea usar PHPExcel, tenga eso en mente –

2

Ok! He encontrado cuál era el problema. Lo que no mencioné es que tuve que establecer la codificación en UTF-8 y enviar el texto en ruso con caracteres cirílicos. Así que para mí estas líneas eran necesarias

$workbook->setVersion(8); 
    ... 
    $contents->setInputEncoding('UTF-8'); 

pero S_E_W con setVersion (8) generada archivo malo BIFF8, ​​que en mal estado toda mi xls si la salida supera una cierta cantidad de bytes. No se pudo abrir en MS Office, y abrió con los datos dañados en Oo ...

La posible solución que he encontrado en la web está cambiando las siguientes líneas

< ...> \ \ de hoja de cálculo Excel \ escritor \ Workbook.php

$this->_codepage = 0x04E4 

valor de cambio a 0x04E3 (página de códigos para Windows-1251)

< ...> \ Hoja de cálculo \ Excel \ escritor \ format.php

$this->_font_charset = 0 

cambie el valor на 0xCC (chrset ANSI cirílico).

Eso debería ser el truco para aquellos que usan letras cirílicas. Estoy a punto de probar esto.

Y, sí, esta biblioteca está TAN obsoleta. Voy a transferir a http://phpexcel.codeplex.com/ Gracias por consejos

UPD: anterior no parece que funcione la solución = \ Y que no he encontrado en cualquier parte del parche web o solución que hace el truco, y la última versión (que es 0.9.2) no resuelve el problema. Así que supongo que esto sigue siendo un ERROR, que nunca se fija ...

+2

¡Funcionó después de actualizar a la versión 0.9.3! – nightcoder

8

sé que es un viejo publicación pero tuve el mismo problema y lo resolvió volviendo a Spreadsheet_Excel_Writer 0.9.2 y OLE-1.0.0RC1.

pear uninstall Spreadsheet_Excel_Writer-0.9.3 
pear uninstall OLE-1.0.0RC2 

pear install OLE-1.0.0RC1 
pear install Spreadsheet_Excel_Writer-0.9.2 

Espero que esto ayude a alguien en el futuro.

+0

Sí, ayudó! ¡Gracias! –

+0

Con mucho, la solución más fácil. También corrige otro error con la versión 0.9.3 Excel Writer que arroja un problema de "tiempo de llamada pasado por referencia" – a2ron44

Cuestiones relacionadas