2014-10-02 91 views
2

在我先前將整個第一列格式化爲日期的Excel表格中,後來將所使用的單元格格式更改爲常規(單元格A1至A11)。因此,從單元格A12開始,第一列仍然具有以前的日期格式。 當我嘗試使用第一列(A1,A2,...,A11)的值時,它將它們的格式標識爲日期,並給出錯誤的結果。PHPExcel採用空單元格格式

例如,這retruns日期格式(d /月/年),這是不是這種情況(參見圖片)

$sheet->getStyle('A3')->getNumberFormat()->getFormatCode(); 

而且整個列具有以下格式:

$sheet->getStyle('A')->getNumberFormat()->getFormatCode();  

有沒有辦法確保單元格本身的格式被考慮? (當我表示這個細胞明確地,使用正確的格式的格式)

經過一番調查,發現只有針對的.xlsx文件時出現此問題(使用閱讀器PHPExcel_Reader_Excel2007),而不是爲.xls文件(閱讀器PHPExcel_Reader_Excel5)。

enter image description here

回答

2

您可以設置整個行/列格式:

$sheet->getStyle('A')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_TEXT); 

因爲你已經改變了A1的唯一格式,以A11,其餘仍使用舊的格式。所以設置整列/行的格式將會解決這個問題

+0

感謝您的回覆。嘗試此(其中工程): $ sheet-> getStyle('A1:A20') - > getNumberFormat() - > setFormatCode('General'); 但是,應該有一個通用的方法來做到這一點(我的意思是:採取單元格的實際格式,而不是強制'一般'格式) – user2992220 2014-10-03 07:12:21

+0

嗯,這是我的解決方案,但它只設置所有的格式A * 細胞。另外setFormatCode從常量中獲取樣式,使用它們是很好的。 – 2014-10-05 08:09:18

0

在讀者Excel2007.php中發現了一些可能的原因後,發現了一個可能的原因。

沒有與條件。當設置樣式(線933)的一個問題:

if ($c["s"] && !$this->_readDataOnly) { 
    $cell->setXfIndex(isset($styles[intval($c["s"])]) ? intval($c["s"]) : 0); 
} 

在常規信元格式,$ C [「S」]的情況下,沒有定義,和的所述_xfIndex單元格未設置(未通過if語句)。這給出了(我沒有找到原因)存儲單元的_xfIndex的問題。

刪除$ c [「s」]條件時,設置了正確的樣式。

if (/*$c["s"] &&*/ !$this->_readDataOnly) { 
    $cell->setXfIndex(isset($styles[intval($c["s"])]) ? intval($c["s"]) : 0); 
} 

希望沒有隱藏的後果。