zl程序教程

您现在的位置是:首页 >  工具

当前栏目

PHPExcel导出excel

Excel导出 PHPExcel
2023-09-14 08:59:46 时间

//设置PHPExcel类库的includepath
set_include_path(..PATH_SEPARATOR.D:\workspace\biznaligy_eh\dev_src\includes\PHPExcel.PATH_SEPARATOR.get_include_path());

require_oncePHPExcel.php;
require_oncePHPExcel/Writer/Excel5.php;//用于其他低版本xls
require_oncePHPExcel/Writer/Excel2007.php;//用于excel-2007格式

//创建一个处理对象实例
$objExcel=newPHPExcel();

//创建文件格式写入对象实例,uncomment
$objWriter=newPHPExcel_Writer_Excel5($objExcel);//用于其他版本格式
//or
//$objWriter=newPHPExcel_Writer_Excel2007($objExcel);//用于2007格式
//$objWriter- setOffice2003Compatibility(true);

//设置文档基本属性
$objProps=$objExcel- getProperties();
$objProps- setCreator("ZealLi");
$objProps- setLastModifiedBy("ZealLi");
$objProps- setTitle("OfficeXLSTestDocument");
$objProps- setSubject("OfficeXLSTestDocument,Demo");
$objProps- setDescription("Testdocument,generatedbyPHPExcel.");
$objProps- setKeywords("officeexcelPHPExcel");
$objProps- setCategory("Test");
//设置当前的sheet索引,用于后续的内容操作。
//一般只有在使用多个sheet的时候才需要显示调用。
//缺省情况下,PHPExcel会自动创建第一个sheet被设置SheetIndex=0
$objExcel- setActiveSheetIndex(0);
$objActSheet=$objExcel- getActiveSheet();

//设置当前活动sheet的名称
$objActSheet- setTitle(测试Sheet);

//设置单元格内容由PHPExcel根据传入内容自动判断单元格内容类型
$objActSheet- setCellValue(A1,字符串内容);//字符串内容
$objActSheet- setCellValue(A2,26);//数值
$objActSheet- setCellValue(A3,true);//布尔值
$objActSheet- setCellValue(A4,=SUM(A2:A2));//公式

//显式指定内容类型
$objActSheet- setCellValueExplicit(A5,8757584,PHPExcel_Cell_DataType::TYPE_STRING);

//合并单元格
$objActSheet- mergeCells(B1:C22);

//分离单元格
$objActSheet- unmergeCells(B1:C22);

//设置宽度
$objActSheet- getColumnDimension(B)- setAutoSize(true); 
$objActSheet- getColumnDimension(A)- setWidth(30);


//设置格式为PHPExcel_Style_NumberFormat::FORMAT_NUMBER,避免某些大数字
//被使用科学记数方式显示,配合下面的setAutoSize方法可以让每一行的内容
//都按原始内容全部显示出来。
$objStyleA5=$objActSheet- getStyle(A5);
$objStyleA5- getNumberFormat()- setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER);

//设置字体
$objFontA5=$objStyleA5- getFont();
$objFontA5- setName(CourierNew);
$objFontA5- setSize(10);
$objFontA5- setBold(true);
$objFontA5- setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE);
$objFontA5- getColor()- setARGB(FFFF0000);
$objFontA5- getColor()- setARGB(PHPExcel_Style_Color::COLOR_WHITE);
//$objFontA5- getFont()- setColor(PHPExcel_Style_Color::COLOR_RED);

//设置对齐方式
$objAlignA5=$objStyleA5- getAlignment();
$objAlignA5- setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
$objAlignA5- setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objAlignA5- setWrapText(true);//自动换行,前提是单元格内的值超列宽,或者在值内写入个\n 
//设置边框
$objBorderA5=$objStyleA5- getBorders();
$objBorderA5- getTop()- setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objBorderA5- getTop()- getColor()- setARGB(FFFF0000);//边框color
$objBorderA5- getBottom()- setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objBorderA5- getLeft()- setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objBorderA5- getRight()- setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

//设置CELL填充颜色
$objFillA5=$objStyleA5- getFill();
$objFillA5- setFillType(PHPExcel_Style_Fill::FILL_SOLID);
$objFillA5- getStartColor()- setARGB(FFEEEEEE);

//从指定的单元格复制样式信息.
$objActSheet- duplicateStyle($objStyleA5,B1:C22);

//添加图片
$objDrawing = newPHPExcel_Worksheet_Drawing();
$objDrawing- setName(ZealImg);
$objDrawing- setDescription(ImageinsertedbyZeal);
$objDrawing- setPath(./zeali.net.logo.gif);
$objDrawing- setHeight(36);
$objDrawing- setCoordinates(C23);
$objDrawing- setOffsetX(10);
$objDrawing- setRotation(15);
$objDrawing- getShadow()- setVisible(true);
$objDrawing- getShadow()- setDirection(36);
$objDrawing- setWorksheet($objActSheet);

//添加一个新的worksheet
$objExcel- createSheet();
$objExcel- getSheet(1)- setTitle(测试2);


//保存,设置密码
$objPHPExcel- getActiveSheet()- getProtection()- setPassword(PHPExcel);
//保护单元格
$objExcel- getSheet(1)- getProtection()- setSheet(true);
$objExcel- getSheet(1)- protectCells(A1:C22,PHPExcel);

//显示网格线:
$objPHPExcel- getActiveSheet()- setShowGridlines(true); 

//显示隐藏列
$objPHPExcel- getActiveSheet()- getColumnDimension(C)- setVisible(true);
$objPHPExcel- getActiveSheet()- getColumnDimension(D)- setVisible(false);

