1) { $objPHPExcel = \PHPExcel_IOFactory::load($directory_name); } else { $objPHPExcel = new \PHPExcel(); } $this->sheetEdit($param, $objPHPExcel); if ($page > 1) { $path = "{$directory_name}"; } else { $this->createDir($directory_name); //生成文件目录 $directory_name = $directory_name . createKey() . '.xls'; $path = "{$directory_name}"; } $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save($path); ob_clean(); return [ 'directory_name' => $directory_name ]; } /** * 设置表格 * @param $param */ public function sheetEdit($param, $objPHPExcel) { $cellNum = $param['cellNum']; $expCellName = $param['expCellName']; $dataNum = $param['dataNum']; $expTableData = $param['expTableData']; $notes = $param['common']; $page = $param['page'] - 1; $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'); if ($page != '0') { $objPHPExcel->createSheet(); } $notes_count = count($notes); if ($notes_count > 0) { for ($s = 0; $s < $notes_count; $s++) { $objPHPExcel->getActiveSheet($page)->mergeCells('A' . ($s + 1) . ':' . $cellName[$cellNum - 1] . ($s + 1)); //合并单元格 $objPHPExcel->setActiveSheetIndex($page)->setCellValue('A' . ($s + 1) . '', $notes[$s]); } } for ($i = 0; $i < $cellNum; $i++) { $objPHPExcel->setActiveSheetIndex($page)->setCellValue($cellName[$i] . ($notes_count + 1), $expCellName[$i][1]); } for ($i = 0; $i < $dataNum; $i++) { for ($j = 0; $j < $cellNum; $j++) { $objPHPExcel->getActiveSheet($page)->setCellValue($cellName[$j] . ($i + $notes_count + 2), $expTableData[$i][$expCellName[$j][0]] . "\t"); } } foreach ($cellName as $value) { $objPHPExcel->getActiveSheet($page)->getColumnDimension($value)->setWidth(20); } } /** * 写入表格 把表格保存在服务器 * @param $expTitle * @param $expCellName * @param $expTableData * @param string $common * @param string $directory_name * @throws \PHPExcel_Exception * @throws \PHPExcel_Reader_Exception * @throws \PHPExcel_Writer_Exception */ public function setExcel($expTitle, $expCellName, $expTableData, $common = "", $directory_name = "./Public") { $fileName = $expTitle; //or $xlsTitle 文件名称可根据自己情况设定 $cellNum = count($expCellName); $dataNum = count($expTableData); vendor("PHPExcel.PHPExcel"); ob_clean(); $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'); $objPHPExcel->getActiveSheet(0)->mergeCells('A1:' . $cellName[$cellNum - 1] . '1'); //合并单元格 $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1', $common); for ($i = 0; $i < $cellNum; $i++) { $objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellName[$i] . '2', $expCellName[$i][1]); } for ($i = 0; $i < $dataNum; $i++) { for ($j = 0; $j < $cellNum; $j++) { $objPHPExcel->getActiveSheet(0)->setCellValue($cellName[$j] . ($i + 3), ' ' . $expTableData[$i][$expCellName[$j][0]]); } } foreach ($cellName as $value) { $objPHPExcel->getActiveSheet()->getColumnDimension($value)->setWidth(20); } $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $this->createDir($directory_name); //生成文件目录 $path = "{$directory_name}/{$fileName}.xls"; $objWriter->save($path); } /** * 生成文件目录 * @param $directory_name 目录地址 */ private function createDir($directory_name) { if (!is_dir($directory_name)) { $temp = ltrim($directory_name, './'); $arr = explode('/', $temp); $str = './'; foreach ($arr as $key => $sv) { if (!is_dir("{$str}/{$sv}")) { mkdir("{$str}/{$sv}", 0777); } $str = "{$str}/{$sv}"; } } } /** * 删除目录下的所有文件 * @param $dir 目录地址 */ public function delDirFile($dir) { $dh = opendir($dir); while ($file = readdir($dh)) { if ($file != "." && $file != "..") { $full_path = $dir . "/" . $file; if (!is_dir($full_path)) { unlink($full_path); } else { $this->delDirFile($full_path); } } } closedir($dh); } /** * 添加Excel表格到压缩包 * @param $path * @param $zip * @param string $name */ public function addFileToZip($path, $zip, $name = '商品档案导出') { $handler = opendir($path); //打开当前文件夹由$path指定。 while (($filename = readdir($handler)) !== false) { if ($filename != "." && $filename != "..") { //文件夹文件名字为'.'和‘..',不要对他们进行操作 if (is_dir($path . "/" . $filename)) { // 如果读取的某个对象是文件夹,则递归 $this->addFileToZip($path . "/" . $filename, $zip); } else { //将文件加入zip对象 $sName = $name . "-第" . explode('.', $filename)[1] . "页.xls"; $dir = iconv("utf-8", "gb2312", $sName); $zip->addFile($path . "/" . $filename, $dir); } } } @closedir($handler); } }