Mrcdh技术博客 Mrcdh技术博客
首页
  • Html5
  • Javascript
  • Nodejs
  • electron
  • Android
  • 微信公众号
  • 框架
  • 其他
  • Mysql
  • PHP
  • Python
  • java
  • Gulp
  • 其它
  • 网站
  • 资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Mrcdh

全栈开发小学生
首页
  • Html5
  • Javascript
  • Nodejs
  • electron
  • Android
  • 微信公众号
  • 框架
  • 其他
  • Mysql
  • PHP
  • Python
  • java
  • Gulp
  • 其它
  • 网站
  • 资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Mysql

  • PHP

    • PHP curl常见CURLE_SSL_CACERT (60)错误及get,post实例
    • PHP常用注解
    • PhpSpreadsheet操作Excel的基本使用
      • 安装依赖
      • 全局操作
        • 全局垂直居中
        • 全局水平居中
        • 全局自动换行
        • 设置Excel文档属性
      • 工作表操作
        • 创建新的工作表
        • 获取指定工作表
        • 设置当前工作表标题
        • 删除指定工作表
        • 垂直居中
        • 水平居中
        • 行高
        • 列宽
        • 单元格内容
        • 单元格背景色
        • 单元格边框
        • 使用函数
        • 文本自动换行
        • 文字样式
        • 合并单元格
        • 拆分单元格
        • 冻结窗格
        • 添加单元格批注/注释
        • 时间处理
        • 设置数据类型(可以解决科学计数法问题)
      • 杂项
        • 导出
        • 直接输出到浏览器
        • 导入
    • composer常用命令
    • php程序性能优化的一些方法
    • php常用内置函数
    • PHP常用框架伪静态
    • php遍历时发现最后一个元素的值随着遍历变化
    • tp5和laravel常用操作的区别
    • 使用phpword操作word
    • PHP常用扩展
    • PHP常用自定义方法
    • PHP框架
    • php枚举库php-enum的使用
    • php快速接入微信支付宝支付easy-pay
  • Python

  • java

  • Go

  • 数据库

  • C#

  • ElasticSearch

  • Git

  • Gulp

  • Microsoft

  • Linux

  • 其它

  • 技术
  • PHP
mrcdh
2021-01-07
目录

PhpSpreadsheet操作Excel的基本使用

官方文档:链接地址 (opens new window)

# 安装依赖

composer require phpoffice/phpspreadsheet
1
$spreadsheet = new Spreadsheet();
$sheet       = $spreadsheet->getActiveSheet();  // 获取当前激活的工作表
1
2

# 全局操作

# 全局垂直居中

$spreadsheet->getDefaultStyle()->getAlignment()->setVertical(Alignment::VERTICAL_CENTER);
1

# 全局水平居中

$spreadsheet->getDefaultStyle()->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER);
1

# 全局自动换行

$spreadsheet->getDefaultStyle()->getAlignment()->setWrapText(true);
1

# 设置Excel文档属性

$spreadsheet->getProperties()
    ->setCreator("mrcdh")                               // 作者
    ->setLastModifiedBy("mrcdh")                        // 最后修改者
    ->setTitle("Office 2007 XLSX Test Document")        // 标题
    ->setSubject("Office 2007 XLSX Test Document")      // 副标题
    ->setDescription("这是一一个用php构建的Excel文档。")  // 描述
    ->setKeywords("office php excel")                   // 关键字
    ->setCategory("Test result file");                  // 分类
1
2
3
4
5
6
7
8

# 工作表操作

# 创建新的工作表

try{
    $spreadsheet->createSheet(1);   // 传入索引,0代表第一个工作表
}catch(Exception $e){}
1
2
3

# 获取指定工作表

try{
    $spreadsheet->getSheet(1);   // 获取索引为1的工作表
}catch(Exception $e){}
1
2
3

# 设置当前工作表标题

$sheet->setTitle('Demo');
1

# 删除指定工作表

try{
    $spreadsheet->removeSheetByIndex(0);   // 删除第一个工作表
}catch(Exception $e){}
1
2
3

# 垂直居中

$sheet->getStyle('A1')->getAlignment()->setVertical(Alignment::VERTICAL_CENTER);    // A1单元格垂直居中
$sheet->getStyle('A1:E3')->getAlignment()->setVertical(Alignment::VERTICAL_CENTER);    // A1到E3单元格垂直居中
1
2

# 水平居中

$sheet->getStyle('A1')->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER); // A1单元格水平居中
1

# 行高

$sheet->getDefaultRowDimension()->setRowHeight(20); // 默认行高
$sheet->getRowDimension(4)->setRowHeight(30); // 设置第4行的行高
1
2

# 列宽

$sheet->getDefaultColumnDimension()->setWidth(20); // 默认单元格宽度
$sheet->getColumnDimension('A')->setWidth(30); // 设置A列的宽度为30
1
2

# 单元格内容

$sheet->setCellValue('A3', '商品编码');
$sheet->getCell('B3')->setValue('商品名称');
1
2

# 单元格背景色

