PHPExcel 導出 導入

通過PHPExcel_IOFactory的靜態方法createReader或createWriter,必須傳入文檔格式所對應的參數字符串

//設置PHPExcel類庫的includepath
set_include_path('.'.PATH_SEPARATOR.'D:\workspace\biznaligy_eh\dev_src\includes\PHPExcel'.PATH_SEPARATOR.get_include_path());

//創建一個處理對象實例
$objPHPExcel=new PHPExcel();

//創建文件格式寫入對象實例,uncomment
//$objWriter=new PHPExcel_Writer_Excel2007($objPHPExcel);//用於2007格式
//$objWriter->setOffice2003Compatibility(true);

//設置文檔基本屬性
$objProps=$objPHPExcel->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
$objPHPExcel->setActiveSheetIndex(0);
$objActSheet=$objPHPExcel->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');

//默認列寬
$objPHPExcel->getActiveSheet()->getDefaultColumnDimension()->setWidth(12);

//默認行寬
$objPHPExcel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(15);

//設置寬度
$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);

//日期格式化
$objPHPExcel->getActiveSheet()->setCellValue('D1', time());
$objPHPExcel->getActiveSheet()->getStyle('D1')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDDSLASH);

//數字格式化
$objPHPExcel->getActiveSheet()->getStyle('E4')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_EUR_SIMPLE);

//設置字體
$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);

//設置對齊方式   ->setCellValue('A4', "Hello\nWorld");
$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);

//顯示網格線:
$objPHPExcel->getActiveSheet()->setShowGridlines(true);

//Add comment 添加註釋
$objPHPExcel->getActiveSheet()->getComment('E11')->setAuthor('PHPExcel');
$objCommentRichText = $objPHPExcel->getActiveSheet()->getComment('E11')->getText()->createTextRun('PHPExcel:');
$objCommentRichText->getFont()->setBold(true);
$objPHPExcel->getActiveSheet()->getComment('E11')->getText()->createTextRun("\r\n");
$objPHPExcel->getActiveSheet()->getComment('E11')->getText()->createTextRun('Total amount on the current invoice, excluding VAT.');

//Add rich-text string 添加文字 可設置樣式
$objRichText = new PHPExcel_RichText( $objPHPExcel->getActiveSheet()->getCell('A18') );
$objRichText->createText('This invoice is ');
$objPayable = $objRichText->createTextRun('payable within thirty days after the end of the month');
$objPayable->getFont()->setBold(true);
$objPayable->getFont()->setItalic(true);
$objPayable->getFont()->setColor( new PHPExcel_Style_Color( PHPExcel_Style_Color::COLOR_DARKGREEN ) );
$objRichText->createText(', unless specified otherwise on the invoice.');

//Add a hyperlink to the sheet 添加鏈接
$objPHPExcel->getActiveSheet()->setCellValue('E26', 'www.phpexcel.net');
$objPHPExcel->getActiveSheet()->getCell('E26')->getHyperlink()->setUrl('http://www.phpexcel.net');
$objPHPExcel->getActiveSheet()->getCell('E26')->getHyperlink()->setTooltip('Navigate to website');
$objPHPExcel->getActiveSheet()->getStyle('E26')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);

//Play around with inserting and removing rows and columns
$objPHPExcel->getActiveSheet()->insertNewRowBefore(6, 10);
$objPHPExcel->getActiveSheet()->removeRow(6, 10);
$objPHPExcel->getActiveSheet()->insertNewColumnBefore('E', 5);
$objPHPExcel->getActiveSheet()->removeColumn('E', 5);

//Add conditional formatting
$objConditional1 = new PHPExcel_Style_Conditional();
$objConditional1->setConditionType(PHPExcel_Style_Conditional::CONDITION_CELLIS);
$objConditional1->setOperatorType(PHPExcel_Style_Conditional::OPERATOR_LESSTHAN);
$objConditional1->setCondition('0');
$objConditional1->getStyle()->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED);
$objConditional1->getStyle()->getFont()->setBold(true);

//Set autofilter 自動過濾
$objPHPExcel->getActiveSheet()->setAutoFilter('A1:C9');

//設置文檔安全 打開需要密碼Excel2007生效
$objPHPExcel->getSecurity()->setLockWindows(true);
$objPHPExcel->getSecurity()->setLockStructure(true);
$objPHPExcel->getSecurity()->setWorkbookPassword("PHPExcel");

//設置工作表安全 全部只讀
$objPHPExcel->getActiveSheet()->getProtection()->setPassword('password');//設置保護密碼
$objPHPExcel->getActiveSheet()->getProtection()->setSheet(true);// This should be enabled in order to enable any of the following!
$objPHPExcel->getActiveSheet()->protectCells('A1:C22');
//Set outline levels
$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setOutlineLevel(1);
$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setVisible(false);
$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setCollapsed(true);

//Freeze panes
$objPHPExcel->getActiveSheet()->freezePane('A2');

//Rows to repeat at top
$objPHPExcel->getActiveSheet()->getPageSetup()->setRowsToRepeatAtTopByStartAndEnd(1, 1);

//Set data validation 驗證輸入值
$objValidation = $objPHPExcel->getActiveSheet()->getCell('B3')->getDataValidation();
$objValidation->setType( PHPExcel_Cell_DataValidation::TYPE_WHOLE );
$objValidation->setErrorStyle( PHPExcel_Cell_DataValidation::STYLE_STOP );
$objValidation->setAllowBlank(true);
$objValidation->setShowInputMessage(true);
$objValidation->setShowErrorMessage(true);
$objValidation->setErrorTitle('Input error');
$objValidation->setError('Number is not allowed!');
$objValidation->setPromptTitle('Allowed input');
$objValidation->setPrompt('Only numbers between 10 and 20 are allowed.');
$objValidation->setFormula1(10);
$objValidation->setFormula2(20);
$objPHPExcel->getActiveSheet()->getCell('B3')->setDataValidation($objValidation);

//創建新的工作標籤
$objPHPExcel->createSheet();

//顯示隱藏列
$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setVisible(true);
$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setVisible(false);
//顯示隱藏行
$objPHPExcel->getActiveSheet()->getRowDimension('10')->setVisible(false);

//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);

做軟件中難免會遇到數據導入的功能,而數據導入要生成一個模板,模板中有些字段是需要固定那幾種的,下拉菜單,就是EXCEL中的數據有效性,簡單研究一下,下面把源碼貼出來:

$objValidation = $objActSheet->getCell("A1")->getDataValidation(); //這一句爲要設置數據有效性的單元格

$objValidation -> setType(PHPExcel_Cell_DataValidation::TYPE_LIST)
           -> setErrorStyle(PHPExcel_Cell_DataValidation::STYLE_INFORMATION)
           -> setAllowBlank(false)
           -> setShowInputMessage(true)
           -> setShowErrorMessage(true)
           -> setShowDropDown(true)
           -> setErrorTitle('輸入的值有誤')
           -> setError('您輸入的值不在下拉框列表內.')
           -> setPromptTitle('設備類型')
           -> setFormula1('"列表項1,列表項2,列表項3"');

上面的導出已實現,下面記錄一些有用的方法

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
//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批量設置單元格格式 

$style_obj = new PHPExcel_Style();
$style_array = array(
    '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的文件名覆蓋保存。

$reader = new PHPExcel_Reader_Excel2007;
$workbook = $reader->load("document.xlsx");
$workbook->getActiveSheet()->getSecurity()->setWorkbookPassword("your password");

方法二,分批導出,導出多次,多個文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章