//显示隐藏行
$objPHPExcel- getActiveSheet()- getRowDimension(10)- setVisible(false);
//默认列宽 
$objPHPExcel- getActiveSheet()- getDefaultColumnDimension()- setWidth(12);
//默认行宽 
$objPHPExcel- getActiveSheet()- getDefaultRowDimension()- setRowHeight(15);

//worksheet默认style设置(和默认不同的需单独设置)
$objPHPExcel- getActiveSheet()- getDefaultStyle()- getFont()- setName(Arial);
$objPHPExcel- getActiveSheet()- getDefaultStyle()- getFont()- setSize(8);
$alignment = $objPHPExcel- getActiveSheet()- getDefaultStyle()- getAlignment();
$alignment- setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$alignment- setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);

//输出内容到文件通过文件路径再用Ajax无刷新页面
$outputFileName="output.xls";
////$objWriter- save($outputFileName);
//输出内容到浏览器
header("Content-Type:application/force-download");
header("Content-Type:application/octet-stream");
header("Content-Type:application/download");
header(Content-Disposition:inline;filename=".$outputFileName.");
header("Content-Transfer-Encoding:binary");
header("Last-Modified:".gmdate("D,dMYH:i:s")."GMT");
header("Cache-Control:must-revalidate,post-check=0,pre-check=0");
header("Pragma:no-cache");
$objWriter- save(php://output);

 

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, PDF);
$objWriter- save(a.pdf)

 

 

上面的导出已实现,下面记录一些有用的方法

public function getCellByColumnAndRow($pColumn = 0, $pRow = 0) {
    return $this- getCell(PHPExcel_Cell::stringFromColumnIndex($pColumn) . $pRow);
}
print_r(PHPExcel_Cell::columnIndexFromString(D));exit; //echo 4
echo PHPExcel_Cell::stringFromColumnIndex(4) //  echo E
$columns = array(       A =  array(field =  name, title =  姓名, CellExplicit= PHPExcel_Cell_DataType::TYPE_STRING),       B =  array(field =  mobile, title =  手机号码),       C =  array(field =  accountNo, title =  支付宝账号),       D =  array(field =  apply_time, title =  申请时间),       E =  array(field =  amount, title =  金额),       F =  array(field =  status, title =  状态)   //excel 头   foreach ($columns as $word =  $column) {       $objExcel- setActiveSheetIndex(0)- setCellValue($word . "2", $column[title]);   // excel内容   $i = 3;   $maxWord = max(array_keys($columns));//F   foreach($list as $info){       for ($c = 0; $c   PHPExcel_Cell::columnIndexFromString($maxWord); $c++) {           $word = PHPExcel_Cell::stringFromColumnIndex($c);           if(isset($columns[$word][CellExplicit])){               $objExcel- getActiveSheet(0)- setCellValueExplicit($word . $i, $info[$columns[$word][field]], $columns[$word][CellExplicit]);           }else{               $objExcel- getActiveSheet(0)- setCellValue($word . $i,  $info[$columns[$word][field]]);            }       }       $i++;  
 //phpexcel默认是没有冻结的,下面是冻结列。定二则定全部
$sheet- freezePane(A1);
$sheet- freezePane(B1);        
冻结行
$sheet- freezePane(D1);
$sheet- freezePane(D2);
不能再次定义A,b,c否则列冻结被替代 public function freezePaneByColumnAndRow($pColumn = 0, $pRow = 0){
    $this- freezePane(PHPExcel_Cell::stringFromColumnIndex($pColumn) . $pRow);
}
public function unfreezePane() {
   $this- freezePane();
 }
$worksheet- setInputEncoding("UTF-8");
//$freeze = $sheet- getFreezePane();

用phpexcel批量设置单元格格式 


    borders =  array( //上下左右画线           top =  array(style =  PHPExcel_Style_Border::BORDER_THIN),           left =  array(style =  PHPExcel_Style_Border::BORDER_THIN),           bottom =  array(style =  PHPExcel_Style_Border::BORDER_THIN),           right =  array(style =  PHPExcel_Style_Border::BORDER_THIN)       ),       alignment =  array(           horizontal =  PHPExcel_Style_Alignment::HORIZONTAL_CENTER, //横向居中           vertical   =  PHPExcel_Style_Alignment::VERTICAL_CENTER, //纵向居中           wrap       =  true  //自动换行       )   $style_obj- applyFromArray($style_array);   $objExcel- getActiveSheet()- setSharedStyle($style_obj, "A1:J35");  

phpexcel大数据导出,数据追加(19万行,分20个sheet, 1万行是一个sheet,第一次到1个sheet数据,其他数据追加到excel分19次覆盖对应的sheet)

先用 PhpExcel 建立reader,再load文件,这样打开已经存在的文档,然后再建立writer,将reader中的数据都复制过来,再用 PhpExcel 进行数据修改,再以load的文件名覆盖保存。


require_once PHPExcel/IOFactory.php;   $reader = PHPExcel_IOFactory::createReader(CSV); //读取旧版 excel 档案   $PHPExcel = $reader- load(a.csv); // 档案名称   $sheet = $PHPExcel- getSheet(0); // 读取第一个工作表(编号从 0 开始)   $highestRow = $sheet- getHighestRow(); // 取得总行数   $highestColumn = $sheet- getHighestColumn(); // 取得总列数   $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);   for ($row = 2; $row  = $highestRow; $row++) {       $rowData = array();       for ($column = 0; $column  = $highestColumnIndex; $column++) {           $val = $sheet- getCellByColumnAndRow($column, $row)- getValue();           $rowData[$column] = $val;       }       //manager db insert