2014-03-31 34 views
0

我想從PHP導出數據& MySql。對於有大量數據(大約1000個字符)的字段,我將獲得空值。除了那些領域一切工作正常。 這是我現在使用的代碼。請檢查一次,如果有任何修改,請告訴我。我在谷歌搜索,所以很多人說它的緩存/內存問題。導出到ExCel顯示一些列爲空

 <?php 

    function xlsBOF() { 
     echo pack("ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0); 
     return; 
    } 

    function xlsEOF() { 
     echo pack("ss", 0x0A, 0x00); 
     return; 
    } 

    function xlsWriteNumber($Row, $Col, $Value) { 
     echo pack("sssss", 0x203, 14, $Row, $Col, 0x0); 
     echo pack("d", $Value); 
     return; 
    } 

    function xlsWriteLabel($Row, $Col, $Value) { 
     $L = strlen($Value); 
     echo pack("ssssss", 0x204, 8 + $L, $Row, $Col, 0x0, $L); 
     echo $Value; 
    return; 
    } 



     $sel_sql=mysql_query("select desc from table"); 
     $myFile = date("m-d-Y").'_users.xls'; 


     header("Pragma: public"); 
     header("Expires: 0"); 
     header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
     header("Content-Type: application/force-download"); 
     header("Content-Type: application/octet-stream"); 
     header("Content-type: application/vnd.ms-excel"); 
     header("Content-Type: application/download");; 
     header("Content-Disposition: attachment;filename=".$myFile); 
     header("Content-Transfer-Encoding: binary "); 



     // XLS Data Cell 

        xlsBOF(); 
        xlsWriteLabel(0,1,"desc"); 
        $xlsRow = 1; 
        while(list($desc)=mysql_fetch_row($sel_sql)) { 
         xlsWriteLabel($xlsRow,1,"$desc"); 
         $xlsRow++; 
        } 
      xlsEOF(); 


    ?> 
+0

不,這些是您設置的標題;你怎麼實際輸出數據?作爲csv文件,html標記,以及實際的BIFF或OfficeOpenXML格式文件? –

+0

@MarkBaker,我正在使用users.xls。即xls甲酸鹽。 – Kishore

+0

請注意,只有一個內容類型標題將被髮送,您的列表中的最後一個四個;所以你可以消除三個冗餘的代碼行 –

回答

0

假設你使用xls文件輸出:在BIFF格式文件,細胞被限制在32,767個字符;但單元格中只顯示1,024個字符。所有32,767個字符都顯示在配方欄中。

編輯

閱讀,你實際上已經發布的代碼:

Excel中對數據的單元格可以容納量的限制:爲Excel BIFF 8個文件,該限制是32,767個字符。但是,對於長字符串,這些數據會保存在BIFF文件中的幾個塊中,並帶有連續記錄。對於BIFF 5文件(Excel 95),每塊的限制爲2084字節;在BIFF 8文件(Excel 97及以上)中,限制爲8228字節。超過這些限制的記錄必須拆分爲CONTINUE塊。

這個相對簡單化的作者並不是用來處理將記錄拆分成多個連續記錄的:它甚至不使用BIFF 8共享字符串表,或者指出它正在寫什麼BIFF版本(這意味着Excel將打開它使用最低公分母參數)。它只是試圖將單元的全部內容存儲到標準標籤塊中。爲了解決這個問題,你需要修復你的代碼來處理用連續塊(通過共享字符串表)分割字符串值;或者切換到使用處理已經在多個塊之間分割共享字符串的庫。

+0

感謝您的迴應。但是,我得到這些列的空結果(小數據獲得正確的值)。 – Kishore

+0

那麼你將不得不告訴我你正在使用哪個Excel寫作庫 –

+0

當然。請檢查主郵政的完整代碼。剛纔我更新了。 – Kishore

相關問題