yii2 php excel 导出,YII2 自定义导入导出Excel

这段代码提供了两个函数,`format_excel2array`用于读取Excel文件并将其转换为数组,支持用户和任务数据类型,同时处理了日期和特定列的转换。`format_array2excel`函数则将数据数组导出为Excel文件,包含自定义表头。这两个函数对于数据导入导出操作非常实用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**

********************************************************

* 函数名: format_excel2array

* 参数:

* @param string $filePath Excel文件路径

* @param int $sheet Excel指定表

* @param string $header 导入的Excel数据类型。必须在全局变量中定义'excel_' . $header . '_header',user用户,task广告主任务

* 'excel_user_header' => ['A'=>'user_realname',"B"=>'user_name',"C"=>"user_dept","D"=>'grade_id'],

* 函数描述:

* @return array|void

*******************************************************

*/

public function format_excel2array($filePath='',$sheet=0,$header='user'){

$excel_header = Yii::$app->params['excel_' . $header . '_header'];

$grade_arr = array_flip(Yii::$app->params['grade_arr']);

require dirname(dirname(__FILE__)).'/components/PHPExcel/PHPExcel.php';

if(empty($filePath) or !file_exists($filePath)){die('file not exists');}

$PHPReader = new \PHPExcel_Reader_Excel2007(); //建立reader对象

if(!$PHPReader->canRead($filePath)){

$PHPReader = new PHPExcel_Reader_Excel5();

if(!$PHPReader->canRead($filePath)){

echo 'no Excel';

return ;

}

}

$PHPExcel = $PHPReader->load($filePath); //建立excel对象

$currentSheet = $PHPExcel->getSheet($sheet); //**读取excel文件中的指定工作表*/

$allColumn = $currentSheet->getHighestColumn(); //**取得最大的列号*/

$allRow = $currentSheet->getHighestRow(); //**取得一共有多少行*/

$data = array();

for($rowIndex=2; $rowIndex<=$allRow; $rowIndex++ ){ //循环读取每个单元格的内容。注意行从1开始,列从A开始

for($colIndex='A'; $colIndex<=$allColumn; $colIndex++){

$addr = $colIndex.$rowIndex;

$cell = $currentSheet->getCell($addr)->getValue();

if($cell instanceof PHPExcel_RichText){ //富文本转换字符串

$cell = $cell->__toString();

}

if($colIndex == "D" && $header == 'user'){

$cell = $grade_arr[$cell];

}

if($colIndex == "A" && $header == 'task'){

$cell = \PHPExcel_Shared_Date::ExcelToPHP($cell);

}

$data[$rowIndex-1][$excel_header[$colIndex]] = $cell;

}

}

return $data;

}

/**

********************************************************

* 函数名: format_array2excel

* 参数:

* @param $data 导出的数据

* @param string $filename 导出的文件名

* @param $header 在全局变量 $pramas 中必须定义 excel_'.$header.'_export相应的数组作为导出表头

* 'excel_user_export' => [

* 'A'=>['key'=>'user_realname','label'=>'姓名'],

* "B"=>['key'=>'user_name','label'=>'帐号'],

* "C"=>['key'=>"user_dept",'label'=>"部门"],

* "D"=>['key'=>'grade_id','label'=>'职位']

* ],

* 函数描述:把数组导出到Excel

*******************************************************

*/

function format_array2excel($data,$filename='Excel',$header){

require dirname(dirname(__FILE__)).'/components/PHPExcel/PHPExcel.php';

date_default_timezone_set('Europe/London');

$header = Yii::$app->params['excel_'.$header.'_export'];

$grede_arr = Yii::$app->params['grade_arr'];

$objPHPExcel = new \PHPExcel();

/*以下是一些设置 ,什么作者 标题啊之类的*/

$objPHPExcel->getProperties()->setCreator("Hsuanyuen.chenyan")

->setLastModifiedBy("Hsuanyuen.chenyan")

->setTitle("用户导出")

->setSubject("数据EXCEL导出")

->setDescription("备份数据")

->setKeywords("excel")

->setCategory("数据导出");

/*以下就是对处理Excel里的数据, 横着取数据,主要是这一步,其他基本都不要改*/

foreach ($header as $k => $v ){

//Excel的第A列,uid是你查出数组的键值,下面以此类推

$objPHPExcel->setActiveSheetIndex(0)->setCellValue($k.'1', $v['label']);

$keys[$k]=$v['key'];

}

foreach($data as $k => $v){

$num= $k+2;

foreach ($header as $kk => $vv ) {

//Excel的第A列,uid是你查出数组的键值,下面以此类推

$objPHPExcel->setActiveSheetIndex()->setCellValue($kk . $num, $v[$vv['key']]);

}

}

$objPHPExcel->getActiveSheet()->setTitle('User');

$objPHPExcel->setActiveSheetIndex(0);

header('Content-Type: application/vnd.ms-excel');

header('Content-Disposition: attachment;filename="'.$filename.'.xls"');

header('Cache-Control: max-age=0');

$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');

$objWriter->save('php://output');

exit;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值