php 之 excel导出导入合并
<?php
class Excel extends Controller {
//直属高校
public function __construct() {
parent::Controller();
//初始化读取excel类
@$this->load->library("reader");
$reader = @$this->reader;
$reader->setOutputEncoding('UTF-8');
$this->load->model('LogModel', '', TRUE);
$this->cismarty->assign('base_url', base_url());
}
public function index(){
$result=$this->LogModel->listlog(0);
$this->cismarty->assign('results', $result);
$this->cismarty->display('excel/excel.html');
}
//上传文件1
public function upload1()
{
///home/wwwroot/excel/crs_edu_old/public/admin/system/excel
///home/wwwroot/excel/crs_edu_old/public/admin/system/application/excel/
$config['upload_path'] = APPPATH.'excel/';
if(!file_exists($config['upload_path'] ))
{
mkdir(APPPATH.'excel/',0755);
}
$config['allowed_types'] = 'xls|jpg|png';
$config['encrypt_name']=true;
$config['max_size'] = 31948800;
$this->load->library('upload', $config);
if (!$this->upload->do_upload('file'))
{
echo $this->upload->display_errors();
}
else
{
$file_name=$this->upload->data('file_name');
echo json_encode($file_name);
}
}
//上传文件2
public function upload2()
{
$config['upload_path'] = APPPATH.'excel/';
$config['allowed_types'] = 'xls|jpg|png';
$config['encrypt_name']=true;
$config['max_size'] = 31948800;
$this->load->library('upload', $config);
if (!$this->upload->do_upload('file'))
{
echo $this->upload->display_errors();
}
else
{
$file_name=$this->upload->data('file_name');
echo json_encode($file_name);
}
}
public function getStrpos($str)
{
$strs="";
if(stripos($str,",")>0){
$data_arr=explode(",",$str);
foreach($data_arr as $val){
$strs.=";".$val.";";
}
$strs=trim($strs,";");
return $strs;
}elseif(stripos($str,"、")>0){
$data_arr=explode("、",$str);
foreach($data_arr as $val){
$strs.=";".$val.";";
}
$strs=trim($strs,";");
return $strs;
}elseif(stripos($str,",")>0){
$data_arr=explode(",",$str);
foreach($data_arr as $val){
$strs.=";".$val.";";
}
$strs=trim($strs,";");
return $strs;
}else{
return $str;
}
}
/// 将1的内容合并到2的内容当中从而生成3
public function getExcelContent(){
header("content-type:text/html;charset=utf-8");
$this -> load -> library('Excel/PHPExcel.php');
$this->load->library('Excel/PHPExcel/Reader/PHPExcel_Reader_Excel5.php');
$objReader=new PHPExcel_Reader_Excel5();
$objPHPExcel = new PHPExcel();
$data2=array();
$excel2=APPPATH.'excel/'.$this->input->post('excel2');
//$excel2="/home/wwwroot/excel/crs_edu_old/public/admin/system/excel/zsgxry_2.xls";
$this->reader->read($excel2);
$numRows1 = $this->reader->sheets [0] [numRows];
$numCols1 = $this->reader->sheets [0] [numCols];
$project1 = $this->reader->sheets [0] [cells];
if ($numRows1 > 0 && $numCols1 > 0) {
for($i=2;$i<=$numRows1;$i++){
$data2[$i]['id']=$project1[$i][1];
$data2[$i]['company']=$project1[$i][2];
$data2[$i]['name']=$project1[$i][3];
$data2[$i]['sex']=$project1[$i][4];
$data2[$i]['birthday']=$project1[$i][5];
$data2[$i]['cankao']=$project1[$i][6];
}
}
$excel1=APPPATH.'excel/'.$this->input->post('excel1');
//$excel1="/home/wwwroot/excel/crs_edu_old/public/admin/system/excel/zsgxry_1.xls";
$objPHPExcel = $objReader->load($excel1);
//获取sheet表数目
$sheetCount = $objPHPExcel->getSheetCount();
//默认选中sheet0表
$sheetSelected = 0;
$objPHPExcel->setActiveSheetIndex($sheetSelected);
//获取表格行数
$rowCount = $objPHPExcel->getActiveSheet()->getHighestRow();
//获取表格列数
$columnCount = $objPHPExcel->getActiveSheet()->getHighestColumn();
$dataArr = array();
/** 循环读取每个单元格的数据 */
//行数循环
for ($row = 2; $row <= $rowCount; $row++){
//列数循环 , 列数是以A列开始
for ($column = 'A'; $column < $columnCount; $column++) {
//目前出现 字符, , 、
//这一步是替换和上面的那个函数可以合并成一个
//第一出现的位置不区分大小写 , 职位分割
if(stripos($objPHPExcel->getActiveSheet()->getCell("E".$row)->getValue(),",")>0){
// $data_arr=explode(",",$objPHPExcel->getActiveSheet()->getCell("E".$row)->getValue());
// foreach($data_arr as $val){
// $dataArr[$row]["E"].=$val.";";
// }
// $dataArr[$row]["E"]=rtrim($dataArr[$row]["E"],";");
$str=$objPHPExcel->getActiveSheet()->getCell("E".$row)->getValue();
$dataArr[$row]["E"]=str_replace(",",'、',$str);
//第一出现的位置不区分大小写 、
}elseif(stripos($objPHPExcel->getActiveSheet()->getCell("E".$row)->getValue(),"、")){
// $data_arr1=explode("、",$objPHPExcel->getActiveSheet()->getCell("E".$row)->getValue());
// foreach($data_arr1 as $val){
// $dataArr[$row]["E"].=$val.";";
// }
// $dataArr[$row]["E"]=rtrim($dataArr[$row]["E"],";");
$str=$objPHPExcel->getActiveSheet()->getCell("E".$row)->getValue();
$dataArr[$row]["E"]=str_replace("、",'、',$str);
}elseif(stripos($objPHPExcel->getActiveSheet()->getCell("E".$row)->getValue(),",")){
// $data_arr1=explode("、",$objPHPExcel->getActiveSheet()->getCell("E".$row)->getValue());
// foreach($data_arr1 as $val){
// $dataArr[$row]["E"].=$val.";";
// }
// $dataArr[$row]["E"]=rtrim($dataArr[$row]["E"],";");
$str=$objPHPExcel->getActiveSheet()->getCell("E".$row)->getValue();
$dataArr[$row]["E"]=str_replace(",",'、',$str);
}else{
$dataArr[$row]["E"] = $objPHPExcel->getActiveSheet()->getCell("E".$row)->getValue();
}
switch ($dataArr[$row]["E"])
{
case '党委副书记、纪委书记':
$dataArr[$row]["E"] ='党委副书记';
break;
case '党委副书记、副校长':
$dataArr[$row]["E"] ='党委副书记';
break;
case '校长、党委副书记':
$dataArr[$row]["E"] ='校长';
break;
case '院长、党委书记':
$dataArr[$row]["E"] ='党委书记';
break;
case '党委书记、院长':
$dataArr[$row]["E"] ='党委书记';
break;
case '副院长':
$dataArr[$row]["E"] ='副校长';
break;
case '党委书记、校长':
$dataArr[$row]["E"] ='党委书记';
break;
case '校长、党委书记':
$dataArr[$row]["E"] ='党委书记';
break;
case '院长、党委副书记':
$dataArr[$row]["E"] ='校长';
break;
case '常务副校长(正局级)':
$dataArr[$row]["E"] ='常务副校长';
break;
case '常务副校长(正厅级)':
$dataArr[$row]["E"] ='常务副校';
break;
case '党委常务副书记(正局级)':
$dataArr[$row]["E"] ='党委常务副书记';
break;
case '党委常务副书记(正厅级)':
$dataArr[$row]["E"] ='党委常务副书记';
break;
case '党委常务副书记(正局级)、副校长':
$dataArr[$row]["E"] ='党委常务副书记';
break;
case '党委常务副书记、纪委书记':
$dataArr[$row]["E"] ='党委常务副书记';
break;
case '党委副书记、副校长':
$dataArr[$row]["E"] ='党委副书记';
break;
case '党委副书记、纪委书记':
$dataArr[$row]["E"] ='党委副书记';
break;
case '校长、党委副书记':
$dataArr[$row]["E"] ='校长';
break;
default:
$dataArr[$row]["E"] = $this->getStrpos($objPHPExcel->getActiveSheet()->getCell("E".$row)->getValue());
}
$dataArr[$row]["company"] = $objPHPExcel->getActiveSheet()->getCell("A".$row)->getValue();
$dataArr[$row]["name"] = $objPHPExcel->getActiveSheet()->getCell("B".$row)->getValue();
$dataArr[$row]["sex"] = $objPHPExcel->getActiveSheet()->getCell("C".$row)->getValue();
$dataArr[$row]["birthday"] = $objPHPExcel->getActiveSheet()->getCell("D".$row)->getValue();
$dataArr[$row]["F"] = $objPHPExcel->getActiveSheet()->getCell("F".$row)->getValue();
}
}
$data_arr=$dataArr;
//var_dump($dataArr);
/**
* 两个数组进行对比查询
* 将1的内容 放到2中
* excel1为数组 arr1
* excel2为数组 arr2
*
* (复杂度太高 需进行 闭包改进) n*n
*
* 将数组进行比较 因为多维数组 key不同不可进行key对比
*
*/
if(count($data_arr)==count($data2)){
foreach($data_arr as $key=>$val){
unset($data_arr[$key]['E']);
unset($data_arr[$key]['F']);
foreach($val as $kev1=>$val1){
if($data_arr[$key][$kev1]!==$data2[$key][$kev1]){
echo "excel1文件:你获取的数据不一样在".$data_arr[$key][$kev1]."行数在{$key},{$kev1}";
echo "excel2文件:你获取的数据不一样在".$data2[$key][$kev1]."行数在{$key},{$kev1}";
exit();
}
}
}
}else{
echo "数据不一";
exit;
}
$objPHPExcel -> getDefaultStyle() -> getFont() -> setSize(10);
$objPHPExcel->getActiveSheet()->getStyle('C')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_TEXT);
$objPHPExcel -> setActiveSheetIndex(0)
-> setCellValue('A1', '干部id(不可改)')
-> setCellValue('B1', '单位(不可改)')
-> setCellValue('C1', '姓名(不可改)')
-> setCellValue('D1', '性别(不可改)')
-> setCellValue('E1', '生日(不可改)')
-> setCellValue('F1', '职务参考(任免审批表填写职务)')
-> setCellValue('G1', '职务统计(可选值:党委书记;校长;党委常务副书记;党委副书记;常务副校长;副校长;总会计师)')
-> setCellValue('H1', '排序(填写自然数字)');
foreach($data2 as $i=>$val){
$objPHPExcel -> getActiveSheet()-> setCellValue('A'.$i, $data2[$i]['id']);
$objPHPExcel -> getActiveSheet()-> setCellValue('B'.$i, $data2[$i]['company']);
$objPHPExcel -> getActiveSheet()-> setCellValue('C'.$i, $data2[$i]['name']);
$objPHPExcel -> getActiveSheet()-> setCellValue('D'.$i, $data2[$i]['sex']);
$objPHPExcel -> getActiveSheet()-> setCellValue('E'.$i, $data2[$i]['birthday']);
$objPHPExcel -> getActiveSheet()-> setCellValue('F'.$i, $data2[$i]['cankao']);
$objPHPExcel -> getActiveSheet()-> setCellValue('G'.$i, $dataArr[$i]['E']);
$objPHPExcel -> getActiveSheet()-> setCellValue('H'.$i, $dataArr[$i]['F']);
}
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename=直属高校.xls');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
$data['excel1']=basename($excel1);
$data['excel2']=basename($excel2);
$data['type']=0;
$data['excel_time']=date('Y-m-d H:i:s',$this->input->server('REQUEST_TIME'));
$data['client_ip']=$this->input->ip_address();
$this->LogModel->addLog($data);
}
}
?>
代码冗余比较严重 测试版本
php 之 excel导出导入合并的更多相关文章
- 使用NPOI组件完成的Excel导出导入(附源代码,测试通过)
最近遇到一个Excel导入导出的问题,要支持winform和webform,这里我是一个认真严谨的coder,所以决定把这个记录下来!和大家一起分享一下!如果需要的同学可以下载哦! 对于NPOI这个组 ...
- excel导出导入通用方法
/** * 方法说明:批量导出通用方法 * 创建时间:2018年8月24日 *** * @param filePath 文件地址 * @param sheetName 分页名称 * @param ti ...
- C#Excel导出导入
using System; using System.Collections.Generic; using NPOI; using NPOI.HPSF; using NPOI.HSSF; using ...
- java excel导出(表头合并,多行表头)
@RequestMapping(value="orderExcelList2") public void orderExcelList2forJava(Order order,Ht ...
- excel 导出导入
/** * 导出 * @param * @param * @return */ public function exportexcel() { set_time_limit(0); ini_set(' ...
- php做EXCEL数据导出导入开发的一些小问题
前两天刚刚做开发CRM系统项目,在做要做EXCEL导出导入功能,因为以前做.NET开发用的是NPOI,但可是没找到PHP版本的,所以就网搜找了个国外的开源PHPEXCEL , 一开始只是做了简单的导入 ...
- java利用EasyPoi实现Excel导出功能
easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 语言( ...
- 用PHPExcel导出导入Excel
thinkPHP5.0框架 查询数据库调用Excel方法 public function exportlist(){ $orderModel = new OrderModel(); if($start ...
- java 中Excel的导入导出
部分转发原作者https://www.cnblogs.com/qdhxhz/p/8137282.html雨点的名字 的内容 java代码中的导入导出 首先在d盘创建一个xlsx文件,然后再进行一系列 ...
随机推荐
- <stdbool.h>的使用
转载: 1.https://www.cnblogs.com/jediael/archive/2013/02/03/4304259.html 2.https://zhidao.baidu.com/que ...
- c#类(class)
类 类的定义是以关键字class开始的,后面跟类的名称,类的主题包含一个花括号里,下面是类定义的一般格式. <access specifier> class class_name { // ...
- ansible-playbook流程控制-when条件判断
1. ansible-playbook添加判断 when相当于shell脚本里的if 判断,when语句就是用来实现这个功能的,它是一个jinja2的语法,但是不需要双大括号,用法很简单 1 ...
- 8.Android-简单的登录案例编写
本章来学习登录案例,由于还未学习自定义控件外观,所以ui界面先用最简单的,并保存登录账号密码到data/data/包名/files下 1.学习之前需要掌握的Context类(通过Context来往AP ...
- 多测师_测试理轮_002(v模型和H模型)
为什么要测试?1.软件非正常运行或自身缺陷会引发问题2.代码和文档是人写的,难免会出错3.环境原因影响软件(内存不足,存储,数据库溢出等)4.软件测试活动是保证软件质量的关键之一 什么是测试?软件行业 ...
- day32 Pyhton 异常处理
一.内容回顾 反射的另外两个内置函数 setattr delattr a.b=c 与 setattr(a,'b',c)相对 del a.b 与 delattr(a,'b') 两个内置函数 A,B(A) ...
- Elasticsearch索引的操作,利用kibana 创建/删除一个es的索引及mapping映射
索引的创建及删除 1. 通过索引一篇文档创建了一个新的索引 .这个索引采用的是默认的配置,新的字段通过动态映射的方式被添加到类型映射. 利用Kibana提供的DevTools来执行命令,要创建一个索引 ...
- spring boot:使用多个线程池实现实现任务的线程池隔离(spring boot 2.3.2)
一,为什么要使用多个线程池? 使用多个线程池,把相同的任务放到同一个线程池中,可以起到隔离的作用,避免有线程出错时影响到其他线程池,例如只有一个线程池时,有两种任务,下单,处理图片,如果线程池被处理图 ...
- go panic
panic 抛出异常 通过recover捕获 类似 php python等语言的try catch package mainimport ( "fmt" "errors& ...
- php生成器 yield 转
一.yield介绍 文档介绍说道:生成器函数的核心是yield关键字.它最简单的调用形式看起来像一个return申明,不同之处在于普通return会返回值并终止函数的执行,而yield会返回一个值给 ...