PHPExcel 1.8

下載地址
https://github.com/PHPOffice/PHPExcel

PHPExcel1.8.0 的目錄結構

下載下來目錄如下圖,我們只需要關注下面幾個:

2020-04-30_142728

Classes : 主要類文件,我們主要是使用這個文件夾

Docmentation : 文檔

Examples : 例子

composer.json : 主要的配置文件

使用PHPExcel的要求

打開composer.json 可以看到所需要的的環境要求

2020-04-30_144042


必須:

 

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:

2020-04-30_170050

Sheet2:

2020-04-30_170122

 

 

 

循環讀取示例:

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

數據如下圖:

2020-04-30_175542

 

 

讀取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');

 

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