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的基本使用
    • composer常用命令
    • php程序性能优化的一些方法
    • php常用内置函数
    • PHP常用框架伪静态
    • php遍历时发现最后一个元素的值随着遍历变化
    • tp5和laravel常用操作的区别
    • 使用phpword操作word
      • 创建word文档
      • 读取并操作word
      • 使用word模板处理
    • PHP常用扩展
    • PHP常用自定义方法
    • PHP框架
    • php枚举库php-enum的使用
    • php快速接入微信支付宝支付easy-pay
  • Python

  • java

  • Go

  • 数据库

  • C#

  • ElasticSearch

  • Git

  • Gulp

  • Microsoft

  • Linux

  • 其它

  • 技术
  • PHP
mrcdh
2023-11-28
目录

使用phpword操作word

官方文档:https://phpword.readthedocs.io/en/latest/ (opens new window)

安装phpword库

composer require phpoffice/phpword
1

# 创建word文档

$phpWord = new \PhpOffice\PhpWord\PhpWord();
// 设置文档默认字体为-仿宋
$phpWord->setDefaultFontName('仿宋');
// 设置文档默认字体大小为9号字体
$phpWord->setDefaultFontSize(9);
$section = $phpWord->addSection();

// 这里是一个字体样式,为文字居中
$center = ['alignment' => \PhpOffice\PhpWord\SimpleType\Jc::CENTER];
$para = $section->addTextRun($center);
$para->addText("上面这段操作可以创建一个居中的文字");

$section->addText('直接添加一行文字');

// 这里是一个表格样式
$styleTable = array('borderSize' => 6, 'borderColor' => 'black', 'cellMargin' => 60);
// 为文档添加一个名为`table`的表格样式
$phpWord->addTableStyle('table', $styleTable);
// 添加一个表格,设置样式为上方设置的`table`
$table = $section->addTable('table');
// 设置表格宽度
$table->setWidth(5000);

// 这里配置了个单元格样式,文字水平居中,单元格垂直居中
$cellStyle = ["textDirectionHorizontal" => "center", "valign" => "center"];

$table->addRow();
$table->addCell(null, array('gridSpan' => 5))->addText("这里合并了横向5个单元格");
$table->addRow();
$table->addCell(400, $cellStyle)->addTextRun($center)->addText('序号');
$table->addCell(500, $cellStyle)->addTextRun($center)->addText('标题1');
$table->addCell(700, $cellStyle)->addTextRun($center)->addText('标题2');
$table->addCell(500, $cellStyle)->addTextRun($center)->addText('标题3');
$table->addCell(2900)->addText('标题4');

$table->addRow();
$table->addCell(400, $cellStyle)->addTextRun($center)->addText(1);
$table->addCell(500, $cellStyle)->addTextRun($center)->addText(内容);
$table->addCell(700, $cellStyle)->addTextRun($center)->addText(内容);
$table->addCell(500, $cellStyle)->addTextRun($center)->addText(内容);
$table->addCell(2900)->addText('内容');

// 保存Word文档到临时文件
$tempFile = tempnam(sys_get_temp_dir(), 'word');
$writer = IOFactory::createWriter($phpWord, 'Word2007');
$writer->save($tempFile);

// 读取临时文件并输出
header('Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document');
header('Content-Disposition: attachment;filename="example.docx"');
readfile($tempFile);

// 删除临时文件
unlink($tempFile);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54

# 读取并操作word

在使用phpword读取word操作保存的时候,不知道为什么内容样式会被改变,没有深入研究,暂时使用python-docx完成读取并操作word任务

$objReader = IOFactory::createReader('Word2007');
/** @var PhpWord $phpWord */
$phpWord = $objReader->load('example.docx');
foreach ($phpWord->getSections() as $k => $section) {
    foreach ($section->getElements() as $k1=> $element) {
        /** @var TextRun $a */
        $a = $element;
        dump(get_class($element));
        echo '========';
        if($element instanceof Table){
            dump($element);die;
        }
        if ($element instanceof TextRun/* && strpos($element->getText(), '指定的文本') !== FALSE*/) {
            foreach ($element->getElements() as $k2=> $c){
                echo '----------';
                dump(get_class($c));
                if($c instanceof Text){
                    dump($c->getText().'===='.$k.'==='.$k1.'==='.$k2);
                }
            }
        }
    }
}

$demo = $phpWord->getSections()[0]->getElements()[13]->getElements()[1];
$demo->setText("张三\r\n");
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

# 使用word模板处理

文档地址:https://phpword.readthedocs.io/en/latest/templates-processing.html?highlight=TemplateProcessor

$templateProcessor = new TemplateProcessor('Template.docx');
$templateProcessor->setValue('firstname', 'John');
$templateProcessor->setValue('lastname', 'Doe');
1
2
3
#php
上次更新: 2023/12/11, 14:49:49
tp5和laravel常用操作的区别
PHP常用扩展

← tp5和laravel常用操作的区别 PHP常用扩展→

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