PHP操作EXCEL类:PHPEXCEL.php
官网:http://www.codeplex.com/PHPExcel
引用文件(下面2段代码都需要)
require 'phpexcel/PHPExcel.php';
==================下面是上传EXCEL文件导入SQL的代码(含简易文件上传代码)
if (! empty ( $_FILES ['file_stu'] ['name'] ))
{
$tmp_file = $_FILES ['file_stu'] ['tmp_name'];
$file_types = explode ( ".", $_FILES ['file_stu'] ['name'] );
$file_type = $file_types [count ( $file_types ) - 1];
/*判别是不是.xls文件,判别是不是excel文件*/
if (strtolower ( $file_type ) != "xlsx" ) exit('不是Excel文件,重新上传');
/*设置上传路径*/
$savePath = 'tmp/';
$file_name = "data.xlsx";
/*是否上传成功*/
if (! copy ( $tmp_file, $savePath . $file_name )) exit('上传失败');
//读取EXCEL文件
set_time_limit(30);
$objPHPExcel = PHPExcel_IOFactory::load($savePath . $file_name);
// 读取规则 【Sheet1是页名称,这里固定使用默认的第一页】
//ABCD用于后面循环 A1,A2,A3,A4,A5,B1...
$sheet_read_arr = array();
$sheet_read_arr["Sheet1"] = array("A","B","C","D","E","F","G","H","I","J","K");
// 循环所有的页 (上面只定义了一页,所以循环才一次)
foreach ($sheet_read_arr as $key => $val)
{
$currentSheet = $objPHPExcel->getSheetByName($key);// 通过页名称取得当前页
if (!$currentSheet)
{
echo 'EXCEL的页名错误.确定是【Sheet1】.第一个字母大写';exit;
}
//var_dump($currentSheet);exit;
$row_num = $currentSheet->getHighestRow();// 当前页行数
// 循环从第二行开始,第一行往往是表头
for ($i = 2; $i <= $row_num; $i++)
{
$cell_values = array();
foreach ($val as $cell_val)
{
$address = $cell_val . $i;// 单元格坐标 ('A'+2=A2...)
// 读取单元格内容
$cell_values[] = $currentSheet->getCell($address)->getFormattedValue();
}
$cell_values_arr[] = $cell_values;
}
}
//开始导入数据库。开始计时
$start = microtime(true);
//开启SQLITE 事务。
$conn->exec("begin transaction");
//更新数据计数$x
foreach ($cell_values_arr as $list) {
//数据处理略过...
$conn->exec("INSERT INTO ..");//这里插入语句,这里插入并不会执行
}
$conn->exec("commit transaction"); //这里开始执行上面插入的数据
$end = microtime(true);
//清除临时文件夹
file_put_contents($savePath . $file_name, '');
//输出内容
echo '<br>导入成功!';
echo '<br>导入数据:'.$x.'条';
echo '<br>执行时间:'.($end - $start);
echo '<br>临时文件删除!';
}
==================================下面是PHP导出到EXCEL的代码
//....
//PHP查询SQL部分略过...最终导入数组文件$mainlist
//.......
// 首先创建一个新的对象 PHPExcel object
$objPHPExcel = new phpexcel();
//使用磁盘缓存。速度慢。但是占内存小
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_discISAM;
PHPExcel_Settings::setCacheStorageMethod($cacheMethod);
// 设置文件的一些属性,在xls文件——>属性——>详细信息里可以看到这些值,xml表格里是没有这些值的
$objPHPExcel
->getProperties() //获得文件属性对象,给下文提供设置资源
->setCreator( "Maarten Balliauw") //设置文件的创建者
->setLastModifiedBy( "Maarten Balliauw") //设置最后修改者
->setTitle( "Office 2007 XLSX Test Document" ) //设置标题
->setSubject( "Office 2007 XLSX Test 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', '你好' ) //给表的单元格设置数据
->setCellValue( 'B1', '安哥!' ) //数据格式可以为字符串
->setCellValue( 'C1', 12) //数字型
->setCellValue( 'D1', 12) //
->setCellValue( 'E1', true ) //布尔型
->setCellValue( 'F1', '=SUM(C1:D2)' );//公式
//设置填充的样式和背景色(第一行)
$objPHPExcel->getActiveSheet()->getStyle( 'A1:F1')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
$objPHPExcel->getActiveSheet()->getStyle( 'A1:F1')->getFill()->getStartColor()->setARGB('fff4f4f4');
//字体设置粗体
//$objPHPExcel->getActiveSheet()->getStyle( 'A1:S1')->getFont()->setBold(true);
$num = 1;
foreach ($mainlist as $list) {
$num++;
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue( 'A'.$num , $list['a]) )
->setCellValue( 'B'.$num , $list['b'] )
->setCellValue( 'C'.$num , $list['c'] )
->setCellValue( 'D'.$num , $list['d'] )
->setCellValue( 'E'.$num , $list['e'] )
->setCellValue( 'F'.$num , $list['f'] )
}
$num = $num+2;//空1行
//合并最后一行单元格。显示统计信息
$objPHPExcel->getActiveSheet()->mergeCells( 'A'.$num.':'.'S'.$num);
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue( 'A'.$num , '本信息由系统自动生成.共导信息数:'.($num-3) );
//得到当前活动的表,注意下文教程中会经常用到$objActSheet
$objActSheet = $objPHPExcel->getActiveSheet();
// 给当前活动的表设置名称
$objActSheet->setTitle('XX列表');
// 生成2003excel格式的xls文件
//文件名:2014-3-4-3.xls (时间.xls)
$filename = date("Y-m-d")'.xls';
//ob_end_clean(); //防止乱码
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'.$filename.'"');
header('Cache-Control: max-age=0');
//直接弹出下载文件。
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
exit;