[PHPWrod] Utilice PHPWord para exportar documentos de Word

Propósito: PHP exporta archivos a Word a través de la biblioteca de clases PHPWord.

Lenguaje de desarrollo y biblioteca de clases: ThinkPHP, PHPWord

1. Instale la biblioteca de clases PHPWord

Utilice Composer para instalar PHPWord en el directorio raíz del proyecto. Una vez completada la instalación, se generará la carpeta phpoffice en el directorio del proveedor, que es la biblioteca de clases PHPWord.

composer require phpoffice/phpword

2. Utilice PHPWord para exportar archivos de Word

<?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);
        }
			
		// 保存到服务器
		$objWriter = IOFactory::createWriter($phpWord,'Word2007' );
		// 保存 Word 文档到指定路径
		$savePath = $_SERVER['DOCUMENT_ROOT'].'/uploads/docs/'.$docxname.'.docx';
		$objWriter->save($savePath);

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

La información y la lista anteriores son los datos encontrados en la base de datos, donde la lista son los datos que se van a exportar, aquí hay una matriz bidimensional.

El código aquí guarda el archivo de Word en el servidor y no lo exporta directamente al local. Revisé algunos métodos en Internet para exportar directamente al local, pero ninguno funcionó, o no se pudo exportar directamente o se exportó pero se abrió con un error.

Si tiene una forma de implementarlo, deje un mensaje a continuación para comunicarse.

Supongo que te gusta

Origin blog.csdn.net/qq_25285531/article/details/132799282
Recomendado
Clasificación