从Excel导入商品到数据库
//引入相关PHPExcel处理类
require_once 'Classes/PHPExcel.php';
require_once 'Classes/PHPExcel/IOFactory.php';
require_once 'Classes/PHPExcel/Reader/Excel5.php';
$file_url=$_POST['file'];//获取文件路径这个必须是能够访问文件的路径
//下面那个Excel5和Excel7两种格式,请根据你的Excel的版本选择
$objReader=PHPExcel_IOFactory::createReader('Excel5');//use excel2007 for 2007 format
$objPHPExcel=$objReader->load($file_url);//$file_url即Excel文件的路径
$sheet=$objPHPExcel->getSheet(0);//获取第一个工作表
$highestRow=$sheet->getHighestRow();//取得总行数
$highestColumn=$sheet->getHighestColumn(); //取得总列数
//循环读取excel文件,读取一条,插入一条
$highestColumn++;
for($j=2;$j<=$highestRow;$j++){//从第一行开始读取数据
$str='';
for($k='A';$k!=$highestColumn;$k++){
//从A列读取数据
//这种方法简单,但有不妥,以'\\'合并为数组,再分割\\为字段值插入到数据库,实测在excel中,如果某单元格的值包含了\\导入的数据会为空
$str.=$objPHPExcel->getActiveSheet()->getCell("$k$j")->getValue().'\\';//读取单元格
}
//explode:函数把字符串分割为数组。根据自己的需求进行修改!
$strs=explode("\\",$str);
if($strs[0]!=''){
//这下面是SQL插入的语句,必须要根据你要插入的表来写
$sql="INSERT INTO `".$GLOBALS['G_DY']['db']['prefix']."article`(`title`,`tid`,`addtime`,`orders`) VALUES (
'{$strs[0]}',
'{$strs[1]}',
'{$strs[2]}',
'{$strs[3]}'
)";
syDB('article')->findSql($sql);//这里执行的是插入数据库操作
}
}
unlink($file_url); //删除上传的Excel文件将表中的数据导入到Excel中
//引入相关PHPExcel处理类
require_once 'Classes/PHPExcel.php';
$excel = new PHPExcel();
//Excel表格式--根据你要到处的字段来定
$letter = array('A','B','C','D','E','F','G','H','I');
//表头数组
$tableheader = array('ID','标题','缩略图','点击量','简介','关键词','是否审核','发布时间','内容');
//填充表头信息
for($i = 0;$i < count($tableheader);$i++) {
$excel->getActiveSheet()->setCellValue("$letter[$i]1","$tableheader[$i]");
}
//查询数据
$sql=" select id,title,litpic,hits,description,keywords,isshow,addtime,body from article a left join article_field b on(a.id=b.aid) ';
$data=syDB('article')->findSql($sql);//这个是系统的查询方法
//设置默认行宽
$excel->getActiveSheet()->getColumnDimension()->setWidth(30);
//设置单一行宽
$excel->getActiveSheet()->getColumnDimension('A')->setWidth(50);
for ($i = 2;$i <= count($data) + 1;$i++) {
$j = 0;
foreach ($data[$i - 2] as $key=>$value) {
//设置默认行高-除第一行表头
$excel->getActiveSheet()->getRowDimension($i)->setRowHeight(150);
$excel->getActiveSheet()->setCellValue("$letter[$j]$i","$value");
$j++;
}
}
//创建Excel输入对象,这里指定生成Excel5
$write = new PHPExcel_Writer_Excel5($excel);
$excelname='Excel表名';//设置导出的Excel表名
header("Pragma: public");
header("Expires: 0");
header("Cache-Control:must-revalidate, post-check=0, pre-check=0");
header("Content-Type:application/force-download");
header("Content-Type:application/vnd.ms-execl");
header("Content-Type:application/octet-stream");
header("Content-Type:application/download");;
header('Content-Disposition:attachment;filename="'.$excelname.'.xls"');
header("Content-Transfer-Encoding:binary");
$write->save('php://output');注意事项:
银行卡或者手机号时间戳,需要转换成字符串显示
假设变量$a为手机号,录入的时候两边添加\t,如:"\t".$a."\t";
将Excel里面的图片导入到数据库内,要进行处理
$file = $this->frparam('file_data',1);
$filePath = substr($file,1,strlen($file)-1);
if(!file_exists($filePath)){
JsonReturn(['code'=>1,'msg'=>'文件未上传!']);
}
///Public/Home/201909031530.xlsx
//引入PHPExcel类
require_once APP_PATH.'FrPHP/Extend/phpexcel/PHPExcel.php';
require_once APP_PATH.'FrPHP/Extend/phpexcel/PHPExcel/IOFactory.php';
require_once APP_PATH.'FrPHP/Extend/phpexcel/PHPExcel/Reader/Excel2007.php';
$file_url=$filePath;
$objReader=\PHPExcel_IOFactory::createReader('Excel2007');//use excel2007 for 2007 format
$objPHPExcel=$objReader->load($file_url);//$file_url即Excel文件的路径
$sheet=$objPHPExcel->getSheet(0);//获取第一个工作表
$highestRow=$sheet->getHighestRow();//取得总行数
$highestColumn=$sheet->getHighestColumn(); //取得总列数
//$highestColumn = $sheet->getHighestColumn();
$highestColumnIndex = \PHPExcel_Cell::columnIndexFromString($highestColumn); //总列数
$imgData=array();
$imageFilePath=APP_PATH.'Public/Home/excel/';//图片保存目录
$getDrawingCollection = $sheet->getDrawingCollection();
//获取excel中全部的图片文件,将各个单元格中的图片文件上传替换成图片路径
foreach ($sheet->getDrawingCollection() as $key =>$drawing) {
$xy = $drawing->getCoordinates(); //"B2"
$cell = $sheet->getCell($xy);//(2,2)
$path = $imageFilePath; //单元格中图片的保存路径
if ($drawing instanceof \PHPExcel_Worksheet_Drawing) { // 基于 xlsx
$filename = $drawing->getPath(); //文件
$path = $path . $drawing->getIndexedFilename(); //文件路径
copy($filename, $path); //copy(A,B) 函数拷贝文件 A->B。
//$cell->setValue($drawing->getIndexedFilename()); //将图片的单元格值替换为图片路径
$cell->setValue('/Public/Home/excel/'.$drawing->getIndexedFilename()); //将图片的单元格值替换为图片路径
} else if ($drawing instanceof \PHPExcel_Worksheet_MemoryDrawing) { //基于xls
$image = $drawing->getImageResource();
$renderingFunction = $drawing->getRenderingFunction();
switch ($renderingFunction) {
case \PHPExcel_Worksheet_MemoryDrawing::RENDERING_JPEG:
$filename = $drawing->getIndexedFilename();
$path = $path . $drawing->getIndexedFilename();
imagejpeg($image, $path);
break;
case \PHPExcel_Worksheet_MemoryDrawing::RENDERING_GIF:
$filename = $drawing->getIndexedFilename();
$path = $path . $drawing->getIndexedFilename();
imagegif($image, $path);
break;
case \PHPExcel_Worksheet_MemoryDrawing::RENDERING_PNG:
$filename = $drawing->getIndexedFilename();
$path = $path . $drawing->getIndexedFilename();
imagegif($image, $path);
break;
case \PHPExcel_Worksheet_MemoryDrawing::RENDERING_DEFAULT:
$filename = $drawing->getIndexedFilename();
$path = $path . $drawing->getIndexedFilename();
imagegif($image, $path);
break;
}
$cell->setValue($filename); //将图片的单元格值替换为图片路径
}
}
//循环读取excel文件,读取一条,插入一条
$highestColumnIndex++;
for($j=2;$j<=$highestRow;$j++){//从第一行开始读取数据
$strs=[];
// for($k='A';$k<=$highestColumn;$k++){ //从A列读取数据
for($k=0;$k<=$highestColumnIndex;$k++){ //从A列读取数据
//这种方法简单,但有不妥,以'\\'合并为数组,再分割\\为字段值插入到数据库,实测在excel中,如果某单元格的值包含了\\导入的数据会为空
// $str.=$objPHPExcel->getActiveSheet()->getCell("$k$j")->getValue().'\\';//读取单元格
$strs[$k] = $sheet->getCellByColumnAndRow($k, $j)->getValue();
}
//explode:函数把字符串分割为数组。根据自己的需求进行修改!
// $strs=explode("\\",$str);
if($strs[0]!=''){
$w = [];
$w['title'] = trim($strs[0]);
$w['model'] = $strs[5];
$w['danwei'] = $strs[6];
$w['jixing'] = $strs[7];
$w['brand'] = $strs[8];
$w['description'] = $strs[9];
$w['tupian'] = $strs[10];
$w['litpic'] = $strs[11];
$w['num'] = $strs[12];
$w['beizhu'] = $strs[17];
$w['body'] = $strs[18];
$w['beizhu_file'] = $strs[19];
$w['jieguo'] = $strs[20];
$w['addtime'] = time();
$w['userid'] = $this->member['id'];
$w['company'] = $this->member['danwei'];
$w['code'] = strtoupper(date('YmdHis').mt_rand(1000,9999));
M('product')->add($w);
}
}
unlink($file_url); //删除excel文件将数据库中的图片,导入到Excel中:
$sql = str_replace(['delete'],'',$_POST['sql']);
$lists = M('product')->findAll($sql);
if(!$lists){ Error('未找到任何数据!');}
$excelname=date('Y年m月d日-物资仓库数据表',time());
require_once APP_PATH.'FrPHP/Extend/phpexcel/PHPExcel.php';
//require_once APP_PATH.'FrPHP/Extend/phpexcel/PHPExcel/Writer/Excel2007.php';
$excel = new \PHPExcel();
$objDrawing = new \PHPExcel_Worksheet_Drawing();
//Excel表格式--根据你要到处的字段来定
$letter = 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');
//表头数组35
$tableheader = array('ID','二维码','随机码','物资名称','缩略图','是否新件','是否调拨','是否审批','当前状态','一级分类','二级分类','三级分类','规格型号','不含税单价/单位','数量','适用机型','初始厂牌','是否原品牌','用途描述','用途图片','生产日期','有效日期','储存(库-架-层)','调拨物资备注','合同号','供应商','发票编号','税率','合计','所属公司','库管员','采购员','部门主管','添加时间');
//填充表头信息
for($i = 0;$i < count($tableheader);$i++) {
$excel->getActiveSheet()->setCellValue("$letter[$i]1","$tableheader[$i]");
}
//查询数据
$data = [];
$level = M('fenlei')->findAll();
$levels = [];
foreach($level as $k=>$v){
$levels[$v['id']] = $v;
}
foreach ($lists as $k=>$v){
$data[$k]['id'] = $v['id'];
if(!file_exists('./Public/Home/'.$v['code'].'.png')){
$errorCorrectionLevel = "L";
$matrixPointSize = 6;
\QRcode::png($v['code'],'Public/Home/'.$v['code'].'.png', $errorCorrectionLevel, $matrixPointSize, 2);
}
$data[$k]['code_img'] ='/Public/Home/'.$v['code'].'.png';
$data[$k]['addtime'] = date('Y-m-d H:i:s',$v['addtime']);
}
for ($i = 2;$i <= count($data) + 1;$i++) {
$j = 0;
foreach ($data[$i - 2] as $key=>$value) {
//注意需要知道对应图片字段的字母,图片和文字要分开处理
if($letter[$j]!='E' && $letter[$j]!='T' && $letter[$j]!='B' ){
$excel->getActiveSheet()->setCellValue("$letter[$j]$i","$value");
}else{
if(!empty($value) && file_exists('.'.$value)){
$image = '.'.$value;
$objDrawing = new \PHPExcel_Worksheet_Drawing();
$objDrawing->setPath($image);
// 设置图片的宽度
$objDrawing->setHeight(50);
$objDrawing->setWidth(50);
$objDrawing->setCoordinates($letter[$j] . $i);
$objDrawing->setWorksheet($excel->getActiveSheet());
}
}
$excel->getActiveSheet()->getRowDimension($i)->setRowHeight(50);
$j++;
}
}
//创建Excel输入对象
$write = new \PHPExcel_Writer_Excel5($excel);
header("Pragma: public");
header("Expires: 0");
header("Cache-Control:must-revalidate, post-check=0, pre-check=0");
header("Content-Type:application/force-download");
header("Content-Type:application/vnd.ms-execl");
header("Content-Type:application/octet-stream");
header("Content-Type:application/download");;
header('Content-Disposition:attachment;filename="'.$excelname.'.xls"');
header("Content-Transfer-Encoding:binary");
$write->save('php://output');版权声明:本文发布于与老涂一起写代码 内容均来源于互联网 如有侵权联系删除

快来评论,快来抢沙发吧~