phpexcel使用示例

参考: https://www.cnblogs.com/jianqingwang/p/6830892.html

安装phpexcel

在:https://packagist.org/ 中搜索Excel, 可以发现排名最前的是 phpoffice/phpexcel

在工程目录下执行,composer require phpoffice/phpexcel.

下面分别从读已有excel 和生成excel 两个角度来进行示例。

1、 读excel:

假设读取的excel内容如下:

读取上图的代码如下:

<?php

define("BASE_DIR",  str_replace("\\", '/', __DIR__));
include BASE_DIR."/vendor/autoload.php";

$inputFileName = "./test.xlsx";
date_default_timezone_set("PRC");

// 读取excel文件
try {
    $inputFileType = PHPExcel_IOFactory::identify($inputFileName);
    $objReader = PHPExcel_IOFactory::createReader($inputFileType);
    $objPHPExcel = $objReader->load($inputFileName);
} catch(Exception $e) {
    die (pathinfo($inputFileName,PATHINFO_BASENAME).":".$e->getMessage());
}

$sheet = $objPHPExcel->getSheet(0);

//var_dump($sheet);
$row_max = $sheet->getHighestRow();

$column_max = $sheet->getHighestColumn();

$rowArr = [];
for ($row = 1; $row <= $row_max; $row++){
    $range = "A".$row.":".$column_max."$row";
    $rowData = $sheet->rangeToArray("A".$row.":".$column_max."$row",null,false,true,false);
    array_push($rowArr,$rowData);
}

var_dump($rowArr);

执行结果:

array(5) {
  [0] =>
  array(1) {
    [0] =>
    array(4) {
      [0] =>
      string(4) "row1"
      [1] =>
      string(4) "row2"
      [2] =>
      string(4) "row3"
      [3] =>
      string(4) "row4"
    }
  }
  [1] =>
  array(1) {
    [0] =>
    array(4) {
      [0] =>
      string(2) "A2"
      [1] =>
      string(2) "B2"
      [2] =>
      string(2) "C2"
      [3] =>
      string(2) "D2"
    }
  }
  [2] =>
  array(1) {
    [0] =>
    array(4) {
      [0] =>
      string(2) "A3"
      [1] =>
      string(2) "B3"
      [2] =>
      string(2) "C3"
      [3] =>
      string(2) "D3"
    }
  }
  [3] =>
  array(1) {
    [0] =>
    array(4) {
      [0] =>
      string(2) "A4"
      [1] =>
      string(2) "B4"
      [2] =>
      string(2) "C4"
      [3] =>
      string(2) "D4"
    }
  }
  [4] =>
  array(1) {
    [0] =>
    array(4) {
      [0] =>
      string(2) "A5"
      [1] =>
      string(2) "B5"
      [2] =>
      string(2) "C5"
      [3] =>
      string(2) "D5"
    }
  }
}

 2. 写excel

<?php

define("BASE_DIR",  str_replace("\\", '/', __DIR__));
include BASE_DIR."/vendor/autoload.php";

date_default_timezone_set("PRC");

$objPHPExcel = new PHPExcel();

// 设置文档信息,这个文档信息windows系统可以右键文件属性查看
$objPHPExcel->getProperties()->setCreator("作者简庆旺")
    ->setLastModifiedBy("最后更改者")
    ->setTitle("文档标题")
    ->setSubject("文档主题")
    ->setDescription("文档的描述信息")
    ->setKeywords("设置文档关键词")
    ->setCategory("设置文档的分类");


//根据excel坐标,添加数据
$objPHPExcel->setActiveSheetIndex(0)
    ->setCellValue('A1', '你好')
    ->setCellValue('B2', '世界')
    ->setCellValue('C1', '你好')
    ->setCellValue('D2', '世界');

// 混杂各种符号, 编码为UTF-8
$objPHPExcel->setActiveSheetIndex(0)
    ->setCellValue('A4', 'Miscellaneous glyphs')
    ->setCellValue('A5', 'éàèùâêîôûëïüÿäöüç');


$objPHPExcel->getActiveSheet()->setCellValue('A8',"你好世界");
$objPHPExcel->getActiveSheet()->getRowDimension(8)->setRowHeight(-1);
$objPHPExcel->getActiveSheet()->getStyle('A8')->getAlignment()->setWrapText(true);


$value = "-ValueA\n-Value B\n-Value C";
$objPHPExcel->getActiveSheet()->setCellValue('A10', $value);
$objPHPExcel->getActiveSheet()->getRowDimension(10)->setRowHeight(-1);
$objPHPExcel->getActiveSheet()->getStyle('A10')->getAlignment()->setWrapText(true);
$objPHPExcel->getActiveSheet()->getStyle('A10')->setQuotePrefix(true);


// 重命名工作sheet
$objPHPExcel->getActiveSheet()->setTitle('第一个sheet');

// 设置第一个sheet为工作的sheet
$objPHPExcel->setActiveSheetIndex(0);

// 保存Excel 2007格式文件,保存路径为当前路径,名字为export.xlsx
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save( 'export.xlsx');


// 保存Excel 95格式文件,,保存路径为当前路径,
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('export.xls');

生成的excel内容如下图:

以上示例在windows和centos上测试通过。

不过需要说明的是  phpoffice/phpexcel已经不再维护,原作者推荐使用 phpoffice/phpspreadsheet ;

如果当前工程的php版本低于5.6,还是使用  phpoffice/phpexcel较好。

如果没有历史包袱,使用原作者推荐的 phpoffice/phpspreadsheet 会更好。有时间我也会更新一下phpspreadsheet的使用方法。

补充:

1. 读取某个cell的取值范围。比如某个cell的取值范围是下拉列表:

  假设cell A2取值范围为:$G$3:$G$10; ,那么获取A2可取的值方法如下:

$cell = $sheet->getCellByColumnAndRow("A","2");
$partnerRange = $cell->getDataValidation()->getFormula1();
$partnerRange = str_replace("\$", '', $partnerRange);
$partnerNames = $this->sheet->rangeToArray($partnerRange, null, false, true, false);

猜你喜欢

转载自blog.csdn.net/eaglejiawo1120/article/details/83751421