使用PhpSpreadsheet 保存excel文件
blog
读取数据,生成table
$orderList = Db::query($query); $strTable = '<table width="500" border="1">'; $strTable .= '<tr>'; $strTable .= '<td style="text-align:center;font-size:12px;width:120px;">商品ID' . date("Y/m/d H:i:s", $begin) . '到' . date("Y/m/d H:i:s", $end);'</td>'; $strTable .= '<td style="text-align:center;font-size:12px;" width="100">商品名称</td>'; $strTable .= '<td style="text-align:center;font-size:12px;" width="*">规格</td>'; $strTable .= '<td style="text-align:center;font-size:12px;" width="*">总数量</td>'; $strTable .= '<td style="text-align:center;font-size:12px;" width="*">购买单数</td>'; $strTable .= '</tr>'; if (is_array($orderList)) { foreach ($orderList as $k => $val) { $strTable .= '<tr>'; $strTable .= '<td style="text-align:center;font-size:12px;"> ' . $val['goods_id'] . '</td>'; $strTable .= '<td style="text-align:left;font-size:12px;">' . $val['goods_name'] . ' </td>'; $strTable .= '<td style="text-align:left;font-size:12px;">' . $val['spec_key_name'] . '</td>'; $strTable .= '<td style="text-align:left;font-size:12px;">' . $val['goods_sum'] . ' </td>'; $strTable .= '<td style="text-align:left;font-size:12px;">' . $val['goods_user_count'] . '</td>'; $strTable .= '</tr>'; } } $strTable .= '</table>'; unset($orderList); downloadExcel($strTable, 'order'); exit();
主要实现
/**
* 导出excel
* @param $strTable 表格内容
* @param $filename 文件名
*/
function downloadExcel($strTable,$filename)
{
header("Content-type: application/vnd.ms-excel");
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=".$filename."_".date('Y-m-d').".xls");
header('Expires:0');
header('Pragma:public');
echo '<html><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />'.$strTable.'</html>';
}
直接导出方法二
public function openexcel() { header("Content-type:application/vnd.ms-excel"); header("Content-Disposition:attachement;filename=Haoyunyun_" . date("Ymd") . ".xls"); $list = Db::table('info2')->limit(10)->select(); // 表头 $ReportArr[] = [1, 2, 3, 4, 5]; foreach ($list as $key => $value) { $ReportArr[] = [$value['name'],$value['name'],$value['name'],$value['name'],$value['name']]; } $ReportContent = ''; $num1 = count($ReportArr); for ($i = 0; $i < $num1; $i++) { $num2 = count($ReportArr[$i]); for ($j = 0; $j < $num2; $j++) { $ReportContent .= '"' . $ReportArr[$i][$j] . '"' . "\t"; } $ReportContent .= "\n"; } // 乱码请注释 // $ReportContent = mb_convert_encoding($ReportContent, "gb2312", "utf-8"); die($ReportContent); // 框架内推荐使用die }
方法二的大容量
public function more_openexcel() { header("Content-type:application/vnd.ms-excel"); header("Content-Disposition:attachement;filename=Haoyunyun_" . date("Ymd") . ".xls"); // 表头 $ReportArr[] = ['ID', '名称', '地址', '电话', 'p']; Db::table('info2')->chunk(100, function ($datas) use (&$ReportArr) { foreach ($datas as $data) { $ReportArr[] = [$data['id'], $data['name'], $data['address'], $data['mobile'], $data['p']]; } }); $ReportContent = ''; $num1 = count($ReportArr); for ($i = 0; $i < $num1; $i++) { $num2 = count($ReportArr[$i]); for ($j = 0; $j < $num2; $j++) { $ReportContent .= '"' . $ReportArr[$i][$j] . '"' . "\t"; } $ReportContent .= "\n"; } // $ReportContent = mb_convert_encoding($ReportContent, "gb2312", "utf-8"); die($ReportContent); // 框架内推荐使用die }
本文介绍了一种使用PHP从数据库中获取数据并将其转换为Excel文件的方法。通过构造HTML表格来展示数据,并利用HTTP头部信息将文件以Excel格式提供给用户下载。文中还提供了两种不同的实现方式:一种适用于较小的数据集,另一种则更侧重于处理大量数据。
842

被折叠的 条评论
为什么被折叠?



