【PHPWrod】使用PHPWord导出word文档

这篇具有很好参考价值的文章主要介绍了【PHPWrod】使用PHPWord导出word文档。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目的:PHP通过PHPWord类库导出文件为word。

开发语言及类库:ThinkPHP、PHPWord

一、安装PHPWord类库

项目根目录使用composer安装PHPWord,安装完成后会在vendor目录下生成phpoffice文件夹,就是PHPWord类库

composer require phpoffice/phpword

二、使用PHPWord导出word文件

前端代码

<button type="button" class="layui-btn layui-btn-normal word"><i class="fa fa-file-word-o" aria-hidden="true"></i> 导出分析报告 Word</button>
// 下载word
	$(".word").click(function () {
		var shijuan_id = GetQueryString('shijuan_id')
		var grade_id = GetQueryString('grade_id')
		$.ajax({
			url:"exportreport2",
			type:'get',
			dataType:'JSON',
			data:{shijuan_id:shijuan_id,grade_id:grade_id},
			success:function (res) {
				console.log(res)
				if (res.code == '200') {

					var index = layer.alert('导出成功,请点击下载!', {
					  skin: 'layui-layer-lan' //样式类名
					  ,closeBtn: 0
					  , btn: ['下载'] //按钮
					}, function(){
						var downloadDom = $("<a href='"+res.data+"''><span></span></a>");
						// 触发a链接点击事件
						downloadDom.find('span').click();
						setTimeout(function(){ layer.close(index); }, 500);
						
					});
				}else{
					layer.msg('导出失败,请重试~')
				}
			}
		})
	})

PHP代码

<?php
use PhpOffice\PhpWord\IOFactory; 
use PhpOffice\PhpWord\PhpWord;

