一、导入(这其中show_msg和logFile是自定义函数)

/*** 方法名 :   excelToTable*   作用  :   【私有】将excel数据导入数据表中* @param1    :    file 用户上传的文件信息* @param2    :    tableid 用来区别是哪张表,1-statistics_rawdata_pct,2-statistics_rawdata_apply,3-statistics_rawdata_auth,4-statistics_rawdata_valid*  @param3    :    month_number 导入的数据属于哪一期的,比如201510*   @param4    :    table_head 用来判断excel表格是否有表头,默认有* @date  :   2015/11/26* @author    :   dingling*/  private function excelToTable($file,$tableid,$month_number,$table_head=1){if(!empty($file['name'])){$file_types = explode ( ".", $file['name'] );$excel_type = array('xls','csv','xlsx');//判断是不是excel文件if (!in_array(strtolower(end($file_types)),$excel_type)){$this->show_msg("不是Excel文件,重新上传","/search/patentStatistics/uploadRawdata");}//设置上传路径$savePath = _WWW_ . 'www/tmp/';//以时间来命名上传的文件$str = date ( 'Ymdhis' );$file_name = $str.".".end($file_types);//是否上传成功$tmp_file = $file['tmp_name'];if (!copy($tmp_file,$savePath.$file_name)){$this->show_msg("上传失败","/search/patentStatistics/uploadRawdata");}if($tableid=="1"){$rawdata_obj = $this->rawdata_pctmodel;    }elseif($tableid=="2"){$rawdata_obj = $this->rawdata_applymodel;    }elseif($tableid=="3"){$rawdata_obj = $this->rawdata_authmodel; }elseif($tableid=="4"){$rawdata_obj = $this->rawdata_validmodel;}else{$this->show_msg("您要导入的数据表不存在!","/search/patentStatistics/uploadRawdata");}if($rawdata_obj)$fields = $rawdata_obj->returnFields();else$this->show_msg("未能指定明确的表!","/search/patentStatistics/uploadRawdata");//定义导入失败记录的文档$logfile = $savePath.$str.'.txt';//读取excel,存成数组,该数组的key是从1开始$res = $this->excelToArray($savePath.$file_name,end($file_types));//echo 12321321;exit;//如果有表头,则过滤掉第一行if($table_head)unset($res[1]);//循环写入,不一次性写入,防止有错误的记录;错误记录会记录下第一个字段到txt文档中去foreach($res as $k =>$v){foreach($fields as $key=>$val){if($v[$key]===null){$v[$key] = 'null';}$data[$val] = $v[$key];}//该字段比较特殊,必须导入表中都有该字段$data['month_number'] = $month_number;$result = $rawdata_obj->addSave($data);unset($data);if(!$result){$this ->logFile($logfile,$v[0]);}}if(file_get_contents($logfile))return $logfile;elsereturn true;}}/***   方法名 :   excelToArray*   作用  :   【私有】将excel数据转换成数组*  @param1    :    filename excel文件名*  @param2    :    filetype excel格式(xls、xlsx、csv)*   @param3    :    encode 编码格式,默认utf8*  @return    :    返回2维数组,最小的key为1* @date  :   2015/11/26* @author    :   dingling*/  private function excelToArray($filename,$filetype,$encode='utf-8'){if(strtolower($filetype)=='xls'){$objReader = PHPExcel_IOFactory::createReader('Excel5');}elseif(strtolower($filetype)=='xlsx'){$objReader = PHPExcel_IOFactory::createReader('Excel2007');}elseif(strtolower($filetype)=='csv'){$objReader = PHPExcel_IOFactory::createReader('CSV');}$objReader->setReadDataOnly(true);$objPHPExcel = $objReader->load($filename);$objWorksheet = $objPHPExcel->getActiveSheet();$highestRow = $objWorksheet->getHighestRow();$highestColumn = $objWorksheet->getHighestColumn();$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);$excelData = array();for ($row = 1; $row <= $highestRow; $row++) {for ($col = 0; $col < $highestColumnIndex; $col++) {$excelData[$row][] =(string)$objWorksheet->getCellByColumnAndRow($col, $row)->getValue();}}return $excelData;}

二、导出(该功能支持页面上html中table表格直接导出)

1、前端代码

<!doctype html>
<html>
<head>
<title>专利数据检索平台2015年08月</title>
<meta charset="utf-8" />
<meta name="keywords" content="北京市知识产权信息服务平台" />
<meta name="description" content="专利数据检索平台 北京市知识产权信息服务平台" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta property="wb:webmaster" content="3c67ef6a26cfe34e" />
<link rel="apple-touch-icon-precomposed" href="" />
<meta name="baidu-site-verification" content="5fNm7bQabR" />
<meta http-equiv="X-UA-Compatible" content="IE=8" /><script type="text/javascript" src="/js/placeholder.js"></script>
<script type="text/javascript" src="/js/jquery-1.8.3.min.js"></script>
<script type="text/javascript" src="/js/admin.js"></script><link href="/js/dtree/dtree.css" rel="stylesheet" type="text/css"><script type="text/javascript" src="/js/dtree/dtree.js"></script><link href="/css/index.css" rel="stylesheet" type="text/css"><link href="/css/navcss.css" rel="stylesheet" type="text/css"><link href="/css/govnet/self.css" rel="stylesheet" type="text/css"><!-- <link href="/css/index.css" rel="stylesheet" type="text/css">--><link href="/css/common.css" rel="stylesheet" type="text/css"></head>
<body class="body_index" >
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script type="text/javascript" src="/bootstrap/jquery.min.js"></script>
<link href="/bootstrap/css/bootstrap.min.css" rel="stylesheet">
<style>
.body_index {background:none !important;}
#mian{ width:95%; margin:20px auto;}
.table{ margin-top:20px;}
.table thead tr{text-align:center;}
.table th{ font-weight:bold; vertical-align:middle;}
.table td{ vertical-align:middle;}
.table input,.table textarea,.table select{margin-bottom:0px;}
.title h4{ border-bottom:2px solid #01AFD4; padding-bottom:8px;}
.title a{margin-top:-50px;}
.title{padding-bottom:10px;}
.handle_label{float:left;margin-top: 5px;margin-left: 15px; width:100px;text-align:right;}
.nav{width:auto !important;background:none !important;}
.table2{ margin-top:0px !important; margin-bottom:0px !important;}
.hide{display:none;}
</style><style>
.mainlevel DIV {width:1050px;}
#mian{ width:95%; margin:20px auto;}
.table{ margin-top:20px;}
.table thead tr{text-align:center;}
.table th{ font-weight:bold; vertical-align:middle;}
.table td{text-align:center;}
.table input,.table textarea,.table select{margin-bottom:0px;}
.red{color:red;}
</style>
<div id="mian"><span id="export_data" style="float:right;cursor:pointer;">导出</span><table class="table table-bordered"><tr><th colspan='12'><center>2015年08月北京地区各区县专利授权情况</center></th></tr><tr><th rowspan="2"><center>排序</center></th><th rowspan="2"><center>区县</center></th><th rowspan="2"><center>当月累计</center></th><th rowspan="2"><center>发明</center></th><th rowspan="2"><center>实用新型</center></th><th rowspan="2"><center>外观设计</center></th><th colspan="6"><center>三种专利申请中</center></th></tr><tr><th><center>个人</center></th><th><center>职务小计</center></th><th><center>大专院校</center></th><th><center>科研单位</center></th><th><center>企业</center></th><th><center>机关团体</center></th></tr><tr><td><center><b></b></center></td><td><center><b>总计</b></center></td><td>6814</td><td>2088</td><td>3763</td><td>963</td><td>828</td><td>5986</td><td>412</td><td>536</td><td>4920</td><td>118</td></tr><tr><td><center><b>1</b></center></td><td><center><b>海淀区</b></center></td><td>2157</td><td>823</td><td>1033</td><td>301</td><td>246</td><td>1911</td><td>264</td><td>337</td><td>1229</td><td>81</td></tr><tr><td><center><b>2</b></center></td><td><center><b>朝阳区</b></center></td><td>1181</td><td>569</td><td>407</td><td>205</td><td>192</td><td>989</td><td>64</td><td>92</td><td>825</td><td>8</td></tr><tr><td><center><b>3</b></center></td><td><center><b>西城区</b></center></td><td>1095</td><td>259</td><td>758</td><td>78</td><td>51</td><td>1044</td><td>10</td><td>19</td><td>1001</td><td>14</td></tr><tr><td><center><b>4</b></center></td><td><center><b>昌平区</b></center></td><td>416</td><td>78</td><td>225</td><td>113</td><td>55</td><td>361</td><td>34</td><td>5</td><td>318</td><td>4</td></tr><tr><td><center><b>5</b></center></td><td><center><b>东城区</b></center></td><td>393</td><td>100</td><td>262</td><td>31</td><td>37</td><td>356</td><td>0</td><td>9</td><td>340</td><td>7</td></tr><tr><td><center><b>6</b></center></td><td><center><b>丰台区</b></center></td><td>388</td><td>84</td><td>264</td><td>40</td><td>99</td><td>289</td><td>16</td><td>62</td><td>209</td><td>2</td></tr><tr><td><center><b>7</b></center></td><td><center><b>大兴区</b></center></td><td>387</td><td>84</td><td>254</td><td>49</td><td>55</td><td>332</td><td>16</td><td>1</td><td>314</td><td>1</td></tr><tr><td><center><b>8</b></center></td><td><center><b>顺义区</b></center></td><td>304</td><td>21</td><td>228</td><td>55</td><td>19</td><td>285</td><td>0</td><td>0</td><td>285</td><td>0</td></tr><tr><td><center><b>9</b></center></td><td><center><b>通州区</b></center></td><td>164</td><td>18</td><td>109</td><td>37</td><td>29</td><td>135</td><td>6</td><td>2</td><td>127</td><td>0</td></tr><tr><td><center><b>10</b></center></td><td><center><b>石景山区</b></center></td><td>147</td><td>33</td><td>82</td><td>32</td><td>10</td><td>137</td><td>0</td><td>8</td><td>128</td><td>1</td></tr><tr><td><center><b>11</b></center></td><td><center><b>房山区</b></center></td><td>66</td><td>7</td><td>52</td><td>7</td><td>14</td><td>52</td><td>2</td><td>1</td><td>49</td><td>0</td></tr><tr><td><center><b>12</b></center></td><td><center><b>怀柔区</b></center></td><td>58</td><td>7</td><td>44</td><td>7</td><td>9</td><td>49</td><td>0</td><td>0</td><td>49</td><td>0</td></tr><tr><td><center><b>13</b></center></td><td><center><b>密云区</b></center></td><td>23</td><td>1</td><td>18</td><td>4</td><td>6</td><td>17</td><td>0</td><td>0</td><td>17</td><td>0</td></tr><tr><td><center><b>14</b></center></td><td><center><b>平谷区</b></center></td><td>21</td><td>1</td><td>17</td><td>3</td><td>2</td><td>19</td><td>0</td><td>0</td><td>19</td><td>0</td></tr><tr><td><center><b>15</b></center></td><td><center><b>门头沟区</b></center></td><td>10</td><td>2</td><td>7</td><td>1</td><td>4</td><td>6</td><td>0</td><td>0</td><td>6</td><td>0</td></tr><tr><td><center><b>16</b></center></td><td><center><b>延庆区</b></center></td><td>3</td><td>0</td><td>3</td><td>0</td><td>0</td><td>3</td><td>0</td><td>0</td><td>3</td><td>0</td></tr><tr><td><center><b>17</b></center></td><td><center><b>其他</b></center></td><td>1</td><td>1</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td><td>0</td><td>1</td><td>0</td></tr><tr><td class="red"><center><b>18</b></center></td><td class="red"><center><b>北京经济技术开发区</b></center></td><td class="red">191</td><td class="red">67</td><td class="red">112</td><td class="red">12</td><td class="red">14</td><td class="red">177</td><td class="red">0</td><td class="red">1</td><td class="red">176</td><td class="red">0</td></tr><tr><td colspan='12'><span style="text-align:right;">注:开发区数据不计算在合计总数中<span></td></tr></table>
</div><script>
window.οnlοad=function(){$("#export_data").click(function(){//获取标题var title = $(".table").find("tr").eq(0).find('th').html();//获取总行数var line_num = $(".table tr").length;//获取最大列数var max_col_num = $(".table").find("tr").eq(0).find('th').attr('colspan');//获取各行列数 数组col_num_arr 字符串col_num_strvar col_num_arr = new Array();//获取各行td或者th的个数var total_td_num = 0;for(var i=0;i<line_num;i++){col_num_arr[i] = $(".table").find("tr").eq(i).find('td').length;if(col_num_arr[i]=='')col_num_arr[i] = $(".table").find("tr").eq(i).find('th').length;total_td_num = total_td_num + col_num_arr[i]; }var col_num_str = col_num_arr.join(',');//alert(col_num_str);//获取各行th的个数var th_col_num_arr = [];for(var i=0;i<line_num;i++){var j = $(".table").find("tr").eq(i).find('th').length;if(j != 0)th_col_num_arr[i] = j; }var th_col_num_str = th_col_num_arr.join(',');//alert(th_col_num_str);//获取所有th值var th_data_arr = [];var th_num = $(".table").find('th').length;for(var i=0;i<th_num;i++){var  val =  $(".table").find('th').eq(i).html();if(typeof(val)!='undefined'&&typeof(val)!='')th_data_arr[i] = val;}var th_data_str = th_data_arr.join('@@@');//alert(th_data_arr[0]);alert(th_data_str);//获取所有td值var td_data_arr = [];var td_num = $(".table").find('td').length;for(var i=0;i<td_num;i++){var  val =  $(".table").find('td').eq(i).html();if(typeof(val)!='undefined')td_data_arr[i] = val;}var td_data_str = td_data_arr.join('@@@');$.ajax({url:"/search/patentStatistics/exportData",type:"POST",data:{title:title,max_col_num:max_col_num,th_col_num_str:th_col_num_str,th_data_str:th_data_str,td_data_str:td_data_str},dataType:"json",success:function(data){//console.log(data.href);window.open(data.href);}})});
}
</script>
<script src="/bootstrap/js/bootstrap.min.js"></script>
</body>
</html></body>
</html>

2、后端代码

/*** 方法名 :   exportData* 作用  :   导出数据*   @date  2015/03/26* @author    dingling*   @return excel文件路径*/    public function exportDataAction(){$title = strip_tags($_POST['title']);//excel第一行标题$max_col_num = $_POST['max_col_num'];//最大列数$th_num_arr = explode(',',trim($_POST['th_col_num_str']));//取th各行的列数array_shift($th_num_arr);//删除首行th$head_line = count($th_num_arr);//列标题的th行数$th_data = explode('@@@',trim($_POST['th_data_str']));array_shift($th_data);//删除首行th(就是第一行标题)$th_data2 = array();foreach($th_data as $k=>$v){$th_data2[] = strip_tags($v);  }//将一维数组(值)按照另一个数组(个数)拆分成二维数组foreach($th_num_arr as $k=>$v){foreach($th_data2 as $key=>$val){if($key<$v)$temp[] = $val; }$th_data2 = array_values(array_diff($th_data2,$temp));$head[] = $temp;unset($temp);}//补空foreach($head as $k=>$v){if(count($head[$k])<$max_col_num){for($i=0;$i<$max_col_num-count($head[$k]);$i++){$temp[] = '';}if($k==0)$head2[] = array_merge($head[$k],$temp);else$head2[] = array_merge($temp,$head[$k]);}unset($temp);}//获取所有td的值$td_data = explode('@@@',trim($_POST['td_data_str']));$data = array();foreach($td_data as $k=>$v){$data[$k/$max_col_num][$k%$max_col_num] = strip_tags($v);}$path = $this -> getExcel($title,$title,$head2,$data);echo json_encode(array('href'=>$path)) ;}/***   方法名:    getExcel*   作用  :   将数据转换为Excel格式*  @date  2015/03/26* @author    dingling*   @param1    文件名*    @param2    sheet名称*    @param3    字段名(必须二维数组)*    @param4    数据* @return excel文件*/  private function getExcel($fileName,$fileName2,$headArr,$data){//对数据进行检验if(empty($data) || !is_array($data)){die("数据必须为数组");}//检查文件名if(empty($fileName)){exit;}//组装文件名$date = date("Y_m_d",time());$fileName .= "_{$date}.xls";error_reporting(E_ALL);ini_set('display_errors', TRUE);ini_set('display_startup_errors', TRUE);date_default_timezone_set('PRC');if (PHP_SAPI == 'cli')die('只能通过浏览器运行');//创建PHPExcel对象$objPHPExcel = new PHPExcel();$objProps = $objPHPExcel->getProperties();//设置表名称$objPHPExcel->setActiveSheetIndex(0) ->setCellValue('A1', $fileName2);//设置表头for($i=0;$i<count($headArr);$i++){$line_num = 2;$line_num += $i;$key = ord("A");//A--65$key2 = ord("@");//@--64foreach($headArr[$i] as $v){if($key>ord("Z")){$key2 += 1;$key = ord("A");$colum = chr($key2).chr($key);//超过26个字母时才会启用  dingling 20150626}else{if($key2>=ord("A")){$colum = chr($key2).chr($key);}else{$colum = chr($key);}}$objPHPExcel->setActiveSheetIndex(0) ->setCellValue($colum.$line_num,$v);$key += 1;}}$column = count($headArr)+2;$objActSheet = $objPHPExcel->getActiveSheet();foreach($data as $v){ //行写入$span = ord("A");$span2 = ord("@");foreach($headArr[0] as $key=>$val){if($span>ord("Z")){$span2 += 1;$span = ord("A");$j = chr($span2).chr($span);//超过26个字母时才会启用  dingling 20150626}else{if($span2>=ord("A")){$j = chr($span2).chr($span);}else{$j = chr($span);}}$objActSheet->setCellValue($j.$column, strip_tags($v[$key]));$span++;}$column++;}$fileName = iconv("utf-8", "gb2312", $fileName);$objPHPExcel->getActiveSheet()->setTitle($fileName2);// 重命名表$objPHPExcel->setActiveSheetIndex(0);// 设置活动单指数到第一个表,所以Excel打开这是第一个表 ob_end_clean();//清除缓冲区,避免乱码// Redirect output to a client’s web browser (Excel5)header('Content-Type: application/vnd.ms-excel');header("Content-Disposition: attachment;filename=\"$fileName\"");header('Cache-Control: max-age=0');// If you're serving to IE 9, then the following may be neededheader('Cache-Control: max-age=1');// If you're serving to IE over SSL, then the following may be neededheader ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the pastheader ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modifiedheader ('Cache-Control: cache, must-revalidate'); // HTTP/1.1header ('Pragma: public'); // HTTP/1.0$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');//$objWriter->save('php://output'); //文件通过浏览器下载//指定存放路径$savePath = _WWW_ . 'www/tmp/';$file = time().'.xls';$objWriter->save($savePath.$file); //将文件存放到指定目录return '/tmp/'.$file;}

php利用phpexcel插件实现数据的导入和导出(支持csv\xls\xlsx格式和超过26个字段列)相关推荐

  1. PHP利用phpExcel实现Excel数据的导入导出

    phpExcel包的下载地址:http://download.csdn.net/detail/kesixin/9920920 首先先说一下,这段例程是使用在Thinkphp的开发框架上,要是使用在其他 ...

  2. 基于Metronic的Bootstrap开发框架经验总结(7)--数据的导入、导出及附件的查看处理...

    在很多系统模块里面,我们可能都需要进行一定的数据交换处理,也就是数据的导入或者导出操作,这样的批量处理能给系统用户更好的操作体验,也提高了用户录入数据的效率.我在较早时期的EasyUI的Web框架上, ...

  3. R 数据的导入和导出

    2019独角兽企业重金招聘Python工程师标准>>> R 数据的导入和导出 这是从R中导入或导出数据的一个指导手册. 本文档的当前版本为0.01 β.该文档译自 R-2.6.1 文 ...

  4. (转)基于Metronic的Bootstrap开发框架经验总结(7)--数据的导入、导出及附件的查看处理...

    http://www.cnblogs.com/wuhuacong/p/4777720.html 在很多系统模块里面,我们可能都需要进行一定的数据交换处理,也就是数据的导入或者导出操作,这样的批量处理能 ...

  5. 使用PHPExcel实现Excel文件的导入和导出(模板导出)

    在之前有写过一篇文章讲述了使用PHP快速生成excel表格文件并下载,这种方式生成Excel文件,生成速度很快,但是有缺点是: 1.单纯的生成Excel文件,生成的文件没有样式,单元格属性(填充色,宽 ...

  6. matlab将图片导入工作区,matlab数据的导入和导出,以matlab工作区workspace为source和destination...

    MATLAB支持工作区的保存.用户可以将工作区或工作区中的变量以文件的形式保存,以备在需要时再次导入. 保存工作区可以通过菜单进行,也可以通过命令窗口进行. 数据导出 1. 保存整个工作区 选择Fil ...

  7. Java解析xml文件dom4j篇(基于xml配置文件完成Excel数据的导入、导出功能完整实现)

    DOM4J解析XML文件 dom4j是一个Java的XML API,是jdom的升级产品,用来读写XML文件.另外对比其他API读写XML文件,dom4j是一个十分优秀的JavaXML API,具有性 ...

  8. 1.数据的导入与导出

    数据的导入与导出 更多MATLAB数据分析视频请点击,或者在网易云课堂上搜索<MATLAB数据分析与统计> http://study.163.com/course/courseMain.h ...

  9. MySQL基础day03_数据的导入、导出-MySQL 5.6

    MySQL基础day03_数据的导入.导出-MySQL 5.6 注:把数据按照一定格式存放到文件里才能进行数据的导入. 1,数据导入的条件 把文件里的内容保存到数据的表里: 把数据按照一定格式存放文件 ...

最新文章

  1. 除了java还学什么_学好Java编程除了努力还需要具备什么?
  2. 解决Eclipse 启动后总是Building WorkSpace(sleeping)
  3. 《微型计算机2014年》更新至12月下
  4. tomcat无法正常关闭问题分析及解决
  5. Android RecyclerView
  6. 小米10谷歌连携失败_Android 11 喜讯!小米 10 率先尝鲜,官方刷机包发布下载
  7. 用c语言读取和写入文件数据
  8. Windows下安装ab
  9. linux重新安装xrog文件,Linux下重新生成xorg.conf
  10. android 暂停音乐播放器,Android仿音乐播放器带进度的播放暂停按钮
  11. Go 语言之 defer 的前世今生
  12. 《Flash ActionScript 3.0 动画高级教程》
  13. VS编译错误与链接错误汇总
  14. cmd长ping记录日志和时间_Ping记录时间的方法
  15. DBSCAN聚类算法的实现
  16. 大学计算机基础课本知识,大学计算机基础-知识点提纲
  17. python机器学习记录4and5 支持向量机
  18. matlab 圣诞树,搞气氛!用MATLAB画一棵Bling Bling的圣诞树
  19. 创业手记 Mr.Hua
  20. matplotlib的cmap

热门文章

  1. 掌上辅材面试php,掌上辅材下载_掌上辅材APP手机最新版安装 - 风云下载
  2. 合并单元格的行高自动调整
  3. 基于 React hooks + Typescript + Cesium 实现视频融合功能
  4. 生产管理电子看板,打造目视化精益工厂
  5. 可画在线编辑工具怎么调整海报设计元素的位置
  6. Android 汉字转换拼音之JPinyin
  7. 在linux系统下运行.dat文件
  8. 搜索系统中的Learning To Rank模型:GBRank
  9. 远程往服务器上传送文件,远程连接服务器怎么传送文件
  10. 金山pdf批注更改批注作者_Linux上的PDF批注工具