1. 程式人生 > >thinkphp5中的excel表的導入導出

thinkphp5中的excel表的導入導出

技術 index fill on() path 遇到 sele thinkphp5 select()

首先將PHPExcel文件放到vendor中

PHPExcel下載地址:https://pan.baidu.com/s/1GjbcSXxHwbLeBw8NzzIBYA

提取碼:zbqq

技術分享圖片

數據導出到excel中

控制器中引入類文件

技術分享圖片

vendor ( ‘PHPExcel‘ );
vendor ( ‘PHPExcel.PHPExcel_IOFactory‘ );
vendor ( ‘PHPExcel.PHPExcel_Cell‘ );

控制器php代碼
    public function index()//EXCL表格的導出
{
$data = Db::table(‘score‘)->select();
$name = ‘test‘;
$excel = new \PHPExcel(); //引用phpexcel
iconv(‘UTF-8‘, ‘gb2312‘, $name); //針對中文名轉碼
$header = [‘ID‘, ‘sid‘, ‘語文‘, ‘數學‘, ‘英語‘, ‘政治‘, ‘學期‘]; //表頭,名稱可自定義
$excel->setActiveSheetIndex(0);
$excel->getActiveSheet()->setTitle($name); //設置表名
$excel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(18);
$excel->getActiveSheet()->getColumnDimension(‘B‘)->setWidth(80);
$letter = [‘A‘, ‘B‘, ‘C‘, ‘D‘, ‘E‘, ‘F‘, ‘G‘];//列坐標
//生成表頭
for ($i = 0; $i < count($header); $i++) {
//設置表頭值
$excel->getActiveSheet()->setCellValue("$letter[$i]1", $header[$i]);
//設置表頭字體樣式
$excel->getActiveSheet()->getStyle("$letter[$i]1")->getFont()->setName(‘宋體‘);
//設置表頭字體大小
$excel->getActiveSheet()->getStyle("$letter[$i]1")->getFont()->setSize(14);
//設置表頭字體是否加粗
$excel->getActiveSheet()->getStyle("$letter[$i]1")->getFont()->setBold(true);
//設置表頭文字水平居中
$excel->getActiveSheet()->getStyle("$letter[$i]1")->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
//設置文字上下居中
$excel->getActiveSheet()->getStyle($letter[$i])->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
//設置單元格背景色
$excel->getActiveSheet()->getStyle("$letter[$i]1")->getFill()->getStartColor()->setARGB(‘FFFFFFFF‘);
$excel->getActiveSheet()->getStyle("$letter[$i]1")->getFill()->setFillType(\PHPExcel_Style_Fill::FILL_SOLID);
$excel->getActiveSheet()->getStyle("$letter[$i]1")->getFill()->getStartColor()->setARGB(‘FF6DBA43‘);
//設置字體顏色
$excel->getActiveSheet()->getStyle("$letter[$i]1")->getFont()->getColor()->setARGB(‘FFFFFFFF‘);
}

//寫入數據
foreach ($data as $k => $v) {
//從第二行開始寫入數據(第一行為表頭)
$excel->getActiveSheet()->setCellValue(‘A‘ . ($k + 2), $v[‘id‘]);
$excel->getActiveSheet()->setCellValue(‘B‘ . ($k + 2), $v[‘sid‘]);
$excel->getActiveSheet()->setCellValue(‘C‘ . ($k + 2), $v[‘chinese‘]);
$excel->getActiveSheet()->setCellValue(‘D‘ . ($k + 2), $v[‘math‘]);
$excel->getActiveSheet()->setCellValue(‘E‘ . ($k + 2), $v[‘english‘]);
$excel->getActiveSheet()->setCellValue(‘F‘ . ($k + 2), $v[‘politics‘]);
$excel->getActiveSheet()->setCellValue(‘G‘ . ($k + 2), $v[‘xqid‘]);
}

//設置單元格邊框
$excel->getActiveSheet()->getStyle("A1:E" . (count($data) + 1))->getBorders()->getAllBorders()->setBorderStyle(\PHPExcel_Style_Border::BORDER_THIN);

//清理緩沖區,避免中文亂碼
ob_end_clean();
header(‘Content-Type: application/vnd.ms-excel‘);
header(‘Content-Disposition: attachment;filename="‘ . $name . ‘.xls"‘);
header(‘Cache-Control: max-age=0‘);

//導出數據
$res_excel = \PHPExcel_IOFactory::createWriter($excel, ‘Excel2007‘);
$res_excel->save(‘php://output‘);


}
導出是調用index()就可以了

excel數據導入數據庫
引用類

技術分享圖片

vendor(‘PHPExcel.Writer.IWriter‘);
vendor(‘PHPExcel.Writer.Abstract‘);
vendor(‘PHPExcel.Writer.Excel5‘);
vendor(‘PHPExcel.Writer.Excel2007‘);
vendor(‘PHPExcel.IOFactory‘);

前端excel上傳頁面

技術分享圖片

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form enctype="multipart/form-data" method="post" action="index3">
<input type="file" name="excel" /> <br>
<input type="submit" value="上傳" />
</form>
</body>
</html>
//請忽略前端頁面的樣式,重點是功能,嘻嘻^_^
將文件上傳到index3控制器中
index3的php代碼

技術分享圖片

public function index3()
{
// 獲取表單上傳文件
$file = request()->file(‘excel‘);
// 移動到框架應用根目錄/public/uploads/ 目錄下
if ($file) {
$info = $file->move(ROOT_PATH . ‘public‘ . DS . ‘uploads‘);
if ($info) {
$path = ROOT_PATH . ‘public‘ . DS . ‘uploads‘ . DS;
$filename = $info->getSaveName();
$file_path = $path . $filename;
$objPHPExcel = \PHPExcel_IOFactory::load($file_path);//讀取上傳的文件
$arr = $objPHPExcel->getSheet(0)->toArray();//獲取其中的數據
echo "<pre>";
print_r($arr);
die;//excel表中的數據,將數據插入數據庫請自行書寫^_^..
} else {
echo $file->getError();
}
}

}
已經將excel表中數據提取出來,剩余的將數據插入數據庫中,請自行書寫^_^..

以上代碼本人親測,導入。導出可以順利實現,沒有遇到問題,如有遇到報錯或者問題請聯系本人。
一起努力,共同進步。



thinkphp5中的excel表的導入導出