文件
mashangyoujiu/Application/Common/Business/Export.class.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);
}
}