Excel 数据的上传和下载 [ 1.1 版本 ]
难得今天也能过着打卡拿薪的无聊日子,写点东西。
由于工作需要,甲方版本限制了我只能用1.1的,所以用最新版本的同学请自行参考修改。
类库我用 PHPExcel 处理 excel 数据。
好了直接上代码:
配置引入类库
<?php 'import'=>array( 'application.models.*', 'application.components.*', 'application.controllers.*', 'application.extensions.*', 'application.extensions.PHPExcel.PHPExcel', ), ?>
excel上传部分代码
<?php $form_action = $_POST['form_action']; if ( $form_action == 'upload' and !empty($_FILES['excelForm'])) { $file = $model->dataFile = CUploadedFile::getInstance($model, 'dataFile'); //开始上传,生成对象 if ($model->validate() && $file->getType() == 'application/vnd.ms-excel') { $excelFile = $file->getTempName(); $fileName = $file->name; Yii::$enableIncludePath = false; Yii::import('application.extensions.PHPExcel.PHPExcel', 1); //为什么已经import了还要写这个的原因是yii的自动引入与类库自动引入有冲突 $extension = strtolower( pathinfo($fileName, PATHINFO_EXTENSION) ); if ($extension =='xlsx') { $excelReader = PHPExcel_IOFactory::createReader('Excel2007'); //excel版本 } else if ($extension =='xls') { $excelReader = PHPExcel_IOFactory::createReader('Excel5'); //excel版本 } $excelReader->setReadDataOnly(true); //这个的作用的是只读取excel有数据的行 $phpexcel = $excelReader->load($excelFile)->getSheet(0); //选择第一个工作表 sheet(0) $maxRow = $phpexcel->getHighestRow(); //这里开始读取处理excel数据,中间我有将excel的AQ列和AR列格式化时间 $maxColumn = $phpexcel->getHighestColumn(); $maxColumnNum = PHPExcel_Cell::columnIndexFromString($maxColumn); $data = array(); for ($i = 1; $i < $maxRow; $i++) { //从第二行开始循环读取,第一行有表title $rowData = array(); for ($j = 0; $j < $maxColumnNum; $j++) { $pCoordinate = PHPExcel_Cell::stringFromColumnIndex($j) . '' . ($i + 1); $k = PHPExcel_Cell::stringFromColumnIndex($j); if ($k == 'AQ' || $k == 'AR'){ $date = $phpexcel->getCell($pCoordinate) -> getFormattedValue(); $time = PHPExcel_Shared_Date::ExcelToPHP($date); if ($time>0){ $date = !empty($date) ? gmdate('Y-m-d H:i:s',$time) : ''; } else { $time = strtotime($date); $date = !empty($date) ? date('Y-m-d H:i:s',$time) : ''; } $rowData[] = $date; } else { $rowData[] = trim($phpexcel->getCell($pCoordinate)-> getValue()); } } $data[] = $rowData; //至此每行的数据已被放入$data数据中,后续处理我就不贴,每人需求不同 ?>
- excel 数据下载
数据下载就简单很多了,代码:
$excelData = Axxxxx::model()->getExcelData(); //拿出要下载的数据
$maxColumn = count($excelData[0]);
$maxRow = count($excelData);
$objPHPExcel = new PHPExcel();
for ($i = 0; $i < $maxColumn; $i++) { //循环处理数据生成excel对象
for ($j = 0; $j < $maxRow; $j++) {
$pCoordinate = PHPExcel_Cell::stringFromColumnIndex($i) . '' . ($j + 1);
$pValue = $excelData[$j][$i];
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue($pCoordinate, $pValue);
}
}
$objPHPExcel->getActiveSheet()->setTitle('文件sheet名称');//设置下载文件sheet名
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="下载文件名称"'); //设置文件名称
header('Cache-Control: max-age=0');
header("Expires: 0");
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output'); //输出下载
Manson 广州
注册时间:2017-11-30
最后登录:2021-04-29
在线时长:22小时11分
最后登录:2021-04-29
在线时长:22小时11分
- 粉丝1
- 金钱1010
- 威望30
- 积分1530
共 1 条评论
没有这么复杂吧