第一步:先去下载PHPExcel插件压缩包,解压后只用到Classes文件夹里面的文件就行。第二步:然" />
乔山办公网我们一直在努力
您的位置:乔山办公网 > excel表格制作 > <em>thinkPHP</em>怎样使用PHPExcel导出网站数据为exc...-think

<em>thinkPHP</em>怎样使用PHPExcel导出网站数据为exc...-think

作者:乔山办公网日期:

返回目录:excel表格制作




第一步:先去下载PHPExcel插件压缩包,解压后只用到Classes文件夹里面的文件就行。
第二步:然后把Classes文件夹名称改为PHPExcel (也可以不用改),再放在thinkPHP指定的第三方类库目录文件夹Vendor下面,第三方类库目录在ThinkPHP/Library 里面


第三步:整理数据,整理成适合excel表格式的数据,不多说直接给代码

public function export(){//导出Excel表数据整理
$xlsData  = M('table')->select();//查找需要导出的数据
        $xlsCell  = array(//设置excel文档的格式第一行就相当于标题
            array('id','ID号'),
            array('title','标题'),
            array('time','时间'),
            array('content','内容')
        );

$newArray = array();//自定义数组
        foreach ($xlsData as $k => $v)
        {//然后把所有查找到的数据根据设置第一行的标题相对应放进数组里面
$newArray[$k]['id'] = $v['id'];
                $newArray[$k]['title'] = $v['title'];
                $newArray[$k]['time'] = date('Y-m-d',$v['time']);
$newArray[$k]['content'] = $v['content'];
        }
        $xlsName = 'Excel表数据';//设置Excel表文件名称
        $this->exportExcel($xlsName,$xlsCell,$newArray);//调用PHPExcel插件,这步的函数也需要自定义
    }

/**
     * @param $xlsName 名称
     * @param $xlsCell 参数(标题数组)
     * @param $newArray 内容(数据数组)
     */
    public function exportExcel($xlsName,$xlsCell,$newArray){

        $xlsTitle = iconv('utf-8', 'gb2312', $xlsName);//文件名称需要转码避免乱码出错
        $xlsCell_num = count($xlsCell);
        $newArray_num = count($newArray);
        
        vendor("PHPExcel.PHPExcel");//关键,利用thinkphp内置函数嵌套PHPExcel插件,如果在第二步没有改文件夹名称就这样:vendor("Classes.PHPExcel");点之前表示插件文件夹,点之后的表示PHPExcel.php文件的名称不要后缀名
        $objPHPExcel = new \PHPExcel();//实例化PHPExcel
        
        $column_key = 'A';//excel表的每个单元格都是A1,A2,A3....类似的,大写字母代表列,数字代表行,那么第一行就是7a64e78988e69d83366标题了
foreach($xlsCell as $k=>$v){
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($column.'1',$v);//有多少标题列先写进第一行
$column_key++;//这样循环的好处就是不用限定有多少列,可以根据你的数据表字段有多少就导出多少列
}
        for($i=0;$i<$newArray_num;$i++){//第一层循环表示多少行
            $column_key = 'A';
            for($j=0;$j<$xlsCell_num;$j++){//第二层表示列
                $objPHPExcel->getActiveSheet(0)->setCellValue($column_key.($i+2), $newArray[$i][$xlsCell[$j][0]]);//($i+2)表示从第二行开始,第一行已经设置为标题了
                $column_key++;
            }
        }
        header('pragma:public');
        header('Content-type:application/vnd.ms-excel;charset=utf-8;name="'.$xlsTitle.'.xls"');
        header("Content-Disposition:attachment;filename=$xlsTitle.xls");//attachment新窗口打印inline本窗口打印
        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');//Excel5为xls格式,excel2007为xlsx格式
        $objWriter->save('php://output');
        exit;
    }

 运行后的效果文件图


1
一、下载PHPExcel包

2
二、新建文件夹,命名为PHPExcel,将上面两个文件PHPExcel,PHPExcel.php放到我们新建的PHPExcel文件夹下面;然后将此文件夹放在thinkPHP核心包里面,路径如下:D:\***\你的项目\ThinkPHP\Library\Vendor

3
三、前端界面代码
<div style="margin-left: 100px;margin-top: -33px;">
<form action="{:U(output)}" enctype="multipart/form-data" method="post" >
<input type="file" name="photo" />
<input type="submit" value="导出数据" style="background-color: #337AB7;color: white;">
</form>
</div>

