phpSpreadsheet簡單使用(包含圖片操作)


1.Composer安裝

composer require phpoffice/phpspreadsheet

2.引入

<?php
require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\IOFactory;//用於載入已有的xml文件
use PhpOffice\PhpSpreadsheet\Spreadsheet;//用於新建xml文件
use Phpoffice\PhpSpreadsheet\Shared\Date;//日期操作類 用處不大
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;//單元格格式類型
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;//保存xml文件

3.使用

3.1-excel文檔操作

$inputFileName = 'xabc.xlsx';
$spreadSheet = IOFactory::load($inputFileName);//載入xml文件
//$spreadSheet = new Spreadsheet();//新建一個xml文件
//$spreadSheet->getProperties()->setCreator("hellow");//設置xml作者
//$resp = $spreadSheet->getSheetCount();//工作表總數
//$resp = $spreadSheet->getSheetNames();//工作表名數組
//$sheet = $spreadSheet->getSheetByName('Sheet1');//根據表名獲取工作表
//$sheet = $spreadSheet->getSheet(0);//根據表索引獲取工作表
//$sheet = $spreadSheet->setActiveSheetIndex(0);//切換當前工作表
$sheet = $spreadSheet->getActiveSheet();

3.2-工作表操作

//常用讀取操作
$sheet->setTitle('Hello');//設置標題
$sheet->mergeCells('E7:F10');//單元格合並
$sheet->unmergeCells('B7:C10');//拆分單元格
$cell = $sheet->getCell('A1');//獲取單元格A1的值
$cell = $sheet->getCellByColumnAndRow(2,1);//獲取單元格 B1
$data = $sheet->toArray();//獲取文檔所有值
$resp = $sheet->getHighestRow();//最大行數 19
$resp = $sheet->getHighestColumn();//最大列數 C
//常用寫操作
$resp = $sheet->setCellValue('A1', "hellow\nphp");//設置值
$resp = $sheet->setCellValueByColumnAndRow(2,1,'6666');//設置B2的值
$resp = $sheet->fromArray($arr, null, 'D5');//數組,空值時填充值,開始單元格坐標
//$sheet->getColumnDimension('A')->setWidth(300);//設置A列的寬度
$sheet->getDefaultColumnDimension()->setWidth(50);//設置列默認寬度
//$sheet->getRowDimension(10)->setRowHeight(300);//設置第一行的寬度
$sheet->getDefaultRowDimension()->setRowHeight(50);//設置行默認高度 但不會修改已設置過高度/已有值的行

$resp = $sheet->setCellValue('B2',"hellow\nphp");//設置換行 雙引號+\n+setWrapText
$resp = $sheet->getStyle('B2')->getAlignment()->setWrapText(true);//設置換行

$resp = $sheet->setCellValue('B2',"百度");//設置A鏈接
$resp = $sheet->getCell('B3')->getHyperlink()->setUrl('https://www.baidu.com');//設置換行

$resp = $sheet->getStyle('A1')->getFont()->setBold(true)->setName('Arial')->setSize(10);//設置字體加粗大小
$resp = $sheet->getStyle('A1')->getFont()->getName();//字體名
$resp = $sheet->getStyle('B2')->getFont()->getColor()->setRGB('#AEEEEE');//設置顏色
$resp = $sheet->getStyle('A1')->getFont()->getColor()->getRGB();//獲取顏色值
$sheet->getCell('D1')->setValue('2021-03-27 23:22:59');
$sheet->getCell('D2')->setValue(Date::PHPToExcel(time()));//設置日期
//$sheet->getStyle('D2')->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_DATE_DDMMYYYY);//設置日期格式 感覺用處不大
$sheet->getStyle('D2')->getNumberFormat()->setFormatCode('dd/mm/yyyy');//設置日期格式 與上文相同

3.3-單元格操作