public function exportreport2()
{
	$shijuan_id = trim(input('post.shijuan_id'));
	$grade_id = trim(input('post.grade_id'));

	try {
		// 班级、试卷信息
		$info = model('Shijuan')->getShijuanGradeInfo($shijuan_id,$grade_id);

		// 标题
        $title = $info['filename'].'_考试分析报告';
		// 文件名
        $docxname = $info['grade'].'_'.$info['year'].$info['season'].'_'.$info['filename'].'_考试分析报告'.date('YmdHis',time());

		// 分析报告 二维数组
		$list = model('Shijuan')->getStudyReport($shijuan_id,$grade_id);

		// 实例化
		$phpWord = new PhpWord();
		header("Content-Type: text/html; charset=UTF-8");

		$phpWord->addFontStyle('cStyle', array('size' => 12,'name' => 'msyh'));//内容样式
		$phpWord->addFontStyle('bStyle', array('size' => 12, 'bold' => true, 'name' => 'msyh'));//加粗样式
        $phpWord->addFontStyle('titlestyle', array('bold' => true,'size' => 16,'name' => 'msyh'));//标题的样式

        // 创建新页面
		$section = $phpWord->addSection();

	  	$section->addText($title,'titlestyle', ['alignment' => 'center']);
        $section->addTextBreak(1);
        $section->addText('班级:'.$info['grade'].'_'.$info['year'].$info['season'], 'cStyle', ['alignment' => 'right']);
        $section->addText('总人数:'.$info['student'].'; 已交卷:'.$info['cmit'], 'cStyle', ['alignment' => 'right']);
        $section->addText('导出时间: '.date('Y-m-d H:i:s',time()), 'cStyle', ['alignment' => 'right']);

        // 表格样式
        $styleTable = array( 'borderSize'=>6, 'alignment' => 'center','cellMargin'=>80);
        // 第一行样式
		$styleFirstRow = array('bgColor'=>'f2f2f2' );
    	$phpWord ->addTableStyle('myOwnTableStyle',$styleTable,$styleFirstRow);

        foreach($list as $k=>$v) {

            $section->addText('【'.$v['type'].'】 第'.($k+1).'题: '.$v['title'],'cStyle');
            $section->addText('【正确答案】: '.$v['answer'],['alignment' => 'center'],'cStyle');
            $section->addText('【正确率】'.$v['percent'].'%; 【作答人数】: '.$v['cmit_num'].'人次',['color' => '009688'],'cStyle');

            // 添加表格
        	$table = $section->addTable('myOwnTableStyle');

			//添加一行(addRow执行后才能使用addCell给本行添加列,括号内数字代表高度)
			$table->addRow(100); 
			//表头添加(数字代表宽度,valign代表对齐方式)
			$table->addCell(3000)->addText('选项', 'bStyle', ['alignment' => 'center']);
			$table->addCell(3000)->addText('选择次数/人次','bStyle', ['alignment' => 'center']);
			$table->addCell(3000)->addText('比例', 'bStyle', ['alignment' => 'center']);
            // 选择题

			$table->addRow(100);
			$table->addCell(3000)->addText('A:'.$v['option_A'], 'cStyle');
			$table->addCell(3000)->addText($v['sel_A'], 'cStyle', ['alignment' => 'center']);
			$table->addCell(3000)->addText($v['percent_A'].'%', 'cStyle', ['alignment' => 'center']);
        		
			$table->addRow(100);
			$table->addCell(3000)->addText('B:'.$v['option_B'], 'cStyle');
			$table->addCell(3000)->addText($v['sel_B'], 'cStyle', ['alignment' => 'center']);
			$table->addCell(3000)->addText($v['percent_B'].'%', 'cStyle', ['alignment' => 'center']);
    		
			$table->addRow(100);
			$table->addCell(3000)->addText('C:'.$v['option_C'], 'cStyle');
			$table->addCell(3000)->addText($v['sel_C'], 'cStyle', ['alignment' => 'center']);
			$table->addCell(3000)->addText($v['percent_C'].'%', 'cStyle', ['alignment' => 'center']);
    		
			$table->addRow(100);
			$table->addCell(3000)->addText('D:'.$v['option_D'], 'cStyle');
			$table->addCell(3000)->addText($v['sel_D'], 'cStyle', ['alignment' => 'center']);
			$table->addCell(3000)->addText($v['percent_D'].'%', 'cStyle', ['alignment' => 'center']);
    		
			$table->addRow(100);
			$table->addCell(3000)->addText('E:'.$v['option_E'], 'cStyle');
			$table->addCell(3000)->addText($v['sel_E'], 'cStyle', ['alignment' => 'center']);
			$table->addCell(3000)->addText($v['percent_E'].'%', 'cStyle', ['alignment' => 'center']);
    		
			$table->addRow(100);
			$table->addCell(3000)->addText('F:'.$v['option_F'], 'cStyle');
			$table->addCell(3000)->addText($v['sel_F'], 'cStyle', ['alignment' => 'center']);
			$table->addCell(3000)->addText($v['percent_F'].'%', 'cStyle', ['alignment' => 'center']);
    		
			$table->addRow(100);
			$table->addCell(3000)->addText('G:'.$v['option_G'], 'cStyle');
			$table->addCell(3000)->addText($v['sel_G'], 'cStyle', ['alignment' => 'center']);
			$table->addCell(3000)->addText($v['percent_G'].'%', 'cStyle', ['alignment' => 'center']);
          
			$section->add($table);

			// 换行 
            $section->addTextBreak(1);
        }

        // 先统计当前文件夹下文件的数量,当超过5个的时候,就全部删除再去下载
	    $files = glob($_SERVER['DOCUMENT_ROOT'].'/uploads/docs/*');
		$file_count = count($files);
		if ($file_count >= 5) {
			foreach ($files as  $file) {
				if (is_file($file)) {
					unlink($file);
				}
			}
		}
			
		// 保存到服务器
		$objWriter = IOFactory::createWriter($phpWord,'Word2007' );
		// 保存 Word 文档到指定路径
		$savePath1 = '/uploads/docs/'.$docxname.'.docx';
		$savePath = $_SERVER['DOCUMENT_ROOT'].'/uploads/docs/'.$docxname.'.docx';
		$objWriter->save($savePath);

		return apiResponse('200','success',$savePath1);
	} catch (Exception $e) {
		
		return apiResponse('110','error');
	}
}

1、前端:先使用按钮事件,在点击事件里去请求后端返回的word文件的地址(这个地址是/uploads/docs/xxx.docx,而不是从系统目录开始);再使用JQ去触发a链接事件,注意a链接里必须有子元素(这里是span),通过子元素去触发链接

2、后端:上面info、list是从数据库查出来的数据,其中list是要导出的数据,这里是二维数组。先把文件保存到服务器上,再把word地址返回给前端,在前端通过a链接事件去下载导出。由于每导出一个文件都会保留在服务器上一份,长此以往文件会越来越多,所以只保留最近5份,如果文件数量超过5个就全部删除,再执行下载操作。

上一篇:【TCPDF】使用TCPDF导出PDF文件https://blog.csdn.net/qq_25285531/article/details/132761994?spm=1001.2014.3001.5502 文章来源地址https://www.toymoban.com/news/detail-707505.html

