關於laravel5的excel包maatwebsite/excel的使用筆記_v1.0_byKL

關於laravel5的excel包maatwebsite/excel的使用筆記

關於安裝

官網已經很詳細了,再也不描述.
http://www.maatwebsite.nl/laravel-excel/docs/getting-startedphp

關於導入

導入的話只有幾個小地方須要注意:laravel

  1. 導入的時候會有產生一些null的cellsgit

    $reader->ignoreEmpty();
    //or
    //在循環遍歷導入的數據的時候主動忽略null
  2. 關於中文或者亂碼問題github

    Excel::load('filename.csv', function($reader) {
    
    }, 'UTF-8');
    或者在配置文件 excel.php(在安裝這個模塊的文檔有介紹怎麼生成這個文件)
    /*
            |--------------------------------------------------------------------------
            | Sheet heading conversion
            |--------------------------------------------------------------------------
            |
            | Convert headings to ASCII
            | Note: only applies to 'heading' settings 'true' && 'slugged'
            |
            */
    
            'to_ascii'                => false, //主要修復一些亂碼
    
            /*
            |--------------------------------------------------------------------------
            | Import encoding
            |--------------------------------------------------------------------------
            */
    
            'encoding'                => array(
    
                'input'  => 'UTF-8', //中文識別
                'output' => 'UTF-8'
    
            ),
  3. 導入的時候只讀取第一個sheetsweb

    $reader = Excel::load($file);
    
            $postDataFilter = [];
    
            $excelArray = $reader->first()->toArray();
    多個表的話
    Excel::batch('app/storage/uploads', function($sheets, $file) {
            
        $sheets->each(function($sheet) {//這裏的$sheet變量就是sheet對象了,excel裏的每個sheet
    
        });
    
    });

關於導出

須要先關注一下導出的時候maatwebsite/excel是使用什麼數據的編程

$result2 = array( //這個表明sheet自己
    array('data1', 'data2'), //這裏表明一行 row,裏面的數據就是橫向分佈的每個row的cell
    array('data3', 'data4') //這裏是第二行row
);

這裏須要注意的是多個sheet的話,不能直接在數組裏面寫,要建立多個 $excel->sheetapi

上面是關於導出數組的構成結構,下面是關於導出的函數須要注意的地方,至於如何完整使用,官方文檔說得還算是很清晰的數組

public function excelExport(){
//這裏須要使用use來傳遞變量給內部閉包,這裏假設$result2是一個要轉換成excel的數組數據
    Excel::create('testexcel', function ($excel) use ($result2, $apiHost) {
            $excel->sheet('Sheetname', function ($sheet) use ($result2, $apiHost){

                // Sheet manipulation
                //須要注意的地方1
                $sheet->fromArray($result2, null, 'A1', false, false);   
                //須要注意的地方2                 
                foreach ($result2 as $index=>$item) {
                    if($index == 0 ){ //排除標題row
                        continue;
                    }
                    //J2:J表明excel的讀取多個cell的寫法,寫過excel編程的不陌生
                    $sheet->getHyperlink('J2:J' . (count($result2) + 1))->setUrl($item['url']);
                }
            });
        })->export('xlsx');
}
  1. 地方1:markdown

    這裏是將數組轉變爲sheet的命令,`->fromArray($source, $nullValue, $startCell, $strictNullComparison, $headingGeneration)`
    
    這裏須要關注最後一個參數:`$headingGeneration`,默認是打開的,默認會將數組的keys導出,而且在第一行開始,可是通常咱們第一行是用作標題的,因此須要關閉,這是例子寫法:
    $sheet->fromArray($data, null, 'A1', false, false);
    那麼咱們作標題時候還須要手動寫入一個標題的row,例如這裏是以$result2爲例
    $tmpHeader = [
                'id',
                '名稱',
                '標籤',
                //......
            ];
    $result2[] = $tmpHeader;//將導出數組的第一個元素做爲標題,不過須要注意,在構建這個導出數組的時候,真正的數據要從索引1開始,由於0已是標題了
  2. 地方2:閉包

    這裏是將一個cell設置爲可點擊的網頁連接的
    
    這是標準例子
    $sheet->getCell('E26') //得到cell
        ->getHyperlink() //獲取Hyperlink對象
        ->setUrl('http://examle.com/uploads/cv/' . $cellValue) //設置url
        ->setTooltip('Click here to access file'); //這裏能夠無論,只是提示信息
    這裏是phpexcel的方法,其實laravel-excel是封裝在phpexcel上面的,因此大概的方法都差很少
    //對比參考一下
    //這是設置url跳轉的
    $objPHPExcel->getActiveSheet()->setCellValue('E26', 'www.phpexcel.net');
    $objPHPExcel->getActiveSheet()->getCell('E26')->getHyperlink()->setUrl('http://www.phpexcel.net');
    
    //這是設置在sheet內部跳轉的
    $objPHPExcel->getActiveSheet()->setCellValue('E26', 'www.phpexcel.net');
    $objPHPExcel->getActiveSheet()->getCell('E26')->getHyperlink()->setUrl("sheet://'Sheetname'!A1");
    那麼這裏個例子裏面是設置單例的,若是咱們要設置整個數組的某一列的都變成可點擊的話,就須要用循環遍歷數組而後,循環seturl了

參考:

  1. 官網

  2. https://github.com/Maatwebsite/Laravel-Excel/issues/926

  3. Change a cell into a clickable URL

相關文章
相關標籤/搜索