<?php
namespace app\index\controller;
use think\Controller;
use think\Db;
class Index extends Controller{
public function index(){
return $this->fetch();
}
//导入
public function inserExcel(){
import('PHPExcel.PHPExcel');
import('PHPExcel.PHPExcel.IOFactory.PHPExcel_IOFactory');
import('PHPExcel.PHPExcel.Reader.Excel5');
//获取表单上传文件
$file = request()->file('excel');
$info = $file->validate(['ext' => 'xlsx,xls'])->move(ROOT_PATH . 'public' . DS . 'uploads');
if ($info) {
if(empty($info)) {
return error('导入失败!');
}
$exclePath = $info->getSaveName(); //获取文件名
//上传文件的地址
$filename = ROOT_PATH . 'public' . DS . 'uploads' . DS . $exclePath;
//判断版本,这里有的网上的版本没有进行判断,导致会报大概这样的错误:
//Warning: ZipArchive::getFromName() [ziparchive.getfromname]: Invalid or unitialized ,这里加上这个判断就可以了
$extension = strtolower( pathinfo($filename, PATHINFO_EXTENSION) );
if($extension == 'xlsx') {
$objReader =\PHPExcel_IOFactory::createReader('Excel2007');
//加载文件内容,编码utf-8
$objPHPExcel = $objReader->load($filename, $encode = 'utf-8');
}else if($extension == 'xls'){
$objReader =\PHPExcel_IOFactory::createReader('Excel5');
$objPHPExcel = $objReader->load($filename, $encode = 'utf-8');
}else{
return error('请上传excel格式的文件!');
}
$excel_array=$objPHPExcel->getsheet(0)->toArray(); //转换为数组格式
array_shift($excel_array); //删除第一个数组(标题);
$data = [];
foreach($excel_array as $k=>$v) {
//data数组根据你表字段自行修改,这里Excel文件里的字段要跟表一致
$data[$k]['name'] = $v[0];
$data[$k]['pid'] = 1;
$data[$k]['type'] = $v[2];
$data[$k]['price'] = $v[3];
$data[$k]['standard'] = $v[4];
$data[$k]['unit'] = $v[5];
$data[$k]['supplier'] = $v[6];
$data[$k]['lowstock'] = $v[7];
$data[$k]['topstock'] = $v[8];
$data[$k]['stock'] = $v[9];
$data[$k]['operator'] = $v[10];
}
echo "<pre>";
print_r($data);
echo "</pre>";
exit();
} else {
return error('导入失败!');
}
}
//导出
function export(){//导出Excel
import('PHPExcel.PHPExcel');//调用类库,路径是基于vendor文件夹的
import('PHPExcel.PHPExcel.Worksheet.Drawing');
import('PHPExcel.PHPExcel.Writer.Excel2007');
$xlsName = "export";
$xlsCell = array(
array('uid','账号序列'),
array('user_name','名字'),
array('email','邮箱'),
);
$xlsData = Db::name('member')->Field('uid,user_name,email')->select();
$this->exportExcel($xlsName,$xlsCell,$xlsData);
}
function exportExcel($expTitle,$expCellName,$expTableData){
//include_once EXTEND_PATH.'PHPExcel/PHPExcel.php';//方法二
$xlsTitle = iconv('utf-8', 'gb2312', $expTitle);//文件名称
$fileName = $expTitle.date('_YmdHis');//or $xlsTitle 文件名称可根据自己情况设定
$cellNum = count($expCellName);
$dataNum = count($expTableData);
$objPHPExcel = new \PHPExcel();//方法一
//$objPHPExcel = new \PHPExcel();//方法二
$cellName = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U',
'V','W','X','Y','Z','AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN','AO',
'AP','AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ');
$objPHPExcel->getActiveSheet(0)->mergeCells('A1:'.$cellName[$cellNum-1].'1');//合并单元格
$objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1', $expTitle.' Export time:'.date('Y-m-d H:i:s'));
for($i=0;$i<$cellNum;$i++){
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellName[$i].'2', $expCellName[$i][1]);
}
// Miscellaneous glyphs, UTF-8
for($i=0;$i<$dataNum;$i++){
for($j=0;$j<$cellNum;$j++){
$objPHPExcel->getActiveSheet(0)->setCellValue($cellName[$j].($i+3), $expTableData[$i][$expCellName[$j][0]]);
}
}
ob_end_clean();//这一步非常关键,用来清除缓冲区防止导出的excel乱码
header('pragma:public');
header('Content-type:application/vnd.ms-excel;charset=utf-8;name="'.$xlsTitle.'.xls"');
header("Content-Disposition:attachment;filename=$fileName.xls");//"xls"参考下一条备注
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');//"Excel2007"生成2007版本的xlsx,"Excel5"生成2003版本的xls
$objWriter->save('php://output');
exit;
}
//pdf导出 不支持php7.2
public function pdfImport(){
import('PHPExcel.PHPExcel');
$rendererName = \PHPExcel_Settings::PDF_RENDERER_MPDF;
$rendererLibrary = 'mpdf';
$rendererLibraryPath = './static/' . $rendererLibrary;
// Create new PHPExcel object
$objPHPExcel = new \PHPExcel();
// Set document properties
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
->setLastModifiedBy("Maarten Balliauw")
->setTitle("PDF Test Document")
->setSubject("PDF Test Document")
->setDescription("Test document for PDF, generated using PHP classes.")
->setKeywords("pdf php")
->setCategory("Test result file");
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', 'Hello')
->setCellValue('B1', 'world!')
->setCellValue('C1', 'Hello')
->setCellValue('D1', 'world!');
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A4', 'Miscellaneous glyphs')
->setCellValue('A5', 'éàèùâêîôûëïüÿäöüç');
$objPHPExcel->getActiveSheet()->setTitle('Simple');
$objPHPExcel->getActiveSheet()->setShowGridLines(false);
$objPHPExcel->setActiveSheetIndex(0);
if (!\PHPExcel_Settings::setPdfRenderer(
$rendererName,
$rendererLibraryPath
)) {
die(
'NOTICE: Please set the $rendererName and $rendererLibraryPath values' .
'<br />' .
'at the top of this script as appropriate for your directory structure'
);
}
header('Content-Type: application/pdf');
header('Content-Disposition: attachment;filename="01simple.pdf"');
header('Cache-Control: max-age=0');
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'PDF');
$objWriter->save('php://output');
exit;
}
}
?>