您的位置:首页 > 编程语言 > PHP开发

PHPExcel-1.8.1导入、导出Excel表格

2017-06-09 17:38 447 查看
仅留作记录使用:

/**
* 读取文件方案一
*/
public function readExcel()
{

require_once VENDOR_PATH . 'PhpExcel/PHPExcel/IOFactory.php';

// 循环遍历数据
$objReader = \PHPExcel_IOFactory::createReader('Excel2007'); // 创建一个2007的读取对象
$file = getcwd() . '/internalAPNAndMCC.xlsx';
$objPHPExcel = $objReader->load($file); // 读取一个xlsx文件
foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) { // 遍历工作表
echo 'Worksheet - ' , $worksheet->getTitle() , PHP_EOL;
foreach ($worksheet->getRowIterator() as $row) { // 遍历行
echo 'Row number - ' , $row->getRowIndex(), PHP_EOL;
$cellIterator = $row->getCellIterator(); // 得到所有列
$cellIterator->setIterateOnlyExistingCells(false); // 让迭代器只对现有的单元进行循环
foreach ($cellIterator as $cell) { // 遍历列
if (!is_null($cell)) { //如果列不是空就得到它的坐标和计算的值
echo 'Cell - ', $cell->getCoordinate(), '-', $cell->getCalculatedValue() , PHP_EOL;
}
}
}

}
}
使用TP3.2.3上传&导入数据库:

