php做EXCEL數據導出導入開發的一些小問題


前兩天剛剛做開發CRM系統項目,在做要做EXCEL導出導入功能,因為以前做.NET開發用的是NPOI,但可是沒找到PHP版本的,所以就網搜找了個國外的開源PHPEXCEL ,

一開始只是做了簡單的導入導出,還沒有出現做什么問題,一切順利(因為那是EXCEL的單元格都沒有設置什么數據類型的情況下),

在做導入讀取EXCEL數據時,而且單元格里的數據類型改成文本類型時,在PHPEXCEL讀出來的是PHPExcel_RichText類型的,這類型使getValue()是不管用了,因為這時候getValue()返回的PHPExcel_RichText(下面是PHPExcel_RichText數據保存格式)是一個Object類型了,所以在搜入數據的時候肯定出錯了。

 PHPExcel_RichText Object
(
    [_richTextElements:PHPExcel_RichText:private] => Array
        (
            [0] => PHPExcel_RichText_TextElement Object
                (
                    [_text:PHPExcel_RichText_TextElement:private] => l
                )

            [1] => PHPExcel_RichText_Run Object
                (
                    [_font:PHPExcel_RichText_Run:private] => PHPExcel_Style_Font Object
                        (
                            [_name:protected] => Calibri
                            [_size:protected] => 11
                            [_bold:protected] => 
                            [_italic:protected] => 
                            [_superScript:protected] => 
                            [_subScript:protected] => 
                            [_underline:protected] => none
                            [_strikethrough:protected] => 
                            [_color:protected] => PHPExcel_Style_Color Object
                                (
                                    [_argb:protected] => FF000000
                                    [_parentPropertyName:protected] => 
                                    [_isSupervisor:protected] => 
                                    [_parent:protected] => 
                                )

                            [_isSupervisor:protected] => 
                            [_parent:protected] => 
                            [colorIndex] => 8
                        )

                    [_text:PHPExcel_RichText_TextElement:private] => isimin
                )

        )

)

用var_dump()輸出一看蒙了,不過也沒關系,既然是PHPExcel_RichText類型的數據,經過查文檔,發現該對象有getPlainText()方法獲取單元格的值,這回笑了^_^

在這里要做個判斷

if(getValue() instanceof \PHPExcel_RichText) 

{

  //處理PHPExcel_RichText讀取

}else{

  //直接讀取getValue()

}

oK,注意有些網上用new PHPExcel_RichText($cell) 轉換的,會出現 Call to undefined method PHPExcel_CachedObjectStorage_Memory::getStyle()這個錯誤的

這個是PHPExcel的一個BUG或是遺漏吧,這錯誤解決方案是:

在CacheBase.php中的PHPExcel_CachedObjectStorage_Memory加一個getStyle()方法,

public function getStyle($pCellCooldinate='A1')
{
  return $this->_parent->getStyle($pCellCooldinate) ;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM