使用新的excel库

feat/task1-c-wallet
gongfuxiang 2022-01-10 23:59:50 +08:00
parent 10ef323352
commit 74e46b7ab1
1 changed files with 130 additions and 96 deletions

View File

@ -32,7 +32,7 @@ class Excel
private $writer_type;
/**
* [__construct 构造方法]
* 构造方法
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
@ -88,7 +88,40 @@ class Excel
}
/**
* [Export excel文件导出]
* 根据字段个数,设置表头排序字母
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2022-01-10
* @desc description
*/
public function GetLetterData()
{
$letter_str = '';
if(!empty($this->title) && is_array($this->title))
{
$count = count($this->title);
for($i='A',$k=0; $i<='Z'; $i++, $k++)
{
if($k == $count)
{
break;
}
// 最后一个取消逗号
if($k == ($count-1))
{
$letter_str .= $i;
} else {
$letter_str .= $i.',';
}
}
}
return explode(',', $letter_str);
}
/**
* excel文件导出
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
@ -104,98 +137,98 @@ class Excel
die;
}
// excel对象
$excel = new \PHPExcel();
// 操作第一个工作表
$excel->setActiveSheetIndex(0);
// 文件输出类型
switch($this->file_type)
{
// PDF
case 'pdf':
$writer = PHPExcel_IOFactory::createWriter($excel, 'PDF');
$writer->setSheetIndex(0);
break;
// 默认EXCEL
default:
$writer = \PHPExcel_IOFactory::createWriter($excel, $this->writer_type);
}
// 获取配置编码类型
$excel_charset = MyC('admin_excel_charset', 0);
$charset = MyConst('common_excel_charset_list')[$excel_charset]['value'];
// 水平,垂直居中
if($this->horizontal_center == 1)
{
$excel->getActiveSheet()->getDefaultStyle()->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
}
if($this->vertical_center == 1)
{
$excel->getActiveSheet()->getDefaultStyle()->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
}
// 获取字母
$letter_data = $this->GetLetterData();
//设置自动换行
if($this->warap_text == 1)
{
$excel->getActiveSheet()->getDefaultStyle()->getAlignment()->setWrapText(true);
}
// excel对象
$spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
// 标题
$temp_key = 0;
$temp_cum = 0;
$temp_row = 1;
foreach($this->title as $k=>$v)
{
$col = \PHPExcel_Cell::stringFromColumnIndex($temp_key).'1';
$excel->getActiveSheet()->setCellValue($col, ($excel_charset == 0) ? $v['name'] : iconv('utf-8', $charset, $v['name']));
$temp_key++;
if(array_key_exists($temp_cum, $letter_data))
{
$temp_letter = $letter_data[$temp_cum].$temp_row;
$value = ($excel_charset == 0) ? $v['name'] : iconv('utf-8', $charset, $v['name']);
$sheet->setCellValue($temp_letter, $value);
$sheet->getStyle($temp_letter)->getFont()->setBold(true);
$temp_cum++;
}
}
// 内容
$temp_row = 2;
foreach($this->data as $k=>$v)
{
$i = $k+2;
if(is_array($v) && !empty($v))
{
$temp_key = 0;
$temp_cum = 0;
foreach($this->title as $tk=>$tv)
{
$height = isset($tv['height']) ? intval($tv['height']) : 0;
$width = isset($tv['width']) ? intval($tv['width']) : $height;
$col = \PHPExcel_Cell::stringFromColumnIndex($temp_key);
if($tv['type'] == 'images')
if(array_key_exists($temp_cum, $letter_data))
{
$drawing = new \PHPExcel_Worksheet_Drawing();
$drawing->setPath($v[$tk]);
$temp_letter = $letter_data[$temp_cum];
$height = isset($tv['height']) ? intval($tv['height']) : 0;
$width = isset($tv['width']) ? intval($tv['width']) : $height;
if($tv['type'] == 'images')
{
$drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
$drawing->setPath($v[$tk]);
// 设置宽度高度
$number = empty($height) ? 50 : $height-10;
$drawing->setHeight($number);
$drawing->setWidth($number);
$drawing->setCoordinates($col.$i);
// 设置宽度高度
$number = empty($height) ? 50 : $height-10;
$drawing->setHeight($number);
$drawing->setWidth($number);
$drawing->setCoordinates($temp_letter.$temp_row);
// 图片偏移距离
$x = ($width > 0) ? (($width-$number)/2)+15 : 15;
$drawing->setOffsetX($x);
$drawing->setOffsetY(15);
$drawing->setWorksheet($excel->getActiveSheet());
} else {
$excel->getActiveSheet()->setCellValueExplicit($col.$i, ($excel_charset == 0) ? $v[$tk] : iconv('utf-8', $charset, $v[$tk]), \PHPExcel_Cell_DataType::TYPE_STRING);
// 图片偏移距离
$x = ($width > 0) ? ((