PHPExcel导入和导出的实现,导出数据过多失败,设置导出格式。
2018-03-28 10:22
856 查看
环境:thinkphp3.2,php5.6,mysql5.0,apache2.0。
导入原理:将phpExcel扩展类包移入项目,将excel表先下载,然后将其中的对应行列的数据添加到数据库中。
导出原理:查询数据库中的数据,导入到对应的excel表。
phpExcel包下载地址:https://download.csdn.net/download/qq_39545346/10312736
导入代码:
if (!empty($_FILES)) {
//获取后缀
$ext = strrchr($_FILES['file']['name'],'.');
//上传配置
$upload = new \Think\Upload();// 实例化上传类
$upload->maxSize = 0 ;// 设置附件上传大小
$upload->exts = array('xls');//设置附件上传类型
$upload->autoSub = false;
$upload->rootPath = './data/subject/'; // 设置附件上传目录
$upload->saveName = date("YmdHis",time()).rand(1000,9999);
//上传文件
$info = $upload->upload();
if(!$info) {
// 上传错误提示错误信息
$this->error($upload->getError());
}
//导入相关类(本人用的TP3.2,相关类放在Org/Util)
import("Org.Util.PHPExcel");
import("Org.Util.PHPExcel.IOFactory");
$file_name= $upload->rootPath.$info['import']['savename'];
$objPHPExcel = new \PHPExcel();
$objReader = \PHPExcel_IOFactory::createReader('Excel5');
$objPHPExcel = $objReader->load($file_name,$encode='utf-8');
$sheet = $objPHPExcel->getSheet(0);
$highestRow = $sheet->getHighestRow(); // 取得总行数
$highestColumn = $sheet->getHighestColumn(); // 取得总列数
//循环添加数据
for($i=3;$i<=$highestRow;$i++)
{
$data['parent_id'] = $objPHPExcel->getActiveSheet()->getCell("A".$i)->getValue();
// $data['res_id'] = $objPHPExcel->getActiveSheet()->getCell("D".$i)->getValue();
$data['title'] = $objPHPExcel->getActiveSheet()->getCell("B".$i)->getValue();
$data['option_a'] = $objPHPExcel->getActiveSheet()->getCell("C".$i)->getValue();
$data['option_b']= $objPHPExcel->getActiveSheet()->getCell("D".$i)->getValue();
$data['option_c']= $objPHPExcel->getActiveSheet()->getCell("E".$i)->getValue();
$data['option_d']= $objPHPExcel->getActiveSheet()->getCell("F".$i)->getValue();
$data['answer']= $objPHPExcel->getActiveSheet()->getCell("G".$i)->getValue();
$data['type']= $objPHPExcel->getActiveSheet()->getCell("H".$i)->getValue();
$data['better_explain']= $objPHPExcel->getActiveSheet()->getCell("I".$i)->getValue();
$res[] = M('subject')->add($data);
}
if($res){
$this->success('导入成功!');
}else{
$this->error('导入失败!');
}
}else
{
$this->error("请选择上传的文件");
}
导出函数:
function exportExcel($data, $savefile = null, $title = null, $sheetname = 'sheet1',$state=1) {
ini_set('memeory_limit','2048m');
ob_end_clean();
import("Org.Util.PHPExcel");
if (is_null($savefile)) {
$savefile = time();
}
if (is_array($title)) {
array_unshift($data, $title);
}
$objPHPExcel = new \PHPExcel();
$head_num = count($data);
foreach ($data as $k => $v) {
$obj = $objPHPExcel->setActiveSheetIndex(0);
$row = $k + 2;
$nn = 0;
foreach ($v as $vv) {
$col = chr(65 + $nn);
$obj->setCellValue($col . $row, $vv);
$nn++;
$objPHPExcel->getActiveSheet()->getStyle($col.$row)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
}
}
if($state == 1){
$objPHPExcel->getActiveSheet()->mergeCells('A1:I1');
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(15);
}
if($state == 2){
$objPHPExcel->getActiveSheet()->mergeCells('A1:C1');
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(20);
}
$objPHPExcel->getActiveSheet()->setCellValue('A1',$savefile);
//设置格式
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(15);
$objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(15);
$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(15);
$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(40);
$objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(15);
$objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(15);
$objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(20);
$objPHPExcel->getActiveSheet()->getColumnDimension('I')->setWidth(10);
$objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setSize(20);
$objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setBold(true);
$maxColumn = count($data[0]);
//此处循环解决多条数据导出失败
for ($j = 0; $j < $maxColumn; $j++) {
for ($i = 0; $i < $head_num - 1; $i++) {
$objPHPExcel->getActiveSheet()->getStyle($j . '2')->getFont()->setName("Candara");
$objPHPExcel->getActiveSheet()->getStyle($j . '2')->getFont()->setSize(12);
$objPHPExcel->getActiveSheet()->getStyle($j . '2')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_BLACK);
$objPHPExcel->getActiveSheet()->getStyle($j . '2')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle($j . '2')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); <
4000
br /> $objPHPExcel->getActiveSheet()->getStyle($j . '2')->getFont()->setBold(true);
}
}
$objPHPExcel->getActiveSheet()->setTitle($sheetname);
$objPHPExcel->setActiveSheetIndex(0);
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="' . $savefile . '.xls"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); //Excel5 Excel2007
$objWriter->save('php://output');
}
//第一个参数是导出数据(二维数组),第二个参数是表名称。
导入原理:将phpExcel扩展类包移入项目,将excel表先下载,然后将其中的对应行列的数据添加到数据库中。
导出原理:查询数据库中的数据,导入到对应的excel表。
phpExcel包下载地址:https://download.csdn.net/download/qq_39545346/10312736
导入代码:
if (!empty($_FILES)) {
//获取后缀
$ext = strrchr($_FILES['file']['name'],'.');
//上传配置
$upload = new \Think\Upload();// 实例化上传类
$upload->maxSize = 0 ;// 设置附件上传大小
$upload->exts = array('xls');//设置附件上传类型
$upload->autoSub = false;
$upload->rootPath = './data/subject/'; // 设置附件上传目录
$upload->saveName = date("YmdHis",time()).rand(1000,9999);
//上传文件
$info = $upload->upload();
if(!$info) {
// 上传错误提示错误信息
$this->error($upload->getError());
}
//导入相关类(本人用的TP3.2,相关类放在Org/Util)
import("Org.Util.PHPExcel");
import("Org.Util.PHPExcel.IOFactory");
$file_name= $upload->rootPath.$info['import']['savename'];
$objPHPExcel = new \PHPExcel();
$objReader = \PHPExcel_IOFactory::createReader('Excel5');
$objPHPExcel = $objReader->load($file_name,$encode='utf-8');
$sheet = $objPHPExcel->getSheet(0);
$highestRow = $sheet->getHighestRow(); // 取得总行数
$highestColumn = $sheet->getHighestColumn(); // 取得总列数
//循环添加数据
for($i=3;$i<=$highestRow;$i++)
{
$data['parent_id'] = $objPHPExcel->getActiveSheet()->getCell("A".$i)->getValue();
// $data['res_id'] = $objPHPExcel->getActiveSheet()->getCell("D".$i)->getValue();
$data['title'] = $objPHPExcel->getActiveSheet()->getCell("B".$i)->getValue();
$data['option_a'] = $objPHPExcel->getActiveSheet()->getCell("C".$i)->getValue();
$data['option_b']= $objPHPExcel->getActiveSheet()->getCell("D".$i)->getValue();
$data['option_c']= $objPHPExcel->getActiveSheet()->getCell("E".$i)->getValue();
$data['option_d']= $objPHPExcel->getActiveSheet()->getCell("F".$i)->getValue();
$data['answer']= $objPHPExcel->getActiveSheet()->getCell("G".$i)->getValue();
$data['type']= $objPHPExcel->getActiveSheet()->getCell("H".$i)->getValue();
$data['better_explain']= $objPHPExcel->getActiveSheet()->getCell("I".$i)->getValue();
$res[] = M('subject')->add($data);
}
if($res){
$this->success('导入成功!');
}else{
$this->error('导入失败!');
}
}else
{
$this->error("请选择上传的文件");
}
导出函数:
function exportExcel($data, $savefile = null, $title = null, $sheetname = 'sheet1',$state=1) {
ini_set('memeory_limit','2048m');
ob_end_clean();
import("Org.Util.PHPExcel");
if (is_null($savefile)) {
$savefile = time();
}
if (is_array($title)) {
array_unshift($data, $title);
}
$objPHPExcel = new \PHPExcel();
$head_num = count($data);
foreach ($data as $k => $v) {
$obj = $objPHPExcel->setActiveSheetIndex(0);
$row = $k + 2;
$nn = 0;
foreach ($v as $vv) {
$col = chr(65 + $nn);
$obj->setCellValue($col . $row, $vv);
$nn++;
$objPHPExcel->getActiveSheet()->getStyle($col.$row)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
}
}
if($state == 1){
$objPHPExcel->getActiveSheet()->mergeCells('A1:I1');
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(15);
}
if($state == 2){
$objPHPExcel->getActiveSheet()->mergeCells('A1:C1');
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(20);
}
$objPHPExcel->getActiveSheet()->setCellValue('A1',$savefile);
//设置格式
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(15);
$objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(15);
$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(15);
$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(40);
$objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(15);
$objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(15);
$objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(20);
$objPHPExcel->getActiveSheet()->getColumnDimension('I')->setWidth(10);
$objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setSize(20);
$objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setBold(true);
$maxColumn = count($data[0]);
//此处循环解决多条数据导出失败
for ($j = 0; $j < $maxColumn; $j++) {
for ($i = 0; $i < $head_num - 1; $i++) {
$objPHPExcel->getActiveSheet()->getStyle($j . '2')->getFont()->setName("Candara");
$objPHPExcel->getActiveSheet()->getStyle($j . '2')->getFont()->setSize(12);
$objPHPExcel->getActiveSheet()->getStyle($j . '2')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_BLACK);
$objPHPExcel->getActiveSheet()->getStyle($j . '2')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle($j . '2')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); <
4000
br /> $objPHPExcel->getActiveSheet()->getStyle($j . '2')->getFont()->setBold(true);
}
}
$objPHPExcel->getActiveSheet()->setTitle($sheetname);
$objPHPExcel->setActiveSheetIndex(0);
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="' . $savefile . '.xls"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); //Excel5 Excel2007
$objWriter->save('php://output');
}
//第一个参数是导出数据(二维数组),第二个参数是表名称。
相关文章推荐
- laravel框架实现excel表格数据导入导出-php
- 【代码实现】PHP导入Excel和导出数据为Excel文件
- PHPExcel导出导入excel、csv等格式数据
- PHP实现MySQL数据导出为EXCEL(CSV格式)
- php利用phpexcel插件实现数据的导入和导出(支持csv\xls\xlsx格式和超过26个字段列)
- 【代码实现】PHP导入Excel和导出数据为Excel文件
- C#用流实现DataGridView中数据Excel格式的导出
- 利用TOAD实现EXCEL数据在oracle的导入导出
- 【导出EXCEL汇编】asp.net 将数据导出到excel中,并设置其格式
- php数据导入导出之excel(csv文件)
- 使用phpExcel实现Excel数据的导入导出(完全步骤)
- 在项目中将数据导出为Excel格式时出现“检索COM 类工厂中CLSID 为 {00024500-0000-0000-C000-000000000046}的组件时失败
- 在VC++中实现Excel数据的导出/导入
- 轻松实现SQL Server与Access、Excel数据表间的导入导出
- 使用phpExcel实现Excel数据的导入导出(完全步骤)
- 使用PHP导入Excel和导出数据为Excel文件
- 利用TOAD实现EXCEL数据在oracle的导入导出
- 利用PHP-ExcelReader实现PHP导入Excel数据[不通过CSV]
- C# 实现Excel导出 加载模板 导入数据到模板
- php页面数据列表实现excel导出功能