/** * 导出Excel数据表格 * @param string $expTitle 文件标题 * @param array $expCellName 表头二维数组 * 如:$expCellName = [['id', '序号'], ['name', '姓名'], ['sex', '性别']] * @param array $expTableData 数据二维数组, * 如:$expTableData = [['id' => 1, 'name' => 'ViViYong', 'sex' => 'man'],['id' => 2, 'name' => 'Yong', 'sex' => 'man']] */ function exportExcel($expTitle, $expCellName, $expTableData) { // 引入PHPExcel require_once '../vendor/PHPExcel/Classes/PHPExcel.php'; //文件名称 $xlsTitle = iconv('utf-8', 'gb2312', $expTitle); $fileName = $xlsTitle; // 计算表头和内容的长度 $cellNum = count($expCellName); $dataNum = count($expTableData); $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'); for ($i = 0; $i < $cellNum; $i++) { $objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellName[$i] . '1', $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 + 2), $expTableData[$i][$expCellName[$j][0]]); } } header('pragma:public'); header('Content-type:application/vnd.ms-excel;charset=utf-8;name="' . $xlsTitle . '.xlsx"'); header("Content-Disposition:attachment;filename=$fileName.xlsx");//attachment新窗口打印inline本窗口打印 $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); $objWriter->save('php://output'); exit; } /** * 导出csv * @param string $fileName 输出的文件名 * @param array $header 第一行,列名,如:['序号', '姓名', '性别'] * @param array $data 要导出的数据,二维数组,如:[[1, '唐大勇', '男'], [2, 'ViViYong', '男']] */ function exportCsv($fileName, $header = array(), $data = array()) { header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="' . $fileName . '.csv"'); header('Cache-Control: max-age=0'); //打开PHP文件句柄,php://output 表示直接输出到浏览器 $fp = fopen('php://output', 'a'); //输出Excel列名信息 foreach ($header as $key => $value) { //CSV的Excel支持GBK编码,一定要转换,否则乱码 $header[$key] = iconv('utf-8', 'gbk', $value); } //将数据通过fputcsv写到文件句柄 fputcsv($fp, $header); //计数器 $num = 0; //每隔$limit行,刷新一下输出buffer,不要太大,也不要太小 $limit = 100000; //逐行取出数据,不浪费内存 $count = count($data); for ($i = 0; $i < $count; $i++) { $num++; //刷新一下输出buffer,防止由于数据过多造成问题 if ($limit == $num) { ob_flush(); flush(); $num = 0; } $row = $data[$i]; foreach ($row as $key => $value) { $row[$key] = iconv('utf-8', 'gbk', $value); } fputcsv($fp, $row); } }
php数据导出
最新推荐文章于 2022-12-06 11:06:06 发布