<?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等格式数据的更多相关文章

  1. 用PHPExcel导出导入Excel

    thinkPHP5.0框架 查询数据库调用Excel方法 public function exportlist(){ $orderModel = new OrderModel(); if($start ...

  2. Asp.net导出Excel/Csv文本格式数据

    刚刚开始做Excel相关的项目,所以遇到的问题不管大小都给记录一下 偶然的机会在添加数据的时候全改成了数字,结果输出的时候全自动变成了科学计数法,这是excel的强大功能,能自动识别数字和字符串,太聪 ...

  3. PHPExcel导出导入

    便于记忆 这里写一个PHPexcel导出的demo 我们构造一个数据   $letter = array('A','B','D','E'); //sheet索引   $date = array( ar ...

  4. .Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) 通过MVC控制器导出导入Excel文件(可用于java SSH架构)

    .Net MVC  导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) [原文地址] 通过MVC控制器导出导入Excel文件(可用于java SSH架构)   public cl ...

  5. 利用Aspose.Cell控件导入Excel非强类型的数据

    导入Excel的操作是非常常见的操作,可以使用Aspose.Cell.APOI.MyXls.OLEDB.Excel VBA等操作Excel文件,从而实现数据的导入,在导入数据的时候,如果是强类型的数据 ...

  6. oracle数据库中导入Excel表格中的数据

    1.点击[工具]-->[ODBC 导入器],如图: 2.在导入器里选择第一个[来自ODBC的数据],用户名/系统DSN-->填写[Excel Files],输入用户名和密码,点击 [连接] ...

  7. DevExpress XtraGrid 数据导出导入Excel

    // <summary> /// 导出按钮 /// </summary> /// <param name="sender"></param ...

  8. php利用PHPExcel类导出导入Excel用法

    PHPExcel类是php一个excel表格处理插件了,下面我来给大家介绍利用PHPExcel类来导入与导出excel表格的应用方法,有需要了解的朋友不防参考参考(PHPExcel自己百度下载这里不介 ...

  9. ThinkPhp 使用PhpExcel导出导入多语言文件

    在ThinkPHP 里已经实现了多语言功能,只要在指定的目录下创建对应的语言文件并填充内容,即可实现多语言功能 而多语言的翻译却是一个很麻烦的事情,因为客户特定的行业问题导致我们翻译可能是不准确的 于 ...

随机推荐

  1. Flask-SQLAlchemy 学习总结

    初始化和配置 ORM(Object Relational Mapper) 对象关系映射.指将面对对象得方法映射到数据库中的关系对象中.Flask-SQLAlchemy是一个Flask扩展,能够支持多种 ...

  2. nyoj 106 背包问题

    点击打开链接 背包问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 现在有很多物品(它们是可以分割的),我们知道它们每个物品的单位重量的价值v和重量w(1<=v ...

  3. Hadoop2.6.0错误

    错误1: WARN hdfs.DFSClient: DataStreamer Exception org.apache.hadoop.ipc.RemoteException(java.io.IOExc ...

  4. C# Windows Forms 事件处理顺序

    事件引发的顺序对某些Windows 窗体应用来说十分重要.当某些事件需要特别处理时(如重绘窗体的某些部分),必须知道事件在运行时的确切引发顺序.下面就应用程序和控件的生命周期中的几个重要阶段的事件顺序 ...

  5. "HTTP 错误 500.19 请求的页面的相关配置数据无效" 解决办法

    HTTP 错误 500.19 - Internal Server Error无法访问请求的页面,因为该页的相关配置数据无效. 问题"详细错误信息模块 IIS Web Core通知 Begin ...

  6. Oozie 中各种类型的作业执行结果记录

    一,提交的作业被SUSPEND,然后再被KILL,记录如下: TYPE1: appType WORKFLOW_JOB id 0000002-160516095026479-oozie-oozi-W e ...

  7. 慕课网-安卓工程师初养成-2-9 Java中的自动类型转换

    来源:http://www.imooc.com/code/1236 在 Java 程序中,不同的基本数据类型的数据之间经常需要进行相互转换.例如: , 代码中 int 型变量 score1 可以直接为 ...

  8. USACO Section 2.4 回家 Bessie Come Home

    题目描述 现在是晚餐时间,而母牛们在外面分散的牧场中. 农民约翰按响了电铃,所以她们开始向谷仓走去. 你的工作是要指出哪只母牛会最先到达谷仓(在给出的测试数据中,总会有且只有一只最快的母牛). 在挤奶 ...

  9. 华为OJ平台——字符串通配符

    题目描述: 在计算机中,通配符一种特殊语法,广泛应用于文件搜索.数据库.正则表达式等领域.现要求各位实现字符串通配符的算法.要求:实现如下2个通配符: *:匹配0个或以上的字符(字符由英文字母和数字0 ...

  10. CreateProcessW记录

    STARTUPINFO si = { sizeof(si) };  PROCESS_INFORMATION pi; si.dwFlags = STARTF_USESHOWWINDOW;  si.wSh ...