PHP将从数据库取出的数据导出为excel文件

本文介绍了一种使用PHP和Spreadsheet库导出Excel报表的方法。首先安装并引入Spreadsheet类库,然后通过一系列步骤处理数据并将其写入Excel文件中。包括设置标题、字段名和数据内容等。

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

需先安装spreadsheet第三方类库

public function getReportExcel(){

//取出要导出的值

$id = I('id');

$result=$this->getReportData($id);

//验证值是否存在

if (empty($result)) {

return [false, '未获取到相关表格数据!'];

}



vendor('autoload', '', '.php'); //引入自动加载类,用于加载第三方类库

//实例化Spreadsheet库

//创建一个excel文件

$spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();

//用report来写入文件

$report = $spreadsheet->getActiveSheet();



//数据处理

$title = $result['data']['name'];

$data = $result['report'];

$str="ABCDEFGHIJKLMNOPQRSTUVWXYZ";  //如果26列不够  AA  AB  AC类推

foreach($result['fields'] as $k =>$v){

$cellName[$str[$k]]=[$v['name'],$v['title']];

}



// $cellName的格式为

// $cellName=[

// 'A'=>['字段','字段中文名'],

// 'B'=>['id', '文章ID'],

// 'C' => ['title', '标题']

// ]

//设置第一行为标题 mergeCells(A1:E1) 从A1合并到E1

//setCellValue 赋值 给标题赋值为 标题+年月日

$report->mergeCells('A1:'.end(array_keys($cellName)).'1')->setCellValue('A1', $title.' 时间: '.date('Y-m-d')); //先合并,再赋值



//第二行为字段名

//循环设置字段名

foreach ($cellName as $k => $v) {

$report->setCellValue($k.'2', $v[1]); //注意是从的二行开始

}



// //循环赋值,填充表单内容,PS:从第三开始

for ($i = 0, $count = count($data); $i < $count; ++$i) {

$cellRowIndex = $i + 3; //表格从第三行开始

foreach ($cellName as $k => $v) {

$value = $data[$i][$v[0]]; //对应字段的值

$report->setCellValue($k.$cellRowIndex, $value);

}

}



$writer = new \PhpOffice\PhpSpreadsheet\Writer\Xls($spreadsheet);

ob_end_clean();

header('Pragma:public');

header('Content-type:application/vnd.ms-excel;charset=utf-8;name="'.$title.'.xls"');

        //attachment新窗口打印inline本窗口打印

header('Content-Disposition:attachment;filename='.$title.date('Ymd').'.xls');

header('Cache-Control: max-age=0');

//输出选择框 选择保存到哪

$writer->save('php://output');

}



//这个类不能以api的形式访问,如果是前后分离,请用windows.open;

//若需要给excel表格添加样式 参考文档 https://www.helloweba.net/php/564.html

//本文中的写法  

$report->getColumnDimension($k)->setAutoSize(true);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值