4
四、导出表格样e799bee5baa6e997aee7ad94e59b9ee7ad94366式代码
//商家表格导出模板
public function exportExcel($expTitle, $expCellName, $expTableData) {
$xlsTitle = iconv('utf-8', 'gb2312', $expTitle); //文件名称
$fileName = '网站商家信息表' . date('_YmdHis'); //or $xlsTitle 文件名称可根据自己情况设定
$cellNum = count($expCellName);
$dataNum = count($expTableData);
vendor("PHPExcel.PHPExcel");
$objPHPExcel = new\PHPExcel();

$cellName = 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', 'AT', 'AU', 'AV',
'AW', 'AX', 'AY', 'AZ');
$objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(22);
$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(10);
$objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(10);
$objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(15);
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(10);
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(15);
$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(20);
$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(15);
$objPHPExcel->getActiveSheet()->getColumnDimension('I')->setWidth(20);
$objPHPExcel->getActiveSheet()->getColumnDimension('J')->setWidth(10);
$objPHPExcel->getActiveSheet()->getColumnDimension('K')->setWidth(20);
$objPHPExcel->getActiveSheet()->getColumnDimension('L')->setWidth(20);
$objPHPExcel->getActiveSheet()->getColumnDimension('M')->setWidth(25);
$objPHPExcel->getActiveSheet()->getColumnDimension('L')->setWidth(22);
$objPHPExcel->getActiveSheet()->getColumnDimension('M')->setWidth(12);
$objPHPExcel->getActiveSheet()->getColumnDimension('N')->setWidth(15);
$objPHPExcel->getActiveSheet(0)->mergeCells('A1:' . $cellName[$cellNum - 1] . '1');
//合并单元格

$objPHPExcel->getActiveSheet()->setCellValue('A1',
'网站商家信息表')->getStyle()->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
for ($i = 0; $i < $cellNum; $i++) {
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellName[$i].'2', $expCellName[$i][1]);
}
// Miscellaneous glyphs, UTF-8
for ($i = 0; $i < $dataNum; $i++) {
for ($j = 0; $j < $cellNum; $j++) {

$objPHPExcel->getActiveSheet(0)->setCellValue($cellName[$j] .
($i + 3), " ".$expTableData[$i][$expCellName[$j][0]]);
}
}
ob_end_clean(); //清除缓冲区,避免乱码
header('pragma:public');
header('Content-type:application/vnd.ms-excel;charset=utf-8;name="'.$xlsTitle. '.xls"');
header("Content-Disposition:attachment;filename=$fileName.xls");
//attachment新窗口打印inline本窗口打印
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
exit;
}

