thinkphp导出Excel文件的示例

作者:袖梨 2022-06-25

其中要注意几点:

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中给按钮添加事件监听

相关文章

精彩推荐