/**
* 批量导入产品
*/
public function p_bulk_import(){
$file = $_FILES['excel'];
if ($file['name']) {
$upload = new \Think\Upload();
$upload->maxSize   =     3145728 ;// 设置附件上传大小
$upload->exts      =     array('xls', 'xlsx', 'csv');// 设置附件上传类型
$upload->rootPath  =     UPLOAD_DIR; // 设置附件上传根目录
$upload->savePath  =     'excel/'; // 设置附件上传(子)目录
//$upload->autoSub   = 	 false;//是否使用子目录保存上传文件
$info   =   $upload->upload();

if ( !$info ) {// 上传错误提示错误信息
$this->error($upload->getError());
} else {
foreach ($info as $file) {
$file_path = $file['savepath'].$file['savename'];
}
}
}

// 引入PHPEXCEL类
require_once VENDOR_PATH.'PhpExcel/PHPExcel/IOFactory.php';
require_once VENDOR_PATH.'PhpExcel/PHPExcel.php';
// 判断文件版本,选择对应的解析文件
if ('xlsx' == $info['excel']['ext']) {
require_once VENDOR_PATH.'PhpExcel/PHPExcel/Reader/Excel2007.php';
$objReader = \PHPExcel_IOFactory::createReader('Excel2007');
} else {
require_once VENDOR_PATH.'PhpExcel/PHPExcel/Reader/Excel5.php';
$objReader = \PHPExcel_IOFactory::createReader('Excel5');
}

// 解析Excel文件
$objPHPExcel = $objReader->load(getcwd() . "/" . UPLOAD_DIR . $file_path);
// 读取第一个工作表(编号从 0 开始)
$sheet = $objPHPExcel->getSheet(0);
// 取得总行数
$highestRow = $sheet->getHighestRow();
// 取得总列数
$highestColumn = $sheet->getHighestColumn();

// 循环读取excel文件,读取一条,插入数组一条
for ($j=2;$j<=$highestRow;$j++) {
for ($k='A';$k<=$highestColumn;$k++) {
// 读取单元格
$examPaper_arr[$j][$k] = $objPHPExcel->getActiveSheet()->getCell("$k$j")->getValue();
}
}

$sum = 0;
// 重复总数
$user_repeat = 0;
$user = M("apn_new");
$tour_level = M("product_new");
// 开启事务
$user->startTrans();
foreach ($examPaper_arr as $key=>$value) {
//             print_r($key . '==>' . $value[A] . '\r\n' . $value[B]);
if ($user->where("tel='$value[C]'")->find()) {
$user_repeat++;
} else {
$data['name'] = empty($value['C']) ? 0 : $value['C'];
$data['password'] = empty($value['C']) ? 0 : md5($value['C']);
$data['tel'] = empty($value['C']) ? 0 : $value['C'];
$data['create_time'] = time();
$uid = $user->add($data);
if ($uid) {
// 判断导游的类型,0:头目
if (0 == $value['E']) {
$tid = $tour_level->where("id_card='$value[D]'")->find();
if (!$tid) { // 未找到导游头目
$t_data['name'] = empty($value['B']) ? 0 : $value['B'];
$t_data['id_card'] = empty($value['D']) ? 0 : $value['D'];
$t_data['device_id'] = $uid;
$t_data['created_time'] = date("Y.m.d");
$t_data['level'] = 0;
$t_data['fid'] = 0;
$fid = $tour_level->add($t_data);
} else {
$fid = $tid;
}
} else {
$t_data['name'] = empty($value['B']) ? 0 : $value['B'];
$t_data['id_card'] = empty($value['D']) ? 0 : $value['D'];
$t_data['device_id'] = $uid;
$t_data['created_time'] = date("Y.m.d");
$t_data['level'] = 1;
$t_data['fid'] = !isset($fid) ? 3 : $fid;
$tour_level->add($t_data);
}
// 提交事务
$user->commit();
} else {
// 事务回滚
$user->rollback();
}
$sum++;
}
}

echo "上传结束<br/>插入总数:".$sum.";重复总数:".$user_repeat;die;
}
/**
* 生成Excel、csv、pdf表格
*/
public function generalExcel()
{
// 引入PHPEXCEL类
require_once VENDOR_PATH.'PhpExcel/PHPExcel/IOFactory.php';
require_once VENDOR_PATH.'PhpExcel/PHPExcel.php';
// 判断文件版本,选择对应的解析文件
require_once VENDOR_PATH.'PhpExcel/PHPExcel/Reader/Excel2007.php';

$objPHPExcel = new \PHPExcel();
// 设置Excel表格参数
$objPHPExcel->getProperties()
->setCreator("Maarten Balliauw")
->setLastModifiedBy("Maarten Balliauw")
->setTitle("Office 2007 XLSX Document")
->setSubject("Office 2007 XLSX Document")
->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
->setKeywords("office 2007 openxml php")
->setCategory("Test result file");

// 给表格添加数据
$objPHPExcel->setActiveSheetIndex(0)             //设置第一个内置表(一个xls文件里可以有多个表)为活动的
->setCellValue( 'A1', 'Hello' )         //给表的单元格设置数据
->setCellValue( 'B2', 'world!' )      //数据格式可以为字符串
->setCellValue( 'C1', 12)            //数字型
->setCellValue( 'D2', 12)            //
->setCellValue( 'D3', true )           //布尔型
->setCellValue( 'D4', '=SUM(C1:D2)' );//公式

//得到当前活动的表,注意下文教程中会经常用到$objActSheet
$objActSheet = $objPHPExcel->getActiveSheet();
// 位置bbb  *为下文代码位置提供锚
// 给当前活动的表设置名称
$objActSheet->setTitle('Simple2222');
//         日期格式      锚:bbb
//获得秒值变量
$dateTimeNow = time();
//三个表格分别设置为当前实际的日期格式、时间格式、日期和时间格式
//首先将单元格的值设置为由PHPExcel_Shared_Date::PHPToExcel方法转换后的excel格式的值,然后用过得到该单元格的样式里面数字样式再设置显示格式
$objActSheet->setCellValue( 'C9', \PHPExcel_Shared_Date::PHPToExcel( $dateTimeNow ));
$objActSheet->getStyle( 'C9')->getNumberFormat()->setFormatCode(\PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDD2);
$objActSheet->setCellValue( 'C10', \PHPExcel_Shared_Date::PHPToExcel( $dateTimeNow ));
$objActSheet->getStyle( 'C10')->getNumberFormat()->setFormatCode(\PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME4);
$objActSheet->setCellValue( 'C10', \PHPExcel_Shared_Date::PHPToExcel( $dateTimeNow ));
$objActSheet->getStyle( 'C10')->getNumberFormat()->setFormatCode(\PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME4);
//将E4到E13的数字格式设置为EUR
$objPHPExcel->getActiveSheet()->getStyle( 'E4:E13')->getNumberFormat()->setFormatCode(\PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_EUR_SIMPLE);

//         设置列的宽度
$objActSheet->getColumnDimension( 'B')->setAutoSize(true);   //内容自适应
$objActSheet->getColumnDimension( 'A')->setWidth(30);         //30宽

// 创建一个富文本框(实例)
$objRichText = new \PHPExcel_RichText();
$objRichText->createText("unless specified otherwise on the invoice.");
// 将文字写入到A18单元格中
$objPHPExcel->getActiveSheet()->getCell("A28")->setValue("$objRichText");
// 合并、拆分单元格
$objPHPExcel->getActiveSheet()->mergeCells('A28:B28'); // A28:B28合并
$objPHPExcel->getActiveSheet()->unmergeCells('A28:B28'); // A28:B28再拆分
// object
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('myexcel.xlsx');

//         设置表格样式和数据格式
//         设置默认的字体和文字大小
$objPHPExcel->getDefaultStyle()->getFont()->setName( 'Arial');
$objPHPExcel->getDefaultStyle()->getFont()->setSize(20);

//         2、提示下载文件
// 生成2003excel格式的xls文件
//         header('Content-Type: application/vnd.ms-excel');
//         header('Content-Disposition: attachment;filename="01simple.xls"');
//         header('Cache-Control: max-age=0');

//         $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
//         $objWriter->save('php://output');
//         exit;

//         生成2007excel格式的xlsx文件
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="01simple.xlsx"');
header('Cache-Control: max-age=0');

$objWriter = \PHPExcel_IOFactory:: createWriter($objPHPExcel, 'Excel2007');
$objWriter->save( 'php://output');
exit;

// 下载一个pdf文件
//         header('Content-Type: application/pdf');
//         header('Content-Disposition: attachment;filename="01simple.pdf"');
//         header('Cache-Control: max-age=0');

//         $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'PDF');
//         $objWriter->save('php://output');
//         exit;

// 生成一个pdf文件
//         $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'PDF');
//         $objWriter->save('a.pdf');

// CSV 文件
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'CSV')->setDelimiter(',' )  //设置分隔符
->setEnclosure('"' )    //设置包围符
->setLineEnding("\r\n" )//设置行分隔符
->setSheetIndex(0)      //设置活动表
->save(str_replace('.php' , '.csv' , __FILE__));

var_dump($objWriter);
}


关于PHPExcel的详细操作方法可以参考http://www.smsyun.com/home-index-page-id-290.html此文(内容格式有点乱,可能是博主未来的及整理格式),是一片笔记,囊括了几乎常用到的对Excel的操作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  PHP Excel