2010-04-20 5 views
8

J'utilise Spreadsheet_Excel_Writer pour générer un fichier .xls et cela fonctionne correctement jusqu'à ce que je doive traiter une grande quantité de données. Sur certaines scènes, il écrit juste quelques caractères absurdes et quitte certaines colonnes. Cependant certaines colonnes sont champ jusqu'à la fin (données généralement numériques)La sortie de données Spreadsheet_Excel_Writer est endommagée

Je ne suis pas tout à fait sûr comment le document xls est formé: rangée par rangée, ou col par col ... Aussi ce n'est évidemment pas une erreur dans une chaîne de caractères, car lorsque je découpe des données, l'erreur apparaît un peu plus loin.

Je pense qu'il n'y a pas besoin dans tous mon code

voici quelques éléments essentiels

$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

Quelle est la taille de votre jeu de données? – richsage

+0

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

+0

Pourriez-vous s'il vous plaît accepter comme "la bonne réponse" la réponse de mabi qui résout vraiment le problème, cela permettra d'économiser beaucoup de maux de tête aux autres. – Sych

Répondre

17

J'ai eu le même problème, j'ai trouvé cette solution qui fonctionne pour moi:

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

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

La solution est la modification dans Root.php \ line 623:

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

à

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

le fichier est poire/OLE/PPS/Root.php dans le package OLE 1.0.0RC2 (beta)

+0

Merci pour l'info. +1 – Memochipan

+0

Big big thansk pour votre réponse –

1

Spreadsheet_Excel_Writer est proche d'être désapprouvée par PEAR. Je vous suggère d'essayer d'utiliser phpexcel - http://phpexcel.codeplex.com/ - à la place.

+2

... mais vérifiez que PHP a l'extension zip activée. Et sachez que PHPExcel a besoin de beaucoup de mémoire ... – herrjeh42

+1

J'ai commencé par utiliser PHPExcel, mais le volume de données que mon script doit générer a augmenté et 2 Go de RAM ne suffisaient plus. Spreadsheet_Excel_Writer est beaucoup plus rapide et moins gourmand en mémoire, donc si vous envisagez d'utiliser PHPExcel, gardez cela à l'esprit –

2

Ok! J'ai trouvé quel était le problème. La chose que je n'ai pas mentionnée est que j'ai dû mettre l'encodage en UTF-8 et sortir le texte russe qui a un jeu de caractères cyrillique. Donc, pour moi, ces lignes étaient nécessaires

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

mais S_E_W avec setVersion (8) généré mauvais fichier BIFF8, ​​qui foiré toutes mes xls si la sortie a dépassé une certaine quantité d'octets. Il ne pouvait pas être ouvert dans MS Office et ouvert avec les données endommagées dans Oo ...

La solution que j'ai trouvé dans le web change les lignes suivantes

< ...> \ Spreadsheet \ Excel \ Writer \ Workbook.php

$this->_codepage = 0x04E4 

valeur de changement à 0x04E3 (page de code pour Windows-1251)

< ...> \ Tableur \ Excel \ Writer \ Format.php

$this->_font_charset = 0 

valeur de modification 0xCC (chrset ANSI cyrillique).

Cela devrait faire l'affaire pour ceux qui utilisent des lettres cyrilliques. Je suis sur le point d'essayer ça.

Et, oui, cette bibliothèque est SO obsolète. Je vais transférerez à http://phpexcel.codeplex.com/ Merci des conseils

UPD: La solution ne semble pas ci-dessus pour travailler = \ Je ne ai pas trouvé partout sur le patch Web ou d'une solution qui fait l'affaire, et la dernière version (qui est 0.9.2) ne résout pas le problème. Je suppose donc cela est encore un BUG, ​​qui ne serait jamais fixé ...

+2

Cela a fonctionné après ma mise à jour vers la version 0.9.3! – nightcoder

8

Je sais que c'est un vieux post mais j'ai eu le même problème et l'ai résolu en revenant à Spreadsheet_Excel_Writer 0.9.2 et 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 

Espérons que cela aidera quelqu'un dans le futur.

+0

Oui, ça a aidé! Je vous remercie! –

+0

De loin la solution la plus simple. Corrige également un autre bogue avec la version 0.9.3 d'Excel Writer qui génère un problème de type "passe-par-référence" – a2ron44

Questions connexes