官網已經很詳細了,再也不描述.
http://www.maatwebsite.nl/laravel-excel/docs/getting-startedphp
導入的話只有幾個小地方須要注意:laravel
導入的時候會有產生一些null的cellsgit
$reader->ignoreEmpty(); //or //在循環遍歷導入的數據的時候主動忽略null
關於中文或者亂碼問題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' ),
導入的時候只讀取第一個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->sheet
api
上面是關於導出數組的構成結構,下面是關於導出的函數須要注意的地方,至於如何完整使用,官方文檔說得還算是很清晰的數組
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: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:閉包
這裏是將一個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了
參考: