环境:thinkphp3.2,php5.6,mysql5.0,apache2.0。
导入原理:将phpExcel扩展类包移入项目,将excel表先下载,然后将其中的对应行列的数据添加到数据库中。
导出原理:查询数据库中的数据,导入到对应的excel表。
phpExcel包下载地址:https://download.youkuaiyun.com/download/qq_39545346/10312736
导入代码:
if (!empty($_FILES)) {
//获取后缀
$ext = strrchr($_FILES['file']['name'],'.');
//上传配置
$upload->maxSize = 0 ;// 设置附件上传大小
$upload->exts = array('xls');//设置附件上传类型
$upload->autoSub = false;
$upload->rootPath = './data/subject/'; // 设置附件上传目录
$upload->saveName = date("YmdHis",time()).rand(1000,9999);
//上传文件$info = $upload->upload();
if(!$info) {
// 上传错误提示错误信息
$this->error($upload->getError());
}
//导入相关类(本人用的TP3.2,相关类放在Org/Util)
import("Org.Util.PHPExcel");import("Org.Util.PHPExcel.IOFactory");
$file_name= $upload->rootPath.$info['import']['savename'];
$objPHPExcel = new \PHPExcel();
$objReader = \PHPExcel_IOFactory::createReader('Excel5');
$objPHPExcel = $objReader->load($file_name,$encode='utf-8');
$sheet = $objPHPExcel->getSheet(0);
$highestRow = $sheet->getHighestRow(); // 取得总行数
$highestColumn = $sheet->getHighestColumn(); // 取得总列数
//循环添加数据
for($i=3;$i<=$highestRow;$i++)
{
$data['parent_id'] = $objPHPExcel->getActiveSheet()->getCell("A".$i)->getValue();
// $data['res_id'] = $objPHPExcel->getActiveSheet()->getCell("D".$i)->getValue();
$data['title'] = $objPHPExcel->getActiveSheet()->getCell("B".$i)->getValue();
$data['option_a'] = $objPHPExcel->getActiveSheet()->getCell("C".$i)->getValue();
$data['option_b']= $objPHPExcel->getActiveSheet()->getCell("D".$i)->getValue();
$data['option_c']= $objPHPExcel->getActiveSheet()->getCell("E".$i)->getValue();
$data['option_d']= $objPHPExcel->getActiveSheet()->getCell("F".$i)->getValue();
$data['answer']= $objPHPExcel->getActiveSheet()->getCell("G".$i)->getValue();
$data['type']= $objPHPExcel->getActiveSheet()->getCell("H".$i)->getValue();
$data['better_explain']= $objPHPExcel->getActiveSheet()->getCell("I".$i)->getValue();
$res[] = M('subject')->add($data);
}
if($res){
$this->success('导入成功!');
}else{
$this->error('导入失败!');
}
}else
{
$this->error("请选择上传的文件");
}
导出函数:
function exportExcel($data, $savefile = null, $title = null, $sheetname = 'sheet1',$state=1) {
ini_set('memeory_limit','2048m');
ob_end_clean();
import("Org.Util.PHPExcel");
if (is_null($savefile)) {
$savefile = time();
}
if (is_array($title)) {
array_unshift($data, $title);
}
$objPHPExcel = new \PHPExcel();
$head_num = count($data);
foreach ($data as $k => $v) {
$obj = $objPHPExcel->setActiveSheetIndex(0);
$row = $k + 2;
$nn = 0;
foreach ($v as $vv) {
$col = chr(65 + $nn);
$obj->setCellValue($col . $row, $vv);
$nn++;
$objPHPExcel->getActiveSheet()->getStyle($col.$row)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
}}
if($state == 1){
$objPHPExcel->getActiveSheet()->mergeCells('A1:I1');
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(15);
}
if($state == 2){
$objPHPExcel->getActiveSheet()->mergeCells('A1:C1');
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(20);
}
$objPHPExcel->getActiveSheet()->setCellValue('A1',$savefile);
//设置格式
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(15);
$objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(15);
$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(15);
$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(40);
$objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(15);
$objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(15);
$objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(20);
$objPHPExcel->getActiveSheet()->getColumnDimension('I')->setWidth(10);
$objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setSize(20);
$objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setBold(true);
$maxColumn = count($data[0]);
//此处循环解决多条数据导出失败
for ($j = 0; $j < $maxColumn; $j++) {
for ($i = 0; $i < $head_num - 1; $i++) {
$objPHPExcel->getActiveSheet()->getStyle($j . '2')->getFont()->setName("Candara");
$objPHPExcel->getActiveSheet()->getStyle($j . '2')->getFont()->setSize(12);
$objPHPExcel->getActiveSheet()->getStyle($j . '2')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_BLACK);
$objPHPExcel->getActiveSheet()->getStyle($j . '2')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle($j . '2')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle($j . '2')->getFont()->setBold(true);
}
}
$objPHPExcel->getActiveSheet()->setTitle($sheetname);
$objPHPExcel->setActiveSheetIndex(0);
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="' . $savefile . '.xls"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); //Excel5 Excel2007
$objWriter->save('php://output');
}
//第一个参数是导出数据(二维数组),第二个参数是表名称。