PHPExcel导出导入excel、csv等格式数据
- <?php
- if(!defined('BASEPATH')) exit('No direct script access allowed');
- //物资发料单明细
- class Read_write{
- /**
- * $name:选择的类型(CSV,EXCEL2003,2007)
- * $titles:标题数组
- * $querys:查询返回的数组 $query->result_array();
- * $filename:保存的文件名称
- */
- function write_Factory($titles,$querys,$filename,$name="EXCEL2003"){
- $CI = &get_instance();
- $filename=mb_convert_encoding($filename, "GBK","UTF-8");
- switch ($name) {
- case "CSV":
- $CI->excel->write_CSV($titles,$querys,$filename);
- break;
- case "EXCEL2003":
- $CI->excel->write_EXCEL2003($titles,$querys,$filename);
- break;
- case "EXCEL2007":
- $CI->excel->write_EXCEL2007($titles,$querys,$filename);
- break;
- }
- }
- /**
- * $name:
- */
- function read_Facotry($filePath,$sql,$sheet=0,$curRow=2,$riqi=TRUE,$merge=FALSE,$mergeCol="B"){
- $CI = &get_instance();
- $name=$this->_file_extend($filePath);
- switch ($name) {
- case "csv":
- $CI->excel->read_CSV($filePath,$sql,$sheet,$curRow,$riqi,$merge,$mergeCol);
- break;
- case "xls":
- $CI->excel->read_2003Excel($filePath,$sql,$sheet,$curRow,$riqi,$merge,$mergeCol);
- break;
- case "xlsx":
- $CI->excel->read_EXCEL2007($filePath,$sql,$sheet,$curRow,$riqi,$merge,$mergeCol);
- break;
- }
- $CI->mytool->import_info("filePath=$filePath,sql=$sql");
- }
- /**
- * 2012-1-14 读取工作薄名称(sheetnames)
- */
- function read_sheetNames($filePath){
- $CI = &get_instance();
- $name=$this->_file_extend($filePath);
- $sheetnames;
- switch ($name) {
- case "csv":
- $sheetnames=$CI->excel->read_CSV_Sheet($filePath);
- break;
- case "xls":
- $sheetnames=$CI->excel->read_2003Excel_Sheet($filePath);
- break;
- case "xlsx":
- $sheetnames=$CI->excel->read_EXCEL2007_Sheets($filePath);
- break;
- }
- return $sheetnames;
- }
- //读取文件后缀名
- function _file_extend($file_name){
- $extend =explode("." , $file_name);
- $last=count($extend)-1;
- return $extend[$last];
- }
- //-----------------------------------------------预备保留
- //2011-12-21新增CVS导出功能
- public function export_csv($filename,$title,$datas, $delim = ",", $newline = "\n", $enclosure = '"'){
- $CI = &get_instance();
- $cvs= $this->_csv_from_result($title,$datas,$delim,$newline,$enclosure);
- $CI->load->helper('download');
- $name=mb_convert_encoding($filename, "GBK","UTF-8");
- force_download($name, $cvs);
- }
- /**
- * @param $titles:标题
- * @param $datas:数据
- */
- function _csv_from_result($titles,$datas, $delim = ",", $newline = "\n", $enclosure = '"'){
- $out = '';
- // First generate the headings from the table column names
- foreach ($titles as $name){
- $name=mb_convert_encoding($name, "GBK","UTF-8");
- $out .= $enclosure.str_replace($enclosure, $enclosure.$enclosure, $name).$enclosure.$delim;
- }
- $out = rtrim($out);
- $out .= $newline;
- // Next blast through the result array and build out the rows
- foreach ($datas as $row)
- {
- foreach ($row as $item)
- {
- $item=mb_convert_encoding($item, "GBK","UTF-8");
- $out .= $enclosure.str_replace($enclosure, $enclosure.$enclosure, $item).$enclosure.$delim;
- }
- $out = rtrim($out);
- $out .= $newline;
- }
- return $out;
- }
- }
- <?php
- /**
- * PHPExcel
- *
- * Copyright (C) 2006 - 2010 PHPExcel
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * @category PHPExcel
- * @package PHPExcel
- * @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
- * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
- * @version 1.7.4, 2010-08-26
- */
- /** Error reporting */
- error_reporting(E_ALL);
- date_default_timezone_set ('Asia/Shanghai');
- /** PHPExcel */
- require_once 'Classes/PHPExcel.php';
- require_once 'Classes/PHPExcel/IOFactory.php';
- /**
- * 输出到页面上的EXCEL
- */
- /**
- * CI_Excel
- *
- * @package ci
- * @author admin
- * @copyright 2011
- * @version $Id$
- * @access public
- */
- class CI_Excel
- {
- //列头,Excel每列上的标识
- private $cellArray = array(
- 1=>'A', 2=>'B', 3=>'C', 4=>'D', 5=>'E',
- 6=>'F', 7=>'G', 8=>'H', 9=>'I',10=>'J',
- 11=>'K',12=>'L',13=>'M',14=>'N',15=>'O',
- 16=>'P',17=>'Q',18=>'R',19=>'S',20=>'T',
- 21=>'U',22=>'V',23=>'W',24=>'X',25=>'Y',
- 26=>'Z',
- 27=>'AA', 28=>'AB', 29=>'AC', 30=>'AD', 31=>'AE',
- 32=>'AF', 33=>'AG', 34=>'AH', 35=>'AI',36=>'AJ',
- 37=>'AK',38=>'AL',39=>'AM',40=>'AN',41=>'AO',
- 42=>'AP',43=>'AQ',44=>'AR',45=>'AS',46=>'AT',
- 47=>'AU',48=>'AV',49=>'AW',50=>'AX',51=>'AY',
- 52=>'AZ', 53=>'BA', 54=>'BB', 55=>'BC', 56=>'BD', 57=>'BE',
- 58=>'BF', 59=>'BG', 60=>'BH', 61=>'BI', 62=>'BJ', 63=>'BK', 64=>'BL');
- private $E2003 = 'E2003';
- private $E2007 = 'E2007';
- private $ECSV = 'ECSV';
- private $tempName; //当读取合并文件时,如果第二行为空,则取第一行的名称
- /*********************************导出数据开始****************************************************/
- /**
- * 生成Excel2007文件
- */
- function write_EXCEL2007($title='',$data='',$name='')
- {
- $objPHPExcel=$this->_excelComm($title,$data,$name);
- // Redirect output to a client’s web browser (Excel2007)
- header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8');
- header("Content-Disposition: attachment;filename=$name.xlsx");
- header('Cache-Control: max-age=0');
- $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel2007");
- $objWriter->save('php://output'); //output 允许向输出缓冲机制写入数据,和 print() 与 echo() 的方式相同。
- exit;
- }
- /**
- * 生成Excel2003文件
- */
- function write_EXCEL2003($title='',$data='',$name=''){
- $objPHPExcel=$this->_excelComm($title,$data,$name);
- //Redirect output to a client’s web browser (Excel5)
- header('Content-Type: application/vnd.ms-excel;charset=UTF-8');
- header("Content-Disposition: attachment;filename=$name.xls");
- header('Cache-Control: max-age=0');
- $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
- $objWriter->save('php://output');
- }
- /**
- * 生成CSV文件
- */
- function write_CSV($title='',$data='',$name=''){
- $objPHPExcel=$this->_excelComm($title,$data,$name);
- header("Content-Type: text/csv;charset=UTF-8");
- header("Content-Disposition: attachment; filename=$name.csv");
- header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
- header('Expires:0');
- header('Pragma:public');
- $objWriter = new PHPExcel_Writer_CSV($objPHPExcel,'CSV');
- $objWriter->save("php://output");
- exit;
- }
- function _excelComm($title,$data,$name){
- // Create new PHPExcel object
- $objPHPExcel = new PHPExcel();
- $objPHPExcel=$this->_writeTitle($title,$objPHPExcel);
- $objPHPExcel=$this->_writeDatas($data,$objPHPExcel);
- $objPHPExcel=$this->_write_comm($name,$objPHPExcel);
- return $objPHPExcel;
- }
- //输出标题
- function _writeTitle($title,$objPHPExcel){
- //表头循环(标题)
- foreach ($title as $tkey => $tvalue){
- $tkey = $tkey+1;
- $cell = $this->cellArray[$tkey].'1'; //第$tkey列的第1行,列的标识符(a..z)
- // Add some data //表头
- // $tvalue=mb_convert_encoding($tvalue, "UTF-8","GBK");
- $objPHPExcel->setActiveSheetIndex(0)->setCellValue($cell, $tvalue); //设置第$row列的值(标题)
- }
- return $objPHPExcel;
- }
- //输出内容
- function _writeDatas($data,$objPHPExcel){
- //内容循环(数据库查询的返回值)
- foreach($data as $key =>$value) {
- $i = 1;
- foreach ($value as $mkey =>$mvalue){ //返回的类型是array([0]=>array());,所以此处要循环它的value,也就是里面的array
- $rows = $key+2; //开始是第二行
- $mrow = $this->cellArray[$i].$rows; //第$i列的第$row行
- // $mvalue=mb_convert_encoding($mvalue, "GBK","UTF-8");
- // print_r($mrow."--->".$mvalue);
- $objPHPExcel->setActiveSheetIndex(0)->setCellValueExplicit($mrow, $mvalue);
- $i++;
- }
- }
- return $objPHPExcel;
- }
- function _write_comm($name,$objPHPExcel){
- // Rename sheet(左下角的标题)
- //$objPHPExcel->getActiveSheet()->setTitle($name);
- // Set active sheet index to the first sheet, so Excel opens this as the first sheet
- $objPHPExcel->setActiveSheetIndex(0); //默认显示
- return $objPHPExcel;
- }
- /*********************************导出数据结束****************************************************/
- /*********************************读取数据开始****************************************************/
- /**
- * 使用方法,$insertSql:insert xx (x1,x2,x3,x4) value (
- */
- // function _comm_insert($objReader,$filePath,$insertSql,$sheet=2,$curRow=2,$riqi=TRUE){
- function _comm_insert($objPHPExcel,$insertSql,$curRow,$merge=FALSE,$mergeCol='B'){
- $CI = &get_instance();
- $currentSheet = $objPHPExcel->getSheet();//得到指定的激活
- /**取得一共有多少列*/
- $allColumn = $currentSheet->getHighestColumn();
- /**取得一共有多少行*/
- $allRow = $currentSheet->getHighestRow();
- $size=strlen($allColumn);//如果超出Z,则出现不执行下去
- $esql="";
- for($currentRow = $curRow;$currentRow<=$allRow;$currentRow++){
- $sql=$insertSql;
- if($size==2){
- $i=1;
- $currentColumn='A';
- while ($i <= 26) {
- $address = $currentColumn.$currentRow;
- $temp=$currentSheet->getCell($address)->getCalculatedValue();
- $sql.='"'.$temp.'"'.",";
- $currentColumn++;
- $i++;
- }
- for($currentColumn='AA';$currentColumn<=$allColumn;$currentColumn++){
- $address = $currentColumn.$currentRow;
- $sql.='"'.$currentSheet->getCell($address)->getCalculatedValue().'"'.",";
- }
- }else{
- for($currentColumn='A';$currentColumn<=$allColumn;$currentColumn++){
- if($merge){//如果是读取合并的值,则判断,如果此行的值为NULL,则把前面的tempName赋值给$temp;
- if($currentColumn==$mergeCol){//这里先指定从B列的名字开始读取合并了的值。以后遇到不同的再调整。
- $temp=$currentSheet->getCell($mergeCol.$currentRow)->getCalculatedValue();
- if(empty($temp)){
- $temp=$this->tempName;
- }else{
- $this->tempName=$temp;
- }
- }else{
- $address = $currentColumn.$currentRow;//getValue()
- $temp=$currentSheet->getCell($address)->getCalculatedValue();
- }
- }else{
- $address = $currentColumn.$currentRow;//getValue()
- $temp=$currentSheet->getCell($address)->getCalculatedValue();
- }
- $sql=$sql.'"'.$temp.'"'.",";
- }
- }
- $esql=rtrim($sql,",").')';
- //echo($esql);
- //return;
- $CI->db->simple_query($esql);
- }
- }
- /**
- * $filePath:读取文件的路径
- * $insertSql:拼写的SQL
- */
- function read_EXCEL2007($filePath,$insertSql,$sheet=0,$curRow=2,$riqi=TRUE,$merge=FALSE,$mergeCol="B"){
- $objs=$this->_get_PHPExcel($this->E2007,$filePath,$sheet,$insertSql,$riqi);
- $this->_comm_insert($objs["EXCEL"],$objs["SQL"],$curRow,$merge,$mergeCol);
- }
- /**
- * 读取2003Excel
- */
- function read_2003Excel($filePath,$insertSql,$sheet=0,$curRow=2,$riqi=TRUE,$merge=FALSE,$mergeCol="B"){
- $objs=$this->_get_PHPExcel($this->E2003,$filePath,$sheet,$insertSql,$riqi);
- $this->_comm_insert($objs["EXCEL"],$objs["SQL"],$curRow,$merge,$mergeCol);
- }
- /**
- * 读取CSV
- */
- function read_CSV($filePath,$insertSql,$sheet=0,$curRow=2,$riqi=TRUE,$merge=FALSE,$mergeCol="B"){
- $objs=$this->_get_PHPExcel($this->ECSV,$filePath,$sheet,$insertSql,$riqi,$mergeCol);
- $this->_comm_insert($objs["EXCEL"],$objs["SQL"],$curRow,$merge);
- }
- //--------------------------------读取工作薄信息开始
- /**
- * 读取Excel2007工作薄名称
- */
- function read_EXCEL2007_Sheets($filePath){
- return $this->_get_sheetnames($this->E2007,$filePath);
- }
- /**
- * 读取2003Excel工作薄名称
- */
- function read_2003Excel_Sheet($filePath){
- return $this->_get_sheetnames($this->E2003,$filePath);
- }
- /**
- * 读取CSV工作薄名称
- */
- function read_CSV_Sheet($filePath){
- return $this->_get_sheetnames($this->ECSV,$filePath);
- }
- //--------------------------------读取工作薄信息结束
- /**
- * 2012-1-14 --------------------------
- */
- //读取Reader流
- function _get_Reader($name){
- $reader=null;
- switch ($name) {
- case $this->E2003:
- $reader = new PHPExcel_Reader_Excel5();
- break;
- case $this->E2007:
- $reader = new PHPExcel_Reader_Excel2007();
- break;
- case $this->ECSV:
- $reader = new PHPExcel_Reader_CSV();
- break;
- }
- return $reader;
- }
- //得到$objPHPExcel文件对象
- function _get_PHPExcel($name,$filePath,$sheet,$insertSql,$riqi){
- $reader=$this->_get_Reader($name);
- $PHPExcel= $this->_init_Excel($reader,$filePath,$sheet);
- if($riqi){ //如果不需要日期,则忽略.
- $insertSql=$insertSql.'"'.$reader->getSheetTitle().'"'.",";//第一个字段固定是日期2012-1-9
- }
- return array("EXCEL"=>$PHPExcel,"SQL"=>$insertSql);
- }
- //得到工作薄名称
- function _get_sheetnames($name,$filePath){
- $reader=$this->_get_Reader($name);
- $this->_init_Excel($reader,$filePath);
- return $reader->getAllSheets();
- }
- //加载文件
- function _init_Excel($objReader,$filePath,$sheet=''){
- $objReader->setReadDataOnly(true);
- if(!empty($sheet)){
- $objReader->setSheetIndex($sheet);//读取第几个Sheet。
- }
- return $objReader->load("$filePath");
- }
- //-------------------------------2012-1-14
- }
- /*********************************读取数据结束****************************************************/
- ------------------------导入操作------------------------
- /**
- * $sql="INSERT INTO ".mymsg::WY_MMB." (dizhi,xingming) VALUES (";
- */
- //先上传再读取文件
- function upByFile($sql, $url, $curRow = 2, $RIQI = true,$merge = FALSE,$mergeCol='B')
- {
- $CI = &get_instance();
- $config['allowed_types'] = '*'; //充许所有文件
- $config['upload_path'] = IMPORT; // 只在文件的路径
- $CI->load->library('upload', $config);
- if ($CI->upload->do_upload()) { //默认名是:userfile
- $data = $CI->upload->data();
- $full_name = $data['full_path']; //得到保存后的路径
- $full_name = mb_convert_encoding($full_name, "GBK", "UTF-8");
- $sheet = $CI->input->post("sheet"); //读取第x列图表
- if (empty($sheet)) {
- $sheet = 0;
- }
- $CI->read_write->read_Facotry($full_name, $sql, $sheet, $curRow, $RIQI,$merge,$mergeCol); //执行插入命令
- }
- $this->alert_msg(mymsg::IMPORT_SUCCESS, site_url($url));
- }
- ------------------------------导出操作----------------------------------
- //导出指定的表字段
- public function show_export(){
- //-----数据库字段
- $field=implode(",",$this->input->post("listCheckBox_show"));//数据库字段
- //显示名称
- $titleArray=$this->input->post("listCheckBox_field");//显示的字段名称(字段Comment注解名,因为传进来的有些空数组,所以必须过滤)
- $title=array();
- foreach ($titleArray as $key => $value) {
- if (!empty($value)) {
- $title[]=$value;
- }
- }
- //---数据库表名
- $table=$this->input->post("tableName");
- //--数据库表名称(Comment注释)
- $show_name=$this->input->post("tableComment");
- //--导出类型
- $type=$this->input->post("type");
- //--where 年月
- $y_month=$this->input->post("year_month");
- if(!empty($y_month)){
- $where["riqi"]=$y_month;
- $datas=$this->mcom_model->queryByWhereReField($field,$where,$table);
- }else{
- //--写出的数据
- $datas=$this->mcom_model->queryByField($field,$table);
- }
- //---开始导出
- $this->read_write->write_Factory($title,$datas,$show_name,$type);
- }
PHPExcel导出导入excel、csv等格式数据的更多相关文章
- 用PHPExcel导出导入Excel
thinkPHP5.0框架 查询数据库调用Excel方法 public function exportlist(){ $orderModel = new OrderModel(); if($start ...
- Asp.net导出Excel/Csv文本格式数据
刚刚开始做Excel相关的项目,所以遇到的问题不管大小都给记录一下 偶然的机会在添加数据的时候全改成了数字,结果输出的时候全自动变成了科学计数法,这是excel的强大功能,能自动识别数字和字符串,太聪 ...
- PHPExcel导出导入
便于记忆 这里写一个PHPexcel导出的demo 我们构造一个数据 $letter = array('A','B','D','E'); //sheet索引 $date = array( ar ...
- .Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) 通过MVC控制器导出导入Excel文件(可用于java SSH架构)
.Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) [原文地址] 通过MVC控制器导出导入Excel文件(可用于java SSH架构) public cl ...
- 利用Aspose.Cell控件导入Excel非强类型的数据
导入Excel的操作是非常常见的操作,可以使用Aspose.Cell.APOI.MyXls.OLEDB.Excel VBA等操作Excel文件,从而实现数据的导入,在导入数据的时候,如果是强类型的数据 ...
- oracle数据库中导入Excel表格中的数据
1.点击[工具]-->[ODBC 导入器],如图: 2.在导入器里选择第一个[来自ODBC的数据],用户名/系统DSN-->填写[Excel Files],输入用户名和密码,点击 [连接] ...
- DevExpress XtraGrid 数据导出导入Excel
// <summary> /// 导出按钮 /// </summary> /// <param name="sender"></param ...
- php利用PHPExcel类导出导入Excel用法
PHPExcel类是php一个excel表格处理插件了,下面我来给大家介绍利用PHPExcel类来导入与导出excel表格的应用方法,有需要了解的朋友不防参考参考(PHPExcel自己百度下载这里不介 ...
- ThinkPhp 使用PhpExcel导出导入多语言文件
在ThinkPHP 里已经实现了多语言功能,只要在指定的目录下创建对应的语言文件并填充内容,即可实现多语言功能 而多语言的翻译却是一个很麻烦的事情,因为客户特定的行业问题导致我们翻译可能是不准确的 于 ...
随机推荐
- java常用面板
public class JPanelTest extends JFrame{ public JPanelTest(){ Container c=getContentPane(); ...
- 【转】sed命令详解
原文:http://www.cnblogs.com/emanlee/archive/2013/09/07/3307642.html sed命令行格式为: sed [-nefri] 'command' ...
- 什么是条带化(striping) ?(转载)
条带(strip)是把连续的数据分割成相同大小的数据块,把每段数据分别写入到阵列中的不同磁盘上的方法.简单的说,条带是一种将多个磁盘驱动器合并为一个卷的方法. 许多情况下,这是通过硬件控制器来完成的. ...
- Caught exception while loading file struts-default.xml 错误
严重: Exception starting filter struts2 Caught exception while loading file struts-default.xml - [unkn ...
- Grunt - Karma 单元测试
Karma 是 Goolge 开源的一个 Test runner, 可以配合 Grunt 使用. 1. 相关插件介绍 1.1 Karma 的官网 http://karma-runner.github. ...
- canvas-a10isPointPath2.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- C++调用WebService服务问题总结
近期接手一部分C++研发工作,同时与.NET开发小组进行软件功能协作,于是需要调用.NET WebService服务,已完成数据的网络通讯业务功能:结束之余,将手头碰到的问题总结罗列如下: C++如何 ...
- 洛谷P1206 [USACO1.2]回文平方数 Palindromic Squares
P1206 [USACO1.2]回文平方数 Palindromic Squares 271通过 501提交 题目提供者该用户不存在 标签USACO 难度普及- 提交 讨论 题解 最新讨论 暂时没有 ...
- linux Apache和php配置
今天安装Apache httpd web服务器,安装过程分为三部分: (1)./configure (2)make (3)make install (需要root权限) 我的apache 安装在/ho ...
- 见怪不怪的typedef
typedef是C++中的一个十分重要的关键字,它有强大的功能和方法的用途.但是有时候,碰到一些用到typedef的地方却感到很奇怪了. 给个栗子尝尝: typedef void(*pFun)(voi ...