//常用讀
$cell = $sheet->getCell('A1');//獲取單元格A1的值
$resp = $cell->getValue();//獲取單元個值
$resp = $cell->getCoordinate();//獲取行列信息 A1
$column = $cell->getColumn();//獲取列信息 A
$row   = $cell->getRow();//獲取行信息 1
list($column, $row) = PhpOffice\PhpSpreadsheet\Cell\Coordinate::coordinateFromString($coordi);//拆分成 ['A','1'];
$resp = $cell->getDataType();//獲取數據類型
//常用寫
$resp = $cell->setValue('8888');//設置值
$cell->getStyle()->getFont()->getName();//單元個樣式設置 參考工作表設置 只是不需要設置單元格位置而已
//設置A標簽與換行參考工作表設置

4.圖像操作

//圖片讀取與存儲
$draws = $sheet->getDrawingCollection();//獲取所有圖像
$imageFilePath = 'uploads/';
foreach ($draws as $drawing) {//$drawing 為 PhpOffice\PhpSpreadsheet\Worksheet\Drawing類的實例;
    $coordi = $drawing->getCoordinates();//獲取圖像坐標 eg A4
    list($startColumn, $startRow) = PhpOffice\PhpSpreadsheet\Cell\Coordinate::coordinateFromString($coordi);//拆分成 ['A','4'];
    $imageFileName = $imageFilePath.$coordi.'_'. mt_rand(1000, 9999);
    switch ($drawing->getExtension()) {
        case 'jpg':
        case 'jpeg':
            $imageFileName .= '.jpg';
            $source = imagecreatefromjpeg($drawing->getPath());
            $res = imagejpeg($source,  $imageFileName);
            break;
        case 'gif':
            $imageFileName .= '.gif';
            $source = imagecreatefromgif($drawing->getPath());
            imagegif($source,  $imageFileName);
            break;
        case 'png':
            $imageFileName .= '.png';
            $source = imagecreatefrompng($drawing->getPath());
            $res = imagepng($source, $imageFileName);
            break;
    }
}

//圖像寫入操作
$drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
$drawing->setWorksheet($sheet);
$drawing->setPath(dirname(__FILE__).'/'.$imageFileName);
$drawing->setWidth(200);//圖片寬
$drawing->setHeight(200);//圖片高
$drawing->setOffsetX(100);//設置圖片偏移量
$drawing->setCoordinates('A5');//將圖片放置於單元格

5.保存excel

$writer = new Xlsx($spreadSheet);
$resp = $writer->save('ok/wm3.xlsx');

6.完整實例

<?php
require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\IOFactory;//用於載入已有的xml文件
use PhpOffice\PhpSpreadsheet\Spreadsheet;//用於新建xml文件
use Phpoffice\PhpSpreadsheet\Shared\Date;//日期操作類 用處不大
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;//單元格格式類型
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;//保存xml文件

$arr = [
    ['a1', 'b1', 'c'],
    ['a2', 'b2', 'c2']
];
$inputFileName = 'xabc2.xlsx';//一個空的excel文件
$spreadSheet = IOFactory::load($inputFileName);//載入xml文件
//$spreadSheet = new Spreadsheet();//新建一個xml文件
//$spreadSheet->getProperties()->setCreator("hellow");//設置xml作者
//$resp = $spreadSheet->getSheetCount();//工作表總數
//$resp = $spreadSheet->getSheetNames();//工作表名數組
//$sheet = $spreadSheet->getSheetByName('Sheet1');//根據表名獲取工作表
//$sheet = $spreadSheet->getSheet(0);//根據表索引獲取工作表
//$sheet = $spreadSheet->setActiveSheetIndex(0);//切換當前工作表
$sheet = $spreadSheet->getActiveSheet();
$sheet->setTitle('Hello');//設置標題
$sheet->mergeCells('E7:F10');//單元格合並
//$sheet->unmergeCells('B7:C10');
//讀:
//--工作表讀
$cell = $sheet->getCell('A1');//獲取單元格A1的值
//$data = $sheet->toArray();//獲取文檔所有值
//$cell = $sheet->getCellByColumnAndRow(2,1);//獲取單元格 B1
//$resp = $sheet->getHighestRow();//最大行數 19
//$resp = $sheet->getHighestColumn();//最大列數 C