到了这里,关于【PHPWrod】使用PHPWord导出word文档的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PHP Twitter 推特 第三方登录

    twitter登录文档 开发者平台 申请成为开发流程按引导操作就可以了, 但是要注意信息填写要真实完善的信息, 否则容易被拒绝(被拒绝可能不能二次申请, 之前不能, 现在不知道能不能) 目前推特一个号只能开通一个免费应用, 可付费开通多个 设置基础信息 User authentication setting

    2024年04月16日
    浏览(27)
  • 【导出Word】如何使用Java+Freemarker模板引擎,根据XML模板文件生成Word文档(只含文本内容的模板)

    这篇文章,主要介绍如何使用Java+Freemarker模板引擎,根据XML模板文件生成Word文档。 目录 一、导出Word文档 1.1、基础知识 1.2、制作模板文件 1.3、代码实现 (1)引入依赖 (2)创建Freemarker工具类 (3)测试案例代码 (4)运行效果 Word文件有两种后缀格式,分别是:doc和docx,

    2024年02月13日
    浏览(45)
  • SpringBoot动态导出word文档(完美实整教程 复制即可使用,不能实现你找我)

    最近有一个需求是需要动态导出合同、订单等信息,导出一个word文档供客户进行下载查看。 需要导出的word文件,主要可以分为两种类型。 导出固定内容和图片的word文档 导出表格内容不固定的word文档 经过对比工具,我实践过两种实现方式。第一种是FreeMarker模板来进行填充

    2024年02月03日
    浏览(28)
  • 深入解析C#中的第三方库NPOI:Excel和Word文件处理的利器

    一、引言 在.NET开发中,操作Office文档(特别是Excel和Word)是一项常见的需求。然而,在服务器端或无Microsoft Office环境的场景下,直接使用Office Interop可能会面临挑战。为了解决这个问题,开源库NPOI应运而生,它提供了无需安装Office即可创建、读取和修改Excel (.xls, .xlsx) 和

    2024年03月18日
    浏览(33)
  • vue 微软插件实现根据第三方网站链接预览word、pd、excelf等文件

    一开始做的时候没想到会预览不了,报错 如下: 我在微软官网查到: 官网地址:https://learn.microsoft.com/en-us/webappsserver/configure-office-web-apps-for-sharepoint-2013#problem-you-receive-a-file-not-found-the-url-of-the-original-file-is-not-valid-or-the-document-is-not-publicly-accessible-verify-the-url-is-correct-then-conta

    2024年02月04日
    浏览(27)
  • java 导出word,java根据提供word模板导出word文档

    本文主要讲解,利用poi-tl在word中动态生成表格行,进行文字、图片填充。一共提供了两种方式,1.基于本地文件 2.基于网络文件 本文讲解思路,1.先看示例,2. 示例对应的代码展示 3. 基本概念讲解(api自行查阅文档)。 这样便于快速展示,不符合你的业务需求的可以直接划走

    2024年02月14日
    浏览(31)
  • PHPWord 实现合并多个word文件

    本来想着当调包侠呢,结果翻了一遍文档,没有这种操作支持,阿这😂 不出意外的一顿胡扯,给👨‍🦳气的要中风啦 word 也就是 docx 结尾的文件本质上就是 xml 字符串, 两个word文件合并其实就是把两个字符串拼接起来,你真是小天才呢👨‍🎤 原地址 【能打开的直接抄就

    2024年02月15日
    浏览(34)
  • PHP聚合支付网站源码/对接十多个支付接口 第三方/第四方支付/系统源码

    PHP聚合支付网站源码/对接十多个支付接口 第三方/第四方支付/系统源码 内附数十个支付接口代码文件。 下载地址:https://bbs.csdn.net/topics/616764485  

    2024年02月11日
    浏览(37)
  • vue导出word文档(图文示例)

    第076个 查看专栏目录: VUE 在Vue中导出Word文档,可以使用第三方库file-saver和html-docx-js。首先需要安装这两个库: npm install file-saver html-docx-js --save 然后在Vue组件中使用这两个库来导出Word文档: 要生成 DOCX,只需将 HTML 文档(作为字符串)传递给 asBlob 方法以接收包含输出文件

    2024年02月19日
    浏览(25)
  • java利用模板导出word文档

    1.依赖: 1.普通数据 2.表格 3.1编辑模板:选中区域,按ctrl+F9,右键编辑域,选择邮件合并,输入参数 参数后面加“!”可以避免参数为null而报错,  3.2.代码:  3.3展示 1.数据类型 布尔型:等价于java的Boolean类型,不同的是不能直接输出,可转化为字符串输出 日期型:等价于

    2024年02月04日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包