2016-11-28 113 views
0

我使用phpexcel讀取並導入一個CSV文件,其中一個單元格的長度爲18位數,如123456789123456789,儘管我使用的是ini_set("precision", "18");,但我得到的值不正確。如何解決這個問題呢?phpexcel從單元格中讀取18位長數字

ini_set("precision", "20"); 
    $objReader = PHPExcel_IOFactory::createReader('CSV') 
        ->setDelimiter(',') 
        ->setInputEncoding('GBK') 
        ->setEnclosure('"') 
        ->setLineEnding("\r\n") 
        ->setSheetIndex(0); 
    $objPHPExcel = $objReader->load($file); 

    $worksheet = $objPHPExcel->getActiveSheet(); 

    foreach ($worksheet->getRowIterator() as $row) { 
     echo 'Row number: ' . $row->getRowIndex() . "\r\n<br>"; 

     $cellIterator = $row->getCellIterator(); 
     $cellIterator->setIterateOnlyExistingCells(false); // Loop all cells, even if it is not set 
     foreach ($cellIterator as $cell) { 
      if (!is_null($cell)) { 
       echo 'Cell: ' . $cell->getCoordinate() . ' - ' . (string)$cell->getValue() . "\r\n<br>"; 

      } 
     } 
    } 

回答

2

在評論你提到了錯誤的輸出增加了兩個零。這肯定是由小數分隔符的錯誤解釋引起的,因此它被視爲千位分隔符。

更改您的PHP服務器的區域設置,以便它使用點作爲小數點分隔符 - 您可能還需要更改您的千位分隔符(如果它當前是一個點)。

+0

我的PHP服務器是64位的。問題是當單元格數爲123456789123456789,'$ cell-getValue );'返回123456789123456700,最後兩位數字不正確。 – Ron

+0

更改您的區域設置。這聽起來像一個小數分隔符問題:一方面它是一個點,另一方面是一個逗號,所以數字被解釋爲錯誤。 – trincot

+0

我將'setDelimiter(',')'改爲'setDelimiter('。')'。 Bingoooooooo,您的解決方案非常正確。這是一個可愛的答案。謝謝trincot。 – Ron

0
Convert the long integer to string you can read the value 
$value = 123456789123456789; 
$value = (string)$value; 
+0

結果是一樣的。 '$ cell-> getValue();'我害怕返回的內容不正確。 – Ron

+0

試試這個''$ cell-> getValue()'' –

+0

對於'echo'Cell:'。 $ cell-> getCoordinate()。 ' - '。 「$ cell-> getValue()」。 「\ r \ n
」;'我得到'()'。對於'echo'Cell:'。 $ cell-> getCoordinate()。 ' - ''。$ cell-> getValue()。「\」\ r \ n
「;'結果不正確。 – Ron

0

最後一次嘗試

$keyCell = $sheet->getCellByColumnAndRow(1,5)->getFormattedValue(); 

現在更換$細胞>的GetValue()到$ keyCell 和 這裏1,5是靜態列和行,在你的代碼必須動態地使用它