5
五、导出所需数据代码
function output($begin=0, $end=0) {//导出商家信息Excel
$xlsName = "User";
$xlsCell = array(
array('userid', '商家id'),
array('groupid', '商家等级'),
array('store_name', '店铺名称'),
array('contact_name', '联系人'),
array('phone', '手机'),
array('email', '邮箱'),
array('activity_count', '活动商品'),
array('frozen_deposit', '冻结中保证金'),
array('regdate', '注册时间'),
array('loginnum', '登录次数'),
array('lastdate', '最近登录'),
array('id_number', '身份证号码'),
array('name', '姓名'),
array('qq', 'QQ'), );
$beginToday = mktime(0, 0, 0, date('m'), date('d'), date('Y'));
$endToday = mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')) - 1;
if ($begin > 0) { $beginToday = $begin;}
if ($end > 0) {$endToday = $end;}
$xlsModel = M('member');

$xlsData=$xlsModel->query("SELECT
m.userid,m.groupid,c.store_name,c.contact_name,m.phone,m.email,c.frozen_deposit,FROM_UNIXTIME(m.regdate)
AS regdate,loginnum,FROM_UNIXTIME(m.lastdate) AS lastdate,m.qq FROM
xw_member AS m ,xw_member_merchant AS c WHERE m.modelid = 2 AND m.userid
= c.userid and (m.lastdate between $beginToday and $endToday) ORDER BY
m.userid DESC");
$dataNum = count($xlsData);
for ($i = 0; $i < $dataNum; $i++){
if ($xlsData[$i][groupid] == '1') {
$xlsData[$i][groupid] = '普通商家';
} else if ($xlsData[$i][groupid] == '2') {
$xlsData[$i][groupid] = '金牌商家';
} else if ($xlsData[$i][groupid] == '3') {
$xlsData[$i][groupid] = '白金商家';
} else if ($xlsData[$i][groupid] == '4') {
$xlsData[$i][groupid] = '钻石商家';
}

$rs=M('member_attesta')->where("userid= '".$xlsData[$i]['userid']."'
AND type = 'identity'")->getField('infos');
$identity = string2array($rs);
$xlsData[$i]['id_number'] = $identity['id_number'];
$xlsData[$i]['name'] = $identity['name'];

$xlsData[$i]['activity_count']=
M('product')->where(array('company_id'=>$xlsData[$i]['userid']))->count();
}
$this->exportExcel($xlsName, $xlsCell, $xlsData);
}
}

6
六、导出数据表格如下

(一)导入Excel

第一,在前台html页面进行上传文件:如:

复制代码 代码如下:

<form method="post" action="php文件" enctype="multipart/form-data">
<h3>导入Excel表:</h3><input type="file" name="file_stu" />

<input type="submit" value="导入" />
</form>

第二,在对应的php文件进行文件的处理

复制代码 代码如下:

if (! empty ( $_FILES ['file_stu'] ['name'] ))

{
$tmp_file = $_FILES ['file_stu'] ['tmp_name'];
$file_types = explode ( ".", $_FILES ['file_stu'] ['name'] );
$file_type = $file_types [count ( $file_types ) - 1];

/*判别是不是.xls文件,判别是不是excel文件*/
if (strtolower ( $file_type ) != "xls")
{
$this->error ( '不是Excel文件,重新上传' );
}

/*设置上传路径*/
$savePath = SITE_PATH . '/public/upfile/Excel/';

/*以时间来命名上传的文件*/
$str = date ( 'Ymdhis' );
$file_name = $str . "." . $file_type;

/*是否上传成功*/
if (! copy ( $tmp_file, $savePath . $file_name ))
{
$this->error ( '上传失败' );
}

/*

*对上传的Excel数据进行处理生成编程数据,这个函数会在下面第三步的ExcelToArray类中

注意:这里调用执行了第三步类里面的read函数,把Excel转化为数组并返回给$res,再进行数据库写入

*/
$res = Service ( 'ExcelToArray' )->read ( $savePath . $file_name );

/*

重要代码 解决Thinkphp M、D方法不能调用的问题

如果在thinkphp中遇到M 、D方法失效时就加入下面一句代码

*/
//spl_autoload_register ( array ('Think', 'autoload' ) );

/*对生成的数组进行数据库的写入*/
foreach ( $res as $k => $v )
{
if ($k != 0)
{
$data ['uid'] = $v [0];
$data ['password'] = sha1 ( '111111' );
$data ['email'] = $v [1];

$data ['uname'] = $v [3];

$data ['institute'] = $v [4];
$result = M ( 'user' )->add ( $data );
if (! $result)
{
$this->error ( '导入数据库失败' );
}
}
}

}

第三:ExcelToArrary类,用来引用phpExcel并处理Excel数据的

复制代码 代码如下:

class ExcelToArrary extends Service{

public function __construct() {

/*导入phpExcel核心类 注意 :你的路径跟我不一样就不能直接复制*/
include_once('./Excel/PHPExcel.php');
}

/**

* 读取excel $filename 路径文件名 $encode 返回数据的编码 默认为utf8

*以下基本都不要修改

*/

public function read($filename,$encode='utf-8'){

$objReader = PHPExcel_IOFactory::createReader('Excel5');

$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;

}

}

第四,以上就是导入的全部内容,phpExcel包附在最后。

(二)Excel的导出(相对于导入简单多了)

第一,先查出数据库里e799bee5baa6e79fa5e98193e58685e5aeb9335面要生成Excel的数据,如:

$data= M('User')->findAll(); //查出数据
$name='Excelfile'; //生成的Excel文件文件名
$res=service('ExcelToArrary')->push($data,$name);

第二,ExcelToArrary类,用来引用phpExcel并处理数据的

复制代码 代码如下:

class ExcelToArrary extends Service{

public function __construct() {

/*导入phpExcel核心类 注意 :你的路径跟我不一样就不能直接复制*/
include_once('./Excel/PHPExcel.php');
}

/* 导出excel函数*/
public function push($data,$name='Excel'){

error_reporting(E_ALL);
date_default_timezone_set('Europe/London');
$objPHPExcel = new PHPExcel();

/*以下是一些设置 ,什么作者 标题啊之类的*/
$objPHPExcel->getProperties()->setCreator("转弯的阳光")
->setLastModifiedBy("转弯的阳光")
->setTitle("数据EXCEL导出")
->setSubject("数据EXCEL导出")
->setDescription("备份数据")
->setKeywords("excel")
->setCategory("result file");
/*以下就是对处理Excel里的数据, 横着取数据,主要是这一步,其他基本都不要改*/
foreach($data as $k => $v){

$num=$k+1;
$objPHPExcel->setActiveSheetIndex(0)

//Excel的第A列,uid是你查出数组的键值,下面以此类推
->setCellValue('A'.$num, $v['uid'])
->setCellValue('B'.$num, $v['email'])
->setCellValue('C'.$num, $v['password'])
}

$objPHPExcel->getActiveSheet()->setTitle('User');
$objPHPExcel->setActiveSheetIndex(0);
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'.$name.'.xls"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
exit;
}

第三,以上就是导出的全部内容,phpExcel包附在最后。

相关阅读

  • -sqlserver 导出excel,sql导出到excel命令

  • 乔山办公网excel表格制作
  • SQLServer表数据导出为Excel文件一、少量数来据导出1、在查询分析器中,使用源SQL语句检索要导出的数据2、选百中所有数据,点击鼠标度右键,选择另存为CSV文件3、用EXCEL把CSV文件另存为
关键词不能为空
极力推荐

ppt怎么做_excel表格制作_office365_word文档_365办公网