209 行
7.4 KiB
PHP
可执行文件
209 行
7.4 KiB
PHP
可执行文件
<?php
|
|
|
|
namespace Common\Business;
|
|
//[1.6.48]
|
|
|
|
|
|
/**
|
|
* 文件与压缩包类
|
|
* Class Export
|
|
* [
|
|
* 写入表格 把表格保存在服务器 generateXLS 新版
|
|
* 写入表格 把表格保存在服务器 setExcel 旧版添加到压缩包
|
|
* 生成文件目录 createDir
|
|
* 删除目录下的所有文件 delDirFile
|
|
* 添加Excel表格到压缩包 addFileToZip
|
|
* ]
|
|
* @package Common\Business
|
|
*/
|
|
class Export
|
|
{
|
|
/**
|
|
* 写入表格 把表格保存在服务器 generateXLS 新版
|
|
* @param $param
|
|
* [
|
|
* expTitle
|
|
* expCellName
|
|
* expTableData
|
|
* common
|
|
* directory_name
|
|
* page
|
|
* ]
|
|
* @return array
|
|
* @throws \PHPExcel_Reader_Exception
|
|
* @throws \PHPExcel_Writer_Exception
|
|
*/
|
|
public function generateXLS($param)
|
|
{
|
|
vendor("PHPExcel.PHPExcel");
|
|
import("Vendor.PHPExcel.Writer.Excel5");
|
|
import("Vendor.PHPExcel.IOFactory.php");
|
|
$directory_name = $param['directory_name'];
|
|
$page = $param['page'];
|
|
$param['cellNum'] = count($param['expCellName']);
|
|
$param['dataNum'] = count($param['expTableData']);
|
|
if ($page > 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);
|
|
}
|
|
} |