// 设置A2到K2的背景色,也可以单独指定单元格
$sheet->getStyle('A2:K2')
    ->getFill()
    ->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID) // 设置填充样式
    ->getStartColor()
    ->setARGB('FFD8E4BC'); // 可以忽略透明,直接使用RGB
1
2
3
4
5
6

# 单元格边框

// BORDER_THIN 细边框
// BORDER_THICK 粗边框
$sheet->getStyle('A2:K2')->getBorders()->getAllBorders()->setBorderStyle(Border::BORDER_THIN);  // 所有边框
$sheet->getStyle('B2')->getBorders()->getTop()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK);   // 上边框
$sheet->getStyle('B2')->getBorders()->getBottom()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK);// 下边框
$sheet->getStyle('B2')->getBorders()->getLeft()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK);  // 左边框
$sheet->getStyle('B2')->getBorders()->getRight()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK); // 右边框

1
2
3
4
5
6
7
8

# 使用函数

使用SUM计算B5到C5之间单元格的总和。其他函数同理:最大数(MAX),最小数(MIN),平均值(AVERAGE)。

$sheet->setCellValue('A3', '=SUM(B5:C5)');
1

# 文本自动换行

$sheet->getCell('A4')->setValue("hello\nworld");                    // 内容\n换行
$sheet->getStyle('A4')->getAlignment()->setWrapText(true);          // 指定单元格自动换行
1
2

# 文字样式

$sheet->getStyle('A1:B7')->getFont()
    ->setBold(true) // 加粗
    ->setName('Arial') // 字体
    ->setSize(10); // 10号字

// 设置文字颜色为红色
$sheet->getStyle('A4')->getFont()->getColor()
    ->setARGB(\PhpOffice\PhpSpreadsheet\Style\Color::COLOR_RED);
1
2
3
4
5
6
7
8

# 合并单元格

$sheet->mergeCells('A18:E22'); // 将A18到E22合并为一个单元格。
1

# 拆分单元格

$sheet->unmergeCells('A18:E22'); // 将合并后的单元格拆分
1

# 冻结窗格

$sheet->freezePane('A2');
1
  • A2将冻结单元格A2上方的行(即第1行)
  • B1将冻结单元格B1左侧的列(即列A)
  • B2将冻结B2单元格上方和左侧的行(即第1行和第A列)

# 添加单元格批注/注释

$sheet->getComment('E11')->setAuthor('mrcdh'); // 设置批注作者
$commentRichText = $sheet->getComment('E11')->getText()->createTextRun('mrcdh:'); // 设置批注内容
$commentRichText->getFont()->setBold(true); // 给上个批注内容加粗
$sheet->getComment('E11')->getText()->createTextRun("\r\n");    // 换行
$sheet->getComment('E11')->getText()->createTextRun('注释内容'); // 追加内容
1
2
3
4
5

# 时间处理

$cellVal= $workSheet->getCell('A1')->getValue();
$toTimestamp = \PhpOffice\PhpSpreadsheet\Shared\Date::excelToTimestamp($cellVal);
$date = date("Y-m-d", $toTimestamp);
// 获取时可能出现时间比表格时间快了8个小时
// 这是因为PHPExcel从文件中获取的时间,是以格林威治时间标准(GMT/UTC)格式
// 这时需要使用`gmdate`函数格式化格林威治时间,`date`格式化本地时间
$date = date("Y-m-d", $toTimestamp);
1
2
3
4
5
6
7

# 设置数据类型(可以解决科学计数法问题)

use PhpOffice\PhpSpreadsheet\Cell\DataType;
$str = '12345678912451';
$workSheet->setCellValueExplicit('A1', $str,DataType::TYPE_STRING);
$workSheet->setCellValueExplicitByColumnAndRow(col, row, $str,DataType::TYPE_STRING);
1
2
3
4

# 杂项

# 导出

use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
$writer = new Xlsx($spreadsheet);
$writer->save('demo.xlsx');
1
2
3

# 直接输出到浏览器

header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="example.xlsx"');
header('Cache-Control: max-age=0');
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx'); //按照指定格式生成Excel文件
$writer->save('php://output');
1
2
3
4
5

# 导入

use PhpOffice\PhpSpreadsheet\Reader\Xlsx;

$reader = new Xlsx();
$spreadsheet = $read->load($url);                // 加载xlsx文件
$sheet = $spreadsheet->getActiveSheet();
$rows  = $sheet->getHighestRow();                 // 总行数
$cols  = $sheet->getHighestColumn();              // 总列数: B
$colsIndex = \PhpOffice\PhpSpreadsheet\Cell\Coordinate::columnIndexFromString($cols); // 总列数: 2,将字母转换为索引值
$sheet->getCellByColumnAndRow(1, 2)->getValue(); // 获取第2行第1列单元格内容
1
2
3
4
5
6
7
8
9
#php
上次更新: 2023/12/11, 14:49:49
PHP常用注解
composer常用命令

← PHP常用注解 composer常用命令→

最近更新
01
uniapp常见问题
03-19
02
Vue3项目搭建
12-25
03
使用pnpm的monorepo组织项目
11-01
更多文章>
Theme by Vdoing | Copyright © 2020-2025 Mrcdh | 苏ICP备2020058908号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×