2010-04-20 60 views
8

我使用Spreadsheet_Excel_Writer生成.xls文件,並且它工作正常,直到我必須處理大量數據。在某個階段,它只是寫一些無意義的字符,並退出填充某些列。但有些列是字段到底(通常是數字數據)Spreadsheet_Excel_Writer數據輸出已損壞

我不太清楚xls文檔是如何形成的:逐行排列,還是col排列...另外它顯然不是錯誤一個字符串,因爲當我切出一些數據時,錯誤顯得有點進一步。

我認爲在我的所有代碼

無需這裏有一些要領

$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

你的數據集有多大? – richsage 2010-04-20 11:32:05

+0

*(備選)* http://phpexcel.codeplex.com/ – Gordon 2010-04-20 11:52:22

+0

您能接受作爲「正確答案」的mabi的答案是否真的解決了問題,這將爲其他人節省很多頭痛。 – Sych 2014-11-07 22:23:22

回答

17

我有同樣的問題,我發現這個解決方案,它爲我的作品:

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

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

解決方法是在Root中進行更改。PHP \線623:

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

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

該文件梨/ OLE/PPS/Root.php封裝OLE 1.0.0RC2(測試版)

+0

感謝您的信息。 +1 – Memochipan 2013-05-03 20:01:07

+0

爲您的答案的大大thansk – 2015-04-14 16:16:20

1

Spreadsheet_Excel_Writer接近由PEAR被棄用。我建議你嘗試使用phpexcel - http://phpexcel.codeplex.com/ - 代替。

+2

...但請檢查PHP是否啓用了zip擴展。並且請注意,PHPExcel需要大量內存...... – herrjeh42 2013-02-18 14:21:35

+1

我開始使用PHPExcel,但後來我的腳本產生的數據量增加了,而2Gb的內存已經不夠了。 Spreadsheet_Excel_Writer速度更快,內存消耗更少,因此如果您打算使用PHPExcel,請牢記 – 2013-02-25 15:46:52

2

好的!我發現了什麼問題。我沒有提到的是我必須將編碼設置爲UTF-8並輸出具有西里爾文字符集的俄文文本。所以對我來說,這些線是必要的

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

但S_E_W與setVersion(8)產生不良BIFF8文件時,搞砸了我所有的xls如果輸出超過一定量的字節。它不能在微軟Office中打開,並與吳損壞的數據...打開

的可能的解決方案,我在網絡上找到正在改變以下行

< ...> \電子表格\ EXCEL \作家\ Workbook.php

$this->_codepage = 0x04E4 

變化值0x04E3(代碼頁的Windows-1251)

< ...> \電子表格\ EXCEL \作家\ Format.php

$this->_font_charset = 0 

將值改爲0xCC(chrset ANSI Cyrillic)。

對於那些使用西裏爾字母的人應該這樣做。我即將嘗試這一點。

而且,是的,這個圖書館已經過時了。我會轉移到http://phpexcel.codeplex.com/ 感謝意見

UPD:上述解決方案似乎並沒有工作= \我還沒有找到任何地方在網絡上的補丁或解決方案,它的伎倆,以及最新版本(這是0.9.2)並不能解決問題。所以我想這仍然是一個BUG,這將永遠無法修復......

+2

在更新到版本0.9.3後,它可以正常工作! – nightcoder 2012-08-21 22:52:28

8

我知道這是一個老但我有同樣的問題,並解決它恢復到Spreadsheet_Excel_Writer 0.9.2和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 

希望這可以幫助未來的人。

+0

是的,它幫助!謝謝! – 2014-02-07 09:11:19

+0

迄今爲止最簡單的解決方案。還修復了0.9.3 Excel Writer版本引發的另一個bug,該版本引發了「引用時間通過引用」問題 – a2ron44 2015-10-20 21:31:27