thinkphp导出Excel文件的示例

本文介绍两种在ThinkPHP框架中导出Excel的方法:一种是直接输出xls文件,另一种是利用PHPExcel库。提供了详细的代码示例及注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面我来给各位整理两款在thinkphp中导出Excel文件的两种方法一种是原生态的输出xls文件,外一种是使用PHPExcel来实现下面我们来看看例子。

其中要注意几点:

1、必须要有 spl_autoload_register(array(‘Think’,'autoload’));
2、在本Action和父级Action均不能出现BOM头(切记)或者会导出乱码

例子1

 代码如下复制代码
/*导出xls用户个人信息*/
function export(){      
header("Content-type:application/octet-stream");
header("Accept-Ranges:bytes");
header("Content-type:application/vnd.ms-excel"); 
header("Content-Disposition:attachment;filename=用户信息表".date("Y-m-d").".xls");
header("Pragma: no-cache");
header("Expires: 0");
//导出xls 开始
$tag0 = iconv("UTF-8", "GB2312",'用户ID');
$tag1 = iconv("UTF-8", "GB2312",'用户名');
$tag2 = iconv("UTF-8", "GB2312",'待领取');
$tag3 = iconv("UTF-8", "GB2312",'奖金总数');
$tag4 = iconv("UTF-8", "GB2312",'开户行');
$tag5 = iconv("UTF-8", "GB2312",'开户城市');
$tag6 = iconv("UTF-8", "GB2312",'开户行地址');
$tag7 = iconv("UTF-8", "GB2312",'银行卡号');
$tag8 = iconv("UTF-8", "GB2312",'持卡人姓名');
echo "$tag0\t$tag1\t$tag2\t$tag3\t$tag4\t$tag5\t$tag6\t$tag7\n";
////查询的一张表
//$arr=M ('textpage')->field('username,count(id) as allcount,sum(price) as allprice ')->group('username')->select();
$field="crowd_textpage.tid,crowd_textpage.username,users.bankName,users.city,users.bankAddress,
users.bankCard,users.bankUsr,count(crowd_textpage.id) as allcount,sum(crowd_textpage.price) as allprice";
  $arr = M ('textpage')->field($field)
->join('crowd_user as users ON crowd_textpage.username=users.username')
->group('crowd_textpage.username')
->select();
//dump(M ('textpage')->getLastSql());die;
foreach($arr as $key=>$val){
//$date        =    date('Y-m-d',$val['pay_time']);
$tid    =    iconv("UTF-8", "GB2312", $val['tid']);
$tid=$tid?$tid:'-';
$username    =    iconv("UTF-8", "GB2312", $val['username']);
$username=$username?$username:'-';
$allcount    =    iconv("UTF-8", "GB2312", $val['allcount']);
$allcount=$allcount?$allcount:'-';
$allprice    =    iconv("UTF-8", "GB2312", $val['allprice']);
$allprice=$allprice?$allprice:'-';
$bankName    =    iconv("UTF-8", "GB2312", $val['bankName']);
$bankName=$bankName?$bankName:'-';
$city    =    iconv("UTF-8", "GB2312", $val['city']);
$city=$city?$city:'-';
$bankAddress    =    iconv("UTF-8", "GB2312", $val['bankAddress']);
$bankAddress=$bankAddress?$bankAddress:'-';
$bankCard    =    iconv("UTF-8", "GB2312", $val['bankCard']);
$bankCard=$bankCard?$bankCard:'-';
$bankUsr    =    iconv("UTF-8", "GB2312", $val['bankUsr']);
 $bankUsr=$bankUsr?$bankUsr:'-';
echo "$tid\t$username\t$allcount\t$allprice\t$bankName\t$city
\t$bankAddress\t'$bankCard\t$bankUsr\n";
  }
}

例子2

1:下载PHPexcel
2:将下载的文件夹放到thinkphp中的\Extend\Vendor下面命名为Classes
我的是在这个文件夹下还有个PHPExcel和一个PHPExcel.php文件
3:

 代码如下复制代码
function pushExcel(){
  $user=D("User");
  $list=$user->relation(true)->select();
  Vendor("Classes.PHPExcel");
  Vendor("Classes.PHPExcel.IOFactory");
  Vendor("Classes.PHPExcel.Reader.Excel5");
  //创建处理对象实例
  $objPhpExcel=new PHPExcel();
  $objPhpExcel->getActiveSheet()->getDefaultColumnDimension()->setAutoSize(true);//设置单元格宽度
  //设置表格的宽度  手动
  $objPhpExcel->getActiveSheet()->getColumnDimension('G')->setWidth(20);
  $objPhpExcel->getActiveSheet()->getColumnDimension('H')->setWidth(15);
  $objPhpExcel->getActiveSheet()->getColumnDimension('I')->setWidth(15);
  $objPhpExcel->getActiveSheet()->getColumnDimension('J')->setWidth(20);
  //设置标题
  $rowVal = array(0=>'编号',1=>'姓名', 2=>'性别', 3=>'年龄', 4=>'所属部门',
  5=>'职位', 6=>'邮箱', 7=>'办公电话', 8=>'移动电话',
  9=>'住址');
  foreach ($rowVal as $k=>$r){
   $objPhpExcel->getActiveSheet()->getStyleByColumnAndRow($k,1)
   ->getFont()->setBold(true);//字体加粗
   $objPhpExcel->getActiveSheet()->getStyleByColumnAndRow($k,1)->
   getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);//文字居中
   $objPhpExcel->getActiveSheet()->setCellValueByColumnAndRow($k,1,$r);
  }
  //设置当前的sheet索引 用于后续内容操作
  $objPhpExcel->setActiveSheetIndex(0);
  $objActSheet=$objPhpExcel->getActiveSheet();
  //设置当前活动的sheet的名称
  $title="公司通讯录";
  $objActSheet->setTitle($title);
  //设置单元格内容
  foreach($list as $k => $v)
  {
   $num=$k+2;
   $objPhpExcel->setActiveSheetIndex(0)
   //Excel的第A列,uid是你查出数组的键值,下面以此类推
   ->setCellValue('A'.$num, $v['userID'])
   ->setCellValue('B'.$num, $v['username'])
   ->setCellValue('C'.$num, $v['sex'])
   ->setCellValue('D'.$num, $v['age'])
   ->setCellValue('E'.$num, $v['department']['departmentName'])
   ->setCellValue('F'.$num, $v['position'])
   ->setCellValue('G'.$num, $v['Email'])
   ->setCellValue('H'.$num, $v['phone'])
   ->setCellValue('I'.$num, $v['mobilephone'])
   ->setCellValue('J'.$num, $v['Address']);
  }
  $name=date('Y-m-d');//设置文件名
  header("Content-Type: application/force-download");
  header("Content-Type: application/octet-stream");
  header("Content-Type: application/download");
  header("Content-Transfer-Encoding:utf-8");
  header("Pragma: no-cache");
  header('Content-Type: application/vnd.ms-excel');
  header('Content-Disposition: attachment;filename="'.$title.'_'.urlencode($name).'.xls"');
  header('Cache-Control: max-age=0');
  $objWriter = PHPExcel_IOFactory::createWriter($objPhpExcel, 'Excel5');
  $objWriter->save('php://output');
}
捣鼓了一上午终于好了 现在把写好的贴出来
程序中有与ThinkPHP不兼容的地方 在config.php中添加'OUTPUT_ENCODE' => false ,
另外html中给按钮添加事件监听
<input    id="toExcel" name="button_toExcel" type="button" value="导出Excel">
<script type="text/javascript">
$(function (){
   $("#toExcel").click(function(){
    document.location.href="__URL__/pushExcel";
    });
  });
</script>
以下是使用ThinkPHP框架和PHPExcel类库导出Excel表格的步骤: 1.下载并安装PHPExcel类库,将下载的PHPExcel文件夹放入项目的vendor目录下。 2.创建一个控制器,例如ExcelController,并在控制器中添加一个export方法。 3.在export方法中,实例化PHPExcel类库,并设置Excel表格的属性,例如表格标题、表格列名等。 4.从数据库中获取需要导出的数据,并将数据填充到Excel表格中。 5.将Excel表格输出到浏览器,让用户可以下载。 以下是一个示例代码: ```php <?php namespace app\index\controller; use think\Controller; use PHPExcel; use PHPExcel_IOFactory; class ExcelController extends Controller { public function export() { // 实例化PHPExcel类库 $objPHPExcel = new PHPExcel(); // 设置Excel属性 $objPHPExcel->getProperties()->setCreator("ThinkPHP") ->setLastModifiedBy("ThinkPHP") ->setTitle("Office 2007 XLSX Test Document") ->setSubject("Office 2007 XLSX Test Document") ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.") ->setKeywords("office 2007 openxml php") ->setCategory("Test result file"); // 设置表格标题 $objPHPExcel->setActiveSheetIndex(0) ->setCellValue('A1', '姓名') ->setCellValue('B1', '年龄') ->setCellValue('C1', '性别'); // 从数据库中获取数据 $data = db('user')->select(); // 将数据填充到Excel表格中 $i = 2; foreach ($data as $item) { $objPHPExcel->setActiveSheetIndex(0) ->setCellValue('A' . $i, $item['name']) ->setCellValue('B' . $i, $item['age']) ->setCellValue('C' . $i, $item['gender']); $i++; } // 输出Excel表格到浏览器 header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="user.xlsx"'); header('Cache-Control: max-age=0'); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); $objWriter->save('php://output'); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值