1 .下载phpexcel 下载地址:https://github.com/PHPOffice/PHPExcel/archive/1.8.zip.
2 .引入 PHPExcel.php文件。
3.下面就将excel数据导入到mysql数据库和把数据从mysql导出到excel两种方式来介绍。
3.1 将数据导入到mysql中。
//第一种导入方式,该方式要求导入的excel表格表头列数要和对应数据表字段一致
$dir=dirname(__FILE__); //获取当前路径
$filename=$dir.'/excel_upload/'.$res; //excle表路径
$fileType=PHPExcel_IOFactory::identify($filename);//自动获取文件的类型提供给phpexcel用
$objReader=PHPExcel_IOFactory::createReader($fileType);//获取文件读取操作对象
$objReader->setLoadSheetsOnly($sheetName);//只加载指定的sheet
$objPHPExcel=$objReader->load($filename);//加载文件
//获取表格的当前sheet中B2里面的值开始
$objWorksheet = $objPHPExcel->getActiveSheet(); //获取导入表格的当前sheet
$resl3=trim($objWorksheet->getCell('B2')->getValue()); //获取指定单元格的值,请去除前后空格。
//获取表格的当前sheet中B2里面的值结束
//循环读取数据开始
foreach($objPHPExcel->getWorksheetIterator() as $sheet){//循环取sheet
foreach($sheet->getRowIterator() as $row){//逐行处理
if($row->getRowIndex()<2){
continue;
}
$arr=[];
$index=1;
$arr2=[];
foreach($row->getCellIterator() as $cell){//逐列读取
$data=$cell->getValue();//获取单元格数据
// echo $data."";
//if开始
if($index<18){
$index=$index+1;
// echo $index;
// echo "
";
//获取项目名称开始
$arr2[]=$data;
$x_no_type2=gettype($arr2['0']);
if($x_no_type2=gettype($arr2['0'])=='string'){
$row->getRowIndex(); //获取当前行数
if($row->getRowIndex()==2){
$zaname=$arr2['0'];
}
}
//获取项目名称结束
// $arr["zs_name"]='测试测试';
$arr["zs_name"]=$zaname;
$arr[$arrzd[$index]]=$data; //读每一行的每一列数据根据需要放入数组
}
//if结束
}
$x_no_type=gettype($arr['x_no']);
if($x_no_type=gettype($arr['x_no'])=='double'){
$db->insert('butt',$arr); //把数据逐行写入数据表,写入语法根据数据库类来进行写入
}
}
echo "";
}
//循环取数据结束
//第二种导入方式,该方式要求只要excel中表头的名称在对应数据表里面包含的有,就能导入,灵活性和适用性更好
$dir=dirname(__FILE__); //当前路径
if (!empty($_POST)) {
// foreach($files as $v) {
// if($v=="." || $v==".."){continue;}
$xy_num=trim($_POST["xy_num"]);
$jiedao=trim($_POST["jiedao"]);
$attribute=trim($_POST["attribute"]);
$roomtime=trim($_POST["roomtime"]);
//文件上传开始
if ($_FILES){
$file = $_FILES['uploadFile'];
vendor\FileUploader::setTypes(array('image/jpg', 'image/jpeg', 'image/pjpeg', 'image/png'));
$res = vendor\FileUploader::uploadOne($file, 'excel_upload');
$filename=$dir.'/excel_upload/'.$res;
// $filename = $realpath . '/' . $v;
// var_dump($filename);exit;
$fileType=PHPExcel_IOFactory::identify($filename);//自动获取文件的类型提供给phpexcel用
$objReader=PHPExcel_IOFactory::createReader($fileType);//获取文件读取操作对象
$objReader->setLoadSheetsOnly($sheetName);//只加载指定的sheet
$objPHPExcel=$objReader->load($filename);//加载文件
//获取表格的当前sheet中B2里面的值开始
$objWorksheet = $objPHPExcel->getActiveSheet();
// $resl3=trim($objWorksheet->getCell('B2')->getValue());
$rows = array();
foreach ($objWorksheet->getRowIterator() as $key=>$row) { //遍历行
// if(count($rows) > 1) continue;
$cellIterator = $row->getCellIterator(); //得到所有列
$cellIterator->setIterateOnlyExistingCells( false); // Loop all cells, even if it is not set
foreach ($cellIterator as $cell) { //遍历列
if (!is_null($cell)) { //如果列不给空就得到它的坐标和计算的值
$rows[$key][] = $cell->getCalculatedValue();
}
}
// 如果1行最多只有1列,删除该行
$cols = 0;
foreach($rows[$key] as $vv) {
if (!empty($vv)) $cols++;
}
if ($cols <= 1) unset($rows[$key]);
}
foreach ($rows[2] as $kk => $vv) {
$rows[2][$kk] = myTrim($vv);
}
// print_r($rows);exit;
// if($resl3!="栋号"){
// alert("上传表格格式不对,请联系管理员","back");
// }
//获取表格的当前sheet中B2里面的值结束
//获取数据表字段开始
$sql = "SHOW FULL COLUMNS FROM levy" ;
$zdname = $db->fetchAll($sql);
foreach($zdname as $row){
$arrzd[$row["Comment"]] = $row["Field"];
}
// 人工修正字段
$arrzd['楼栋'] = 'room_dong';
$arrzd['楼层'] = 'room_ceng';
$arrzd['单元'] = 'room_dan';
//获取数据表字段结束
$titlenme=$objPHPExcel->getActiveSheet("A1:S1")->getCeLL()->getvalue(); //获取表格标题
// print_r($arrzd);exit;
date_default_timezone_set("Asia/Shanghai");
$sql = "select * from levy where lp_name='$titlenme'";
$res = $db->fetchAll($sql);
if($res){
alert('提交失败,您已经提交过了此文件','back');
}
// 数据入库
$ordertime=time();
$rowTitles = array_shift($rows);
foreach($rows as $row){
$arr = array();
$arr["lp_name"]=$titlenme;
$arr["addtime"]=$ordertime;
foreach($row as $ck => $col){
$rowTitle = $rowTitles[$ck];
if (isset($arrzd[$rowTitle])) {
$fieldName = $arrzd[$rowTitle];
$arr[$fieldName] = trim($col,'/-');
}
}
// 统一提交数据开始
$arr["xy_num"]=$xy_num;
$arr["jiedao"]=$jiedao;
$arr["attribute"]=$attribute;
$arr["roomtime"]=$roomtime;
//对excel表格中时间格式值进行处理开始 时间格式2021/9/16
if($arr['allot_time']!=null){
$res1=PHPExcel_Shared_Date::ExcelToPHP($arr['allot_time']);
$arr['allot_time']=date('Y-m-d', $res1);
}
if($arr['back_time']!=null){
$res2=PHPExcel_Shared_Date::ExcelToPHP($arr['back_time']);
$arr['back_time']=date('Y-m-d', $res2);
}
if($arr['roomtime']!=null){
$res3=PHPExcel_Shared_Date::ExcelToPHP($arr['roomtime']);
$arr['roomtime']=date('Y-m-d', $res3);
}
//对excel表格中时间格式值进行处理结束
// print_r($row);exit;
// 序号如果为0跳转到下一行
if (empty($arr['lp_no']) || !is_numeric($arr['lp_no'])) continue;
// 如果没有数据就删除该字段
foreach($arr as $kk => $vv) {
if (empty($vv)) unset($arr[$kk]);
}
// print_r($arr);exit;
$db->insert('levy',$arr);
}
alert('文件导入成功','jump','test.php');
} else{
echo "没有导入表格";
}
3.2从数据库读取数据写入excel表。
//数据导出开始
$objPHPExcel=new PHPExcel();//实例化PHPExcel类, 等同于在桌面上新建一个excel
$objActSheet=$objPHPExcel->getActiveSheet();
$objActSheet->getDefaultStyle()->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER)->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);//设置excel文件默认水平垂直方向居中
$objActSheet->getStyle("A1:P1")->getFont()->setName("宋体")->setSize(16)->setBold(true);//设置第二行字体大小
$objActSheet->getStyle("A2:P2")->getFont()->setName("宋体")->setSize(11);//设置第三号行字体大小
$objActSheet->getStyle('A2:P2')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT); //只设置第二行垂直居中
$objActSheet->getRowDimension(1)->setRowHeight(50); //设置第1行的行高
$objActSheet->getRowDimension(2)->setRowHeight(25);设置第2行的行高
$objActSheet->getRowDimension(3)->setRowHeight(34.5);设置第3行的行高
$objActSheet->getColumnDimension('F')->setWidth(30);设置第F列的列宽
$letter = explode(",","A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P"); //根据需要设置相应列的字母
//查询数据表所有的字段和字段下面所有的中文注释并放入数组开始
$sql = "SHOW FULL COLUMNS FROM table" ;
$zdname = $db->fetchAll($sql); //查询方法
foreach($zdname as $row){
$arrzd[]=$row["Field"];
$arrzdname[]=$row["Comment"];
}
unset($arrzdname[0]);
unset($arrzdname[1]);
unset($arrzdname[18]);
$arrHeader=array_values($arrzdname);
//获取数据表字段结束
//查询数据表所有的字段和字段下面所有的中文注释并放入数组结束
$lenth = count($arrHeader);
for ($i = 0; $i < $lenth; $i++) {
// echo $letter[$i]."1:".$arrHeader[$i];
// echo "
";
$objActSheet->setCellValue("$letter[$i]3","$arrHeader[$i]");
};
// $sql = "select * from butt $str order by x_no asc";
$sql = "select * from butt x_no order by x_no asc";
$xlsData = $db->fetchAll($sql);
$num = count($xlsData);
$objActSheet->setCellValue('A1',"表头"); //填充表头信息
$objActSheet->setCellValue('A2',$xlsData[0]["zs_name"]); //填充表头信息
$objActSheet->mergeCells("A1:P1");//合并单元格
$objActSheet->mergeCells("A2:P2");//合并单元格
//填充表格信息
foreach ($xlsData as $k => $v) {
$k+= 4;
$k2=$k-1;
$index=1;
//表格内容
$gradeBorder=getBorderStyle("000000");//获取年级边框样式代码
for($i=65;$i<81;$i++){
$index=$index+1;
// echo strtoupper(chr($i)).' ';//输出大写字母
$aznum=strtoupper(chr($i));
$exvalue=$v[$arrzd[$index]];
$objActSheet->setCellValue($aznum.$k, $exvalue);
$objActSheet->getStyle($aznum."3:".$aznum."3")->applyFromArray($gradeBorder); //给表格加边框
$objActSheet->getStyle($aznum.$k.":".$aznum.$k)->applyFromArray($gradeBorder); //给表格加边框
$objActSheet->getColumnDimension($aznum)->setWidth(20); //设置列宽
}
}
$objWriter=PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel5');//生成excel文件
browser_export('Excel5',$xlsData[0]["zs_name"].'.xls');//输出到浏览器
$objWriter->save("php://output");
//数据导出结束