下載地址
https://github.com/PHPOffice/PHPExcel
PHPExcel1.8.0 的目錄結構
下載下來目錄如下圖,我們只需要關注下面幾個:
Classes : 主要類文件,我們主要是使用這個文件夾
Docmentation : 文檔
Examples : 例子
composer.json : 主要的配置文件
使用PHPExcel的要求
打開composer.json 可以看到所需要的的環境要求
必須:
1.PHP版本高於5.2.0
2.mbstring擴展
3.xml擴展
4.xmlwriter擴展
推薦要有:
1.zip擴展
2.gd擴展
滿足php版本高於5.2並且安裝了5個擴展後,將classes裏的文件拷貝一份放入創建的phpexcel文件夾中,開始使用。
PHPExcel基本使用
excel 文件的創建和保存
<?php //引入PHPExcel文件 require './Classes/PHPExcel.php'; //1.文件的創建 //創建PHPExcel對象 $obj = new PHPExcel(); //寫入excel操作 //使用工廠的方式創建excel寫入對象 //第二個參數可以寫'excel2007'或者 ''Excel5'' // $writer = PHPExcel_IOFactory::createWriter($obj, 'Excel5'); $writer = PHPExcel_IOFactory::createWriter($obj, 'excel2007'); //或如下方式 $writer = new PHPExcel_Writer_Excel5($obj); //2.文件的保存 //可以保存文件到本地 $writer->save('1.xls'); //文件名亂碼的解決 $filename = iconv('utf-8', 'gbk', '中文.xls'); $writer->save($filename); //也可以瀏覽器輸出 header('Content-Type: application/vnd.ms-execl'); header('Content-Disposition: attachment;filename="文件名.xls"'); header('Cache-Control: max-age=0'); $writer->save('php://output'); //內容亂碼問題 //使用瀏覽器輸出時,header頭部加上(也就是前面)ob_end_clean(); ?>
操作工作表和設置單元格的值
<?php //引入PHPExcel文件 require './Classes/PHPExcel.php'; //1.文件的創建 //創建PHPExcel對象 $obj = new PHPExcel(); //創建excel文件寫入對象 $writer = new PHPExcel_Writer_Excel5($obj); //操作工作表(worksheet) //創建工作表方法一 $sheet = new PHPExcel_Worksheet($obj, 'new sheet'); $obj->addSheet($sheet); //創建工作表方法二 $obj->createSheet(); //設置當前工作表,也就是excel從左往右,從0開始 $obj->setActiveSheetIndex(0); //得到當前工作表對象 $curSheet = $obj->getActiveSheet(); //往工作表中插入數據 //設置單元格的值 $curSheet->setCellValue('A1', '10'); $curSheet->setCellValue('A2', '20'); $curSheet->setCellValue('A3', '=sum(A1:A2)'); ob_end_clean(); //瀏覽器輸出 header('Content-Type: application/vnd.ms-execl'); header('Content-Disposition: attachment;filename="測試寫入單元格.xls"'); header('Cache-Control: max-age=0'); $writer->save('php://output'); ?>
設置樣式
<?php //引入PHPExcel文件 require './Classes/PHPExcel.php'; //1.文件的創建 //創建PHPExcel對象 $obj = new PHPExcel(); //創建excel文件寫入對象 $writer = new PHPExcel_Writer_Excel5($obj); //操作工作表(worksheet) //創建工作表方法一 $sheet = new PHPExcel_Worksheet($obj, 'new sheet'); $obj->addSheet($sheet); //創建工作表方法二 $obj->createSheet(); //設置當前工作表,也就是excel從左往右,從0開始 $obj->setActiveSheetIndex(0); //得到當前工作表對象 $curSheet = $obj->getActiveSheet(); //往工作表中插入數據 //設置單元格的值 $curSheet->setCellValue('A1', '10'); $curSheet->setCellValue('A2', '20'); $curSheet->setCellValue('A3', '=sum(A1:A2)'); //設置樣式 //加粗 $curSheet->getStyle('A1')->getFont()->setBold(true); //斜體 $curSheet->getStyle('A1')->getFont()->setItalic(true); //字體顏色 $curSheet->getStyle('A1')->getFont()-> setColor(new PHPExcel_Style_Color(PHPExcel_Style_Color::COLOR_DARKGREEN)); //字體 $curSheet->getStyle('A1')->getFont()->setName('宋體'); //字體大小 $curSheet->getStyle('A1')->getFont()->setSize(20); //設置列寬 $curSheet->getColumnDimension('A')->setWidth(20); $curSheet->getColumnDimension('A')->setAutoSize(true); //設置行高 $curSheet->getRowDimension('1')->setRowHeight(20); //設置邊框 $curSheet->getStyle('A1')->getBorders()->getTop() ->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); //設置邊框顏色 $curSheet->getStyle('A1')->getBorders()->getTop()->getColor()->setARGB('FF336600'); //設置填充色 $curSheet->getStyle('A1')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID); $curSheet->getStyle('A1')->getFill()->getStartColor()->setARGB('FFFF0000'); ob_end_clean(); //瀏覽器輸出 header('Content-Type: application/vnd.ms-execl'); header('Content-Disposition: attachment;filename="測試設置樣式.xls"'); header('Cache-Control: max-age=0'); $writer->save('php://output'); ?>
單元格的合併、多行多列合併、插入行、刪除行、插入列、刪除列
<?php //引入PHPExcel文件 require './Classes/PHPExcel.php'; //1.文件的創建 //創建PHPExcel對象 $obj = new PHPExcel(); //創建excel文件寫入對象 $writer = new PHPExcel_Writer_Excel5($obj); //操作工作表(worksheet) //創建工作表方法一 $sheet = new PHPExcel_Worksheet($obj, 'new sheet'); $obj->addSheet($sheet); //創建工作表方法二 $obj->createSheet(); //設置當前工作表,也就是excel從左往右,從0開始 $obj->setActiveSheetIndex(0); //得到當前工作表對象 $curSheet = $obj->getActiveSheet(); //往工作表中插入數據 //設置單元格的值 $curSheet->setCellValue('A1', '10'); $curSheet->setCellValue('A2', '20'); $curSheet->setCellValue('A3', '=sum(A1:A2)'); //單元格的合併 $curSheet->mergeCells('A1:A3'); //多行多列合併 $col1 = 2;//第三列 $row1 = 2;//第三行 $col2 = 3;//第四列 $row2 = 3;//第四行 $curSheet->mergeCellsByColumnAndRow($col1,$row1,$col2,$row2); //插入一行(在before之前插入$rowNums行) $curSheet->insertNewRowBefore($before=1, $rowNums=1); //刪除行(從row開始刪除$rowNums行) $curSheet->removeRow($row=1,$rowNums=1); //插入列(在before之前添加$colNums列) $curSheet->insertNewColumnBefore($before='A', $colNums=1); //刪除列(從col開始刪除$colNums列) $curSheet->removeColumn($col='A', $colNums); ob_end_clean(); //瀏覽器輸出 header('Content-Type: application/vnd.ms-execl'); header('Content-Disposition: attachment;filename="測試合併-插入-刪除.xls"'); header('Cache-Control: max-age=0'); $writer->save('php://output'); ?>
插入圖片
<?php //引入PHPExcel文件 require './Classes/PHPExcel.php'; //1.文件的創建 //創建PHPExcel對象 $obj = new PHPExcel(); //創建excel文件寫入對象 $writer = new PHPExcel_Writer_Excel5($obj); //操作工作表(worksheet) //創建工作表方法一 $sheet = new PHPExcel_Worksheet($obj, 'new sheet'); $obj->addSheet($sheet); //創建工作表方法二 $obj->createSheet(); //設置當前工作表,也就是excel從左往右,從0開始 $obj->setActiveSheetIndex(0); //得到當前工作表對象 $curSheet = $obj->getActiveSheet(); //往工作表中插入數據 //插入圖片 // 1、創建圖片操作對象 $img = new PHPExcel_Worksheet_Drawing(); // 2、設置圖片路徑 $img->setPath("./1.jpg"); // 3、設置圖片寬高 $img->setWidth(533); $img->setHeight(533); // 4、設置圖片插入位置 $img->setCoordinates('A1'); // 5、設置圖片偏移量 $img->setOffsetX(100); // 6、設置圖片傾斜 $img->setRotation(25); // 7、添加到工作表 $img->setWorksheet($curSheet); ob_end_clean(); //瀏覽器輸出 header('Content-Type: application/vnd.ms-execl'); header('Content-Disposition: attachment;filename="測試插入圖片.xls"'); header('Cache-Control: max-age=0'); $writer->save('php://output'); ?>
讀取excel相關的操作函數
//創建excel讀對象 $reader = PHPExcel_IOFactory::createReader('Excel5'); //or $reader = new PHPExcel_Reader_Excel5(); //得到excel操作對象 $excel = PHPExcel_IOFactory::load(excel路徑); //or $excel = $reader->load(excel路徑); //獲取表的相應數據 //獲取工作表數量 $excel->getSheetCount(); //獲取工作表名 $excel->getSheetNames(); //根據表名切換當前工作表 $excel->setActiveSheetIndexByName(); //獲取整個內容返回數組 $excel->getActiveSheet()->toArray(); //通過reader對象獲取excel表的信息 $reader->listWorkSheetInfo(路徑); $reader->listWorkSheetNames(路徑); //獲取當前工作表最大行數 $excel->getActiveSheet()->getHighestRow(); //獲取當前工作表最大列數 $excel->getActiveSheet()->getHighestColumn(); //獲取單個單元格內容 $curSheet->getCell('A1')->getValue();
循環讀取excel中所有Sheet數據
先準備數據:
Sheet1:
Sheet2:
循環讀取示例:
<?php //引入PHPExcel文件 require './Classes/PHPExcel.php'; //創建excel讀對象 $reader = PHPExcel_IOFactory::createReader('Excel5'); //得到excel操作對象 $excel = PHPExcel_IOFactory::load('./test.xls'); //放入數組 $data = array(); //獲取所有工作表名 $SheetNamas = $excel->getSheetNames(); //遍歷工作表 for($i = 0; $i < count($SheetNamas); $i++){ //獲取當前工作表名 $SheetName = $SheetNamas[$i]; //根據表名切換當前工作表 $excel->setActiveSheetIndexByName($SheetName); //得到當前工作表對象 $curSheet = $excel->getActiveSheet(); //獲取當前工作表最大行數 $rows = $curSheet->getHighestRow(); //獲取當前工作表最大列數,返回的是最大的列名,如:B $cols = $curSheet->getHighestColumn(); //將當前工作表名當鍵,內容爲值存入數組 $data[$SheetName] = array(); //大寫字母A的ASCII值是65 A-Z對應65-90 for($j = 'A'; $j <= $cols; $j++ ){ for($k = 1; $k <= $rows; $k++){ $key = $j.$k; $value = $curSheet->getCell($key)->getValue(); $data[$SheetName][$key] = $value; } } } echo json_encode($data); ?>
數據如下圖:
讀取excel大批量轉換成sql
生成大批量的excel數據
<?php set_time_limit(0); //引入PHPExcel文件 require './Classes/PHPExcel.php'; $start = microtime(true); $excel = new PHPExcel(); $writer = PHPExcel_IOFactory::createWriter($excel, 'Excel5'); $curSheet = $excel->getActiveSheet(); $rows = 10000; $cols = range('A', 'M'); for($i = 1; $i <= $rows; ++$i) { foreach($cols as $col) { $cellName = $col . $i; $curSheet->setCellValue($cellName, uniqid(mt_rand(), true)); } } $writer->save('./data.xls'); $end = microtime(true); echo $end - $start; ?>
批量轉化成sql
<?php set_time_limit(60); ini_set("memory_limit", "128M"); //引入PHPExcel文件 require './Classes/PHPExcel.php'; $start = microtime(true); $cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip; $cacheSettings = array(); PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings); //加載excel文件 $excel = PHPExcel_IOFactory::load('./data.xls'); $curSheet = $excel->getActiveSheet(); //sql文件保存路徑 $sqlFile = dirname(__FILE__) . '/data.sql'; $fp = fopen($sqlFile, 'ab+'); $rows = $curSheet->getHighestRow(); $cols = $curSheet->getHighestColumn(); //將列名轉爲列數 $cols = PHPExcel_Cell::columnIndexFromString($cols); for($i = 1; $i <= $rows; ++$i) { $rowStr = "INSERT INTO `test` VALUES(NULL,"; for($j = 0; $j < $cols; ++$j) { //將列數轉換爲列名 $cellName = PHPExcel_Cell::stringFromColumnIndex($j) . $i; $cellValue = $curSheet->getCell($cellName)->getValue(); $cellValue = iconv('GBK', 'UTF-8', $cellValue); $rowStr .= "'{$cellValue}',"; } $rowStr = rtrim($rowStr, ",") . ");\r\n"; fwrite($fp, $rowStr); } fclose($fp); $end = microtime(true); echo $end - $start;
主要的幾個類庫和API
(1)PHPExcel:工作簿對象 excel文檔處理對象主要用來管理我們的excel文檔,怎麼來管理(通過屬性和方法來管理)?大家知道,類主要是由屬性和方法來組成,通過php程序的手段來管理excel文檔,其實就是通過本對象的屬性和方法來管理,下面我們就來看一下PHPExcel類中都有那些屬性和方法,這些屬性和方法主要用來管理excel文檔的那些方面 getProperties():獲得當前活動狀態工作表的屬性對象,返回屬性對象 getActiveSheet():獲得當前活動狀態的工作表,返回工作表對象 getActiveSheetIndex():獲得當前活動狀態工作表的索引值,返回int setActiveSheetIndex():設置當前活動狀態工作表的索引,返回工作表對象 getSheetByName():通過工作表名稱得到當前工作表對象,返回工作表對象 getDefaultStyle():獲得excel文檔默認的樣式(所有工作表的樣式),返回樣式對象 createSheet():在當前活動工作表後創建一個新的工作表 getSheetCount():獲得excel文檔中工作表的數量,返回int getSheetNames():獲得excel文檔中所有工作表名稱組成的數組 (2)PHPExcel_Worksheet:工作表對象 工作表對象,主要用來管理我們的工作表,怎麼管理?也是通過屬性和方法來管理,但是工作表對象大部分情況下可通過excel文檔對象來獲取 toArray():把工作表中的數據轉換成數組 fromArray():從數組中獲取數據填充到工作表,返回工作表對象 getCell():獲得單元格對象 getCellByColumnAndRow():通過列索引和行索引獲得指定單元格,返回單元格對象 getDefaultStyle():獲得工作表默認的樣式,返回樣式對象 getHighestColumn():獲得工作表的最大列,返回列的名稱 getColumnDimension():獲得當前列 getStyle():獲得指定單元格的樣式,返回樣式對象 getParent():獲得父類對象,返回excel文檔對象 getTitle():獲得工作表的標題或名稱,返回字符串類型 setCellValue():設置單元格的值,返回工作表對象或單元格對象,完全取決於參數的值 setCellValueByColumnAndRow():通過列索引和行索引設置單元格的值,返回類型同上 setCellValueExplicit():設置單元格的值,並顯示指定數據類型,返回工作表對象 setCellValueExplicitByColumnAndRow():通過列和行索引設置單元格值 setTitle():設置工作表標題 (3)PHPExcel_Cell:單元格對象 (3)PHPExcel_Style:樣式對象,主要用來設置單元格的樣式:對齊方式、字體、邊框、填充等,跟我們之前學過的css樣式差不多,在這裏如果想要設置對齊方式、字體大小、邊框顏色、等等都是通過樣式對象來完成的 getActiveCell():獲得當前活動的單元格的名稱,返回string;如,A1 getActiveSheet():獲得當前活動的工作表,返回工作表對象 getAlignment():獲得對齊方式對象,返回對齊方式對象 getBorders():獲得邊框對象,返回邊框對象 getFill():獲得填充對象 getFont():獲得字體對象 setFont():設置字體,返回樣式對象 (3)PHPExcel_Style_Alignment:對齊方式對象 getHorizontal():獲得水平居中方式 getVertical():獲得垂直居中方式 setHorizontal():設置水平居中方式,返回對齊方式對象 setVertical():設置垂直居中方式,返回對齊方式對象 居中方式: HORIZONTAL_CENTER HORIZONTAL_CENTER_CONTINUOUS HORIZONTAL_GENERAL HORIZONTAL_JUSTIFY HORIZONTAL_LEFT HORIZONTAL_RIGHT VERTICAL_BOTTOM VERTICAL_CENTER VERTICAL_JUSTIFY VERTICAL_TOP (3)PHPExcel_Style_Font:字體對象 setBold():設置字體加粗 setColor():設置字體顏色 setItalic():設置字體傾斜 setName():設置字體名 setSize():設置字體大小 setUnderline():設置字體下劃線 (4)PHPExcel_Writer_Excel5:寫操作對象,主要用來輸出xls文件 save(工作簿文件名):將工作簿對象中的數據保存到一個工作簿文件中 (4)PHPExcel_Writer_Excel2007:寫操作對象,主要用於輸出xlsx文件 save(工作簿文件名):將工作簿對象中的數據保存到一個工作簿文件中 (5)PHPExcel_Reader_Excel5:讀操作對象,主要用於輸入xls文件 canRead():當前reader對象是否能夠讀工作簿文件 load():從一個工作簿文件中加載工作簿對象,也就是將工作簿文件中的數據加載到工作簿對象中來管理 (6)PHPExcel_IOFactory:讀寫操作對象 createReader():根據參數的不同,創建不同的讀對象:主要作用是讀取工作簿文件中的數據 createWriter():根據參數的不同,返回不同的寫對象:主要作用是將PHPExcel工作簿對象中的數據寫入到一個工作簿文件中 load():從工作簿文件中加載PHPExcel工作簿對象,即:將工作簿文件中數據加載到PHPExcel工作簿對象中來管理 PHPExcel對象:是一個工作簿對象 include_once "PHPExcel/Writer/Excel5.php";//主要用於其它低版本,且文件名後綴爲xls的文件,如果我們希望生成後綴名爲xls格式的excel文件,建議引入此類庫 include_once "PHPExcel/Writer/Excel2007.php";//主要用於excel2007格式,文件名後綴爲xlsx的excel文件,如果我們希望生成後綴名爲xlsx格式的excel文件,建議引入此類庫 $objWriter = new PHPExcel_Writer_Excel5($objExcel);//創建一個文件格式寫入對象實例,此對象主要用來寫入內容到指定格式的文件,如,寫入內容到後綴名爲xls格式的excel文件等,用於其它板式的格式 $objWriter = new PHPExcel_Writer_Excel2007($objExcel);//創建一個文件格式寫入對象實例,此對象主要用來寫入內容到指定格式的文件,如,寫入內容到後綴名爲xls格式的excel文件等,用於excel2007格式 $objWriter->setOffice2003Compatibility(true);//兼容office2003 //設置文檔基本屬性 $objProps = $objExcel->getProperties(); //得到PHPExcel_document文檔對象 $objProps->setCreator("Zeal Li"); //設置作者 $objProps->setLastModifiedBy("Zeal Li"); //設置最後修改時間 $objProps->setTitle("Office XLS Test Document"); //設置標題 $objProps->setSubject("Office XLS Test Document, Demo");//設置主題 $objProps->setDescription("Test document, generated by PHPExcel.");//描 $objProps->setKeywords("office excel PHPExcel"); //關鍵字 $objProps->setCategory("Test"); //分類 $objExcel->setActiveSheetIndex(0);//設置用戶打開excel文件時,看到的首張sheet,如果沒有設置,默認爲最後一次操作的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','847475847857487584',PHPExcel_Cell_DataType::TYPE_STRING); //合併單元格 $objActSheet->mergeCells('B1:C22'); //設置列的寬度 $objActSheet->getColumnDimension('B')->setAutoSize(true); $objActSheet->getColumnDimension('A')->setWidth(30); //設置行的高度 $objPHPExcel->getActiveSheet()->getRowDimension('2')->setRowHeight(11.5); //格式:主要用來對單元格進行操作,如,設置字體、設置對齊方式、設置邊框等 $objStyleA5 = $objActSheet->getStyle('A5');//獲取A5單元格的樣式 //設置單元格的字體 $objFontA5 = $objStyleA5->getFont(); //獲得字體 $objFontA5->setName('宋體');//設置字體名稱 $objFontA5->setSize(10); //設置字體大小 $objFontA5->setBold(true);//設置字體加粗 $objFontA5->getColor()->setARGB('FF999999');//設置字體顏色 //設置單元格的對齊方式 $objAlignA5 = $objStyleA5->getAlignment();//獲得對齊方式 $objAlignA5->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);//水平居右 $objAlignA5->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);//垂直居中 //設置單元格的邊框 $objBorderA5 = $objStyleA5->getBorders();//獲取邊框 $objBorderA5->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);//邊框樣式 $objBorderA5->getTop()->getColor()->setARGB('FFFF0000');//頂部邊框的顏色 $objBorderA5->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); $objBorderA5->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);//左樣式 $objBorderA5->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);//右樣式 //設置單元格的填充色 $objFillA5 = $objStyleA5->getFill();//填充 $objFillA5->setFillType(PHPExcel_Style_Fill::FILL_SOLID);//填充類型 $objFillA5->getStartColor()->setARGB('FFEEEEEE'); //計算單元格的值 $objPHPExcel->getActiveSheet()->setCellValue('B7', '=SUM(B5:C5)'); $objPHPExcel->getActiveSheet()->getCell('B7')->getCalculatedValue(); //如果要獲取單元格的一個值,首先需要通過工作表的getCell方法獲取到一個單元格對象,然後再通過單元格對象的getValue方法得到單元格的值,如果單元格的值是通過計算得到的,則需要使用getCalculatedValue方法獲取單元格的值,設置單元格的值,我們只需要通過工作表的setCellValue方法來設置即可 //$dateTimeNow=time(); $objPHPExcel->getActiveSheet()->setCellValue('C10', PHPExcel_Shared_Date::PHPToExcel( $dateTimeNow ));//41105.75 $objPHPExcel->getActiveSheet()->getStyle('C10')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME4);//18:00:54,只是換了一種顯示方式,並不會改變原來值的類型 echo gettype($objPHPExcel->getActiveSheet()->getCell('C10')->getValue());//double echo $objPHPExcel->getActiveSheet()->getCell('C10')->getValue();//41105.75 //'2010-10-21'一定要放在引號中,否則顯示的值爲,1979 文本(推薦) $objPHPExcel->setActiveSheetIndex(0)->setCellValueExplicit("D1", '2010-10-21', PHPExcel_Cell_DataType::TYPE_STRING); //特徵:字符串類型都是居左顯示 //添加一個新的worksheet $objExcel->createSheet();//創建一個新的工作表 $objExcel->getSheet(1)->setTitle('測試2');//設置當前工作表的標題 //保護單元格 $objExcel->getSheet(1)->getProtection()->setSheet(true); $objExcel->getSheet(1)->protectCells('A1:C22', 'PHPExcel'); //輸出內容到excel文件,並將文件保存在服務器上 $objWriter->save("test.xls"); //強制輸出內容到瀏覽器下載 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("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Pragma: no-cache"); $objWriter->save('php://output');//參數-表示直接輸出到瀏覽器,供客戶端下載 //excel讀取對象 $PHPReader = new PHPExcel_Reader_Excel5();//創建一個excel文件的讀取對象 $PHPExcel = $PHPReader->load($filePath);//讀取一張excel表,返回excel文件對象 $currentSheet = $PHPExcel->getSheet(0);//讀取excel文件中的第一張工作表 $allColumn = $currentSheet->getHighestColumn();//取得當前工作表最大的列號,如,E $allRow = $currentSheet->getHighestRow();//取得當前工作表一共有多少行 //設置工作簿默認的樣式 $objPHPExcel->getDefaultStyle()->getFont()->setName('Arial'); $objPHPExcel->getDefaultStyle()->getFont()->setSize(8); //合併單元格 $objPHPExcel->getActiveSheet()->mergeCells('A18:E22');
本文作者:makalo
本文鏈接:https://www.cnblogs.com/makalochen/p/12834440.html
版權聲明:本作品採用知識共享署名-非商業性使用-禁止演繹 2.5 中國大陸許可協議進行許可。
(1)PHPExcel:工作簿對象
excel文檔處理對象主要用來管理我們的excel文檔,怎麼來管理(通過屬性和方法來管理)?大家知道,類主要是由屬性和方法來組成,通過php程序的手段來管理excel文檔,其實就是通過本對象的屬性和方法來管理,下面我們就來看一下PHPExcel類中都有那些屬性和方法,這些屬性和方法主要用來管理excel文檔的那些方面
getProperties():獲得當前活動狀態工作表的屬性對象,返回屬性對象
getActiveSheet():獲得當前活動狀態的工作表,返回工作表對象
getActiveSheetIndex():獲得當前活動狀態工作表的索引值,返回int
setActiveSheetIndex():設置當前活動狀態工作表的索引,返回工作表對象
getSheetByName():通過工作表名稱得到當前工作表對象,返回工作表對象
getDefaultStyle():獲得excel文檔默認的樣式(所有工作表的樣式),返回樣式對象
createSheet():在當前活動工作表後創建一個新的工作表
getSheetCount():獲得excel文檔中工作表的數量,返回int
getSheetNames():獲得excel文檔中所有工作表名稱組成的數組
(2)PHPExcel_Worksheet:工作表對象
工作表對象,主要用來管理我們的工作表,怎麼管理?也是通過屬性和方法來管理,但是工作表對象大部分情況下可通過excel文檔對象來獲取
toArray():把工作表中的數據轉換成數組
fromArray():從數組中獲取數據填充到工作表,返回工作表對象
getCell():獲得單元格對象
getCellByColumnAndRow():通過列索引和行索引獲得指定單元格,返回單元格對象
getDefaultStyle():獲得工作表默認的樣式,返回樣式對象
getHighestColumn():獲得工作表的最大列,返回列的名稱
getColumnDimension():獲得當前列
getStyle():獲得指定單元格的樣式,返回樣式對象
getParent():獲得父類對象,返回excel文檔對象
getTitle():獲得工作表的標題或名稱,返回字符串類型
setCellValue():設置單元格的值,返回工作表對象或單元格對象,完全取決於參數的值
setCellValueByColumnAndRow():通過列索引和行索引設置單元格的值,返回類型同上
setCellValueExplicit():設置單元格的值,並顯示指定數據類型,返回工作表對象
setCellValueExplicitByColumnAndRow():通過列和行索引設置單元格值
setTitle():設置工作表標題
(3)PHPExcel_Cell:單元格對象
(3)PHPExcel_Style:樣式對象,主要用來設置單元格的樣式:對齊方式、字體、邊框、填充等,跟我們之前學過的css樣式差不多,在這裏如果想要設置對齊方式、字體大小、邊框顏色、等等都是通過樣式對象來完成的
getActiveCell():獲得當前活動的單元格的名稱,返回string;如,A1
getActiveSheet():獲得當前活動的工作表,返回工作表對象
getAlignment():獲得對齊方式對象,返回對齊方式對象
getBorders():獲得邊框對象,返回邊框對象
getFill():獲得填充對象
getFont():獲得字體對象
setFont():設置字體,返回樣式對象
(3)PHPExcel_Style_Alignment:對齊方式對象
getHorizontal():獲得水平居中方式
getVertical():獲得垂直居中方式
setHorizontal():設置水平居中方式,返回對齊方式對象
setVertical():設置垂直居中方式,返回對齊方式對象
居中方式:
HORIZONTAL_CENTER
HORIZONTAL_CENTER_CONTINUOUS
HORIZONTAL_GENERAL
HORIZONTAL_JUSTIFY
HORIZONTAL_LEFT
HORIZONTAL_RIGHT
VERTICAL_BOTTOM
VERTICAL_CENTER
VERTICAL_JUSTIFY
VERTICAL_TOP
(3)PHPExcel_Style_Font:字體對象
setBold():設置字體加粗
setColor():設置字體顏色
setItalic():設置字體傾斜
setName():設置字體名
setSize():設置字體大小
setUnderline():設置字體下劃線
(4)PHPExcel_Writer_Excel5:寫操作對象,主要用來輸出xls文件
save(工作簿文件名):將工作簿對象中的數據保存到一個工作簿文件中
(4)PHPExcel_Writer_Excel2007:寫操作對象,主要用於輸出xlsx文件
save(工作簿文件名):將工作簿對象中的數據保存到一個工作簿文件中
(5)PHPExcel_Reader_Excel5:讀操作對象,主要用於輸入xls文件
canRead():當前reader對象是否能夠讀工作簿文件
load():從一個工作簿文件中加載工作簿對象,也就是將工作簿文件中的數據加載到工作簿對象中來管理
(6)PHPExcel_IOFactory:讀寫操作對象
createReader():根據參數的不同,創建不同的讀對象:主要作用是讀取工作簿文件中的數據
createWriter():根據參數的不同,返回不同的寫對象:主要作用是將PHPExcel工作簿對象中的數據寫入到一個工作簿文件中
load():從工作簿文件中加載PHPExcel工作簿對象,即:將工作簿文件中數據加載到PHPExcel工作簿對象中來管理
PHPExcel對象:是一個工作簿對象
include_once "PHPExcel/Writer/Excel5.php";//主要用於其它低版本,且文件名後綴爲xls的文件,如果我們希望生成後綴名爲xls格式的excel文件,建議引入此類庫
include_once "PHPExcel/Writer/Excel2007.php";//主要用於excel2007格式,文件名後綴爲xlsx的excel文件,如果我們希望生成後綴名爲xlsx格式的excel文件,建議引入此類庫
$objWriter = new PHPExcel_Writer_Excel5($objExcel);//創建一個文件格式寫入對象實例,此對象主要用來寫入內容到指定格式的文件,如,寫入內容到後綴名爲xls格式的excel文件等,用於其它板式的格式
$objWriter = new PHPExcel_Writer_Excel2007($objExcel);//創建一個文件格式寫入對象實例,此對象主要用來寫入內容到指定格式的文件,如,寫入內容到後綴名爲xls格式的excel文件等,用於excel2007格式
$objWriter->setOffice2003Compatibility(true);//兼容office2003
//設置文檔基本屬性
$objProps = $objExcel->getProperties(); //得到PHPExcel_document文檔對象
$objProps->setCreator("Zeal Li"); //設置作者
$objProps->setLastModifiedBy("Zeal Li"); //設置最後修改時間
$objProps->setTitle("Office XLS Test Document"); //設置標題
$objProps->setSubject("Office XLS Test Document, Demo");//設置主題
$objProps->setDescription("Test document, generated by PHPExcel.");//描
$objProps->setKeywords("office excel PHPExcel"); //關鍵字
$objProps->setCategory("Test"); //分類
$objExcel->setActiveSheetIndex(0);//設置用戶打開excel文件時,看到的首張sheet,如果沒有設置,默認爲最後一次操作的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','847475847857487584',PHPExcel_Cell_DataType::TYPE_STRING);
//合併單元格
$objActSheet->mergeCells('B1:C22');
//設置列的寬度
$objActSheet->getColumnDimension('B')->setAutoSize(true);
$objActSheet->getColumnDimension('A')->setWidth(30);
//設置行的高度
$objPHPExcel->getActiveSheet()->getRowDimension('2')->setRowHeight(11.5);
//格式:主要用來對單元格進行操作,如,設置字體、設置對齊方式、設置邊框等
$objStyleA5 = $objActSheet->getStyle('A5');//獲取A5單元格的樣式
//設置單元格的字體
$objFontA5 = $objStyleA5->getFont(); //獲得字體
$objFontA5->setName('宋體');//設置字體名稱
$objFontA5->setSize(10); //設置字體大小
$objFontA5->setBold(true);//設置字體加粗
$objFontA5->getColor()->setARGB('FF999999');//設置字體顏色
//設置單元格的對齊方式
$objAlignA5 = $objStyleA5->getAlignment();//獲得對齊方式
$objAlignA5->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);//水平居右
$objAlignA5->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);//垂直居中
//設置單元格的邊框
$objBorderA5 = $objStyleA5->getBorders();//獲取邊框
$objBorderA5->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);//邊框樣式
$objBorderA5->getTop()->getColor()->setARGB('FFFF0000');//頂部邊框的顏色
$objBorderA5->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objBorderA5->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);//左樣式
$objBorderA5->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);//右樣式
//設置單元格的填充色
$objFillA5 = $objStyleA5->getFill();//填充
$objFillA5->setFillType(PHPExcel_Style_Fill::FILL_SOLID);//填充類型
$objFillA5->getStartColor()->setARGB('FFEEEEEE');
//計算單元格的值
$objPHPExcel->getActiveSheet()->setCellValue('B7', '=SUM(B5:C5)');
$objPHPExcel->getActiveSheet()->getCell('B7')->getCalculatedValue();
//如果要獲取單元格的一個值,首先需要通過工作表的getCell方法獲取到一個單元格對象,然後再通過單元格對象的getValue方法得到單元格的值,如果單元格的值是通過計算得到的,則需要使用getCalculatedValue方法獲取單元格的值,設置單元格的值,我們只需要通過工作表的setCellValue方法來設置即可
//$dateTimeNow=time();
$objPHPExcel->getActiveSheet()->setCellValue('C10', PHPExcel_Shared_Date::PHPToExcel( $dateTimeNow ));//41105.75
$objPHPExcel->getActiveSheet()->getStyle('C10')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME4);//18:00:54,只是換了一種顯示方式,並不會改變原來值的類型
echo gettype($objPHPExcel->getActiveSheet()->getCell('C10')->getValue());//double
echo $objPHPExcel->getActiveSheet()->getCell('C10')->getValue();//41105.75
//'2010-10-21'一定要放在引號中,否則顯示的值爲,1979 文本(推薦)
$objPHPExcel->setActiveSheetIndex(0)->setCellValueExplicit("D1", '2010-10-21', PHPExcel_Cell_DataType::TYPE_STRING); //特徵:字符串類型都是居左顯示
//添加一個新的worksheet
$objExcel->createSheet();//創建一個新的工作表
$objExcel->getSheet(1)->setTitle('測試2');//設置當前工作表的標題
//保護單元格
$objExcel->getSheet(1)->getProtection()->setSheet(true);
$objExcel->getSheet(1)->protectCells('A1:C22', 'PHPExcel');
//輸出內容到excel文件,並將文件保存在服務器上
$objWriter->save("test.xls");
//強制輸出內容到瀏覽器下載
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("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Pragma: no-cache");
$objWriter->save('php://output');//參數-表示直接輸出到瀏覽器,供客戶端下載
//excel讀取對象
$PHPReader = new PHPExcel_Reader_Excel5();//創建一個excel文件的讀取對象
$PHPExcel = $PHPReader->load($filePath);//讀取一張excel表,返回excel文件對象
$currentSheet = $PHPExcel->getSheet(0);//讀取excel文件中的第一張工作表
$allColumn = $currentSheet->getHighestColumn();//取得當前工作表最大的列號,如,E
$allRow = $currentSheet->getHighestRow();//取得當前工作表一共有多少行
//設置工作簿默認的樣式
$objPHPExcel->getDefaultStyle()->getFont()->setName('Arial');
$objPHPExcel->getDefaultStyle()->getFont()->setSize(8);
//合併單元格
$objPHPExcel->getActiveSheet()->mergeCells('A18:E22');