//--單元格讀
//$resp = $cell->getValue();//獲取單元個值
//$resp = $cell->getCoordinate();//獲取行列信息 A1
//$resp = $cell->getColumn();//獲取列信息 A
//$resp = $cell->getRow();//獲取行信息 1
//$resp = $cell->getDataType();//獲取數據類型

//寫
//--工作表設置
$resp = $sheet->setCellValue('A1', "hellow\nphp");//設置值
$resp = $sheet->setCellValueByColumnAndRow(2,1,'6666');//設置B2的值
$resp = $sheet->fromArray($arr, null, 'D5');//數組,空值時填充值,開始單元格坐標
//$sheet->getColumnDimension('A')->setWidth(300);//設置A列的寬度
$sheet->getDefaultColumnDimension()->setWidth(50);//設置列默認寬度
//$sheet->getRowDimension(10)->setRowHeight(300);//設置第一行的寬度
$sheet->getDefaultRowDimension()->setRowHeight(50);//設置行默認高度 但不會修改已設置過高度/已有值的行
$resp = $sheet->setCellValue('B2',"hellow\nphp");//設置換行 雙引號+\n+setWrapText
$resp = $sheet->getStyle('B2')->getAlignment()->setWrapText(true);//設置換行
$resp = $sheet->setCellValue('B2',"百度");//設置A鏈接
$resp = $sheet->getCell('B3')->getHyperlink()->setUrl('https://www.baidu.com');//設置換行

$resp = $sheet->getStyle('A1')->getFont()->setBold(true)->setName('Arial')->setSize(10);//設置字體
$resp = $sheet->getStyle('A1')->getFont()->getName();//字體名
$resp = $sheet->getStyle('B2')->getFont()->getColor()->setRGB('#AEEEEE');//設置顏色
$resp = $sheet->getStyle('A1')->getFont()->getColor()->getRGB();//顏色值
$sheet->getCell('D1')->setValue('2021-03-27 23:22:59');
$sheet->getCell('D2')->setValue(Date::PHPToExcel(time()));//設置日期
//$sheet->getStyle('D2')->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_DATE_DDMMYYYY);//設置日期格式 感覺用處不大
$sheet->getStyle('D2')->getNumberFormat()->setFormatCode('dd/mm/yyyy');//設置日期格式 與上文相同

//--單元格設置
//$resp = $cell->setValue('8888');//設置值
$cell->getStyle()->getFont()->getName();//單元個樣式設置 參考工作表設置 只是不需要設置單元格位置而已
//圖像讀取操作
$draws = $sheet->getDrawingCollection();//獲取所有圖像
$imageFilePath = 'uploads/';
foreach ($draws as $drawing) {//$drawing 為 PhpOffice\PhpSpreadsheet\Worksheet\Drawing類的實例;
    $coordi = $drawing->getCoordinates();//獲取圖像坐標 eg A4
    list($startColumn, $startRow) = PhpOffice\PhpSpreadsheet\Cell\Coordinate::coordinateFromString($coordi);//拆分成 ['A','4'];
    $imageFileName = $imageFilePath.$coordi.'_'. mt_rand(1000, 9999);
    switch ($drawing->getExtension()) {
        case 'jpg':
        case 'jpeg':
            $imageFileName .= '.jpg';
            $source = imagecreatefromjpeg($drawing->getPath());
            $res = imagejpeg($source,  $imageFileName);
            break;
        case 'gif':
            $imageFileName .= '.gif';
            $source = imagecreatefromgif($drawing->getPath());
            imagegif($source,  $imageFileName);
            break;
        case 'png':
            $imageFileName .= '.png';
            $source = imagecreatefrompng($drawing->getPath());
            $res = imagepng($source, $imageFileName);
            break;
    }
}
//圖像寫入操作
$drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
$drawing->setWorksheet($sheet);
$drawing->setPath(dirname(__FILE__).'/'.$imageFileName);
$drawing->setWidth(200);//圖片寬
$drawing->setHeight(200);//圖片高
//$drawing->setOffsetX(100);//設置圖片偏移量
$drawing->setCoordinates('A5');//將圖片放置於單元格


$writer = new Xlsx($spreadSheet);
$resp = $writer->save('ok/wm3.xlsx');
var_dump($resp);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM