且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

读取并替换.docx(Word)文件中的内容

更新时间:2023-02-23 08:14:28

这是@ addweb-solution-pvt-ltd的答案的工作版本.

This is the working version to @addweb-solution-pvt-ltd 's answer.

//This is the main document in  Template.docx file.
$file = public_path('template.docx');

$phpword = new \PhpOffice\PhpWord\TemplateProcessor($file);

$phpword->setValue('{name}','Santosh');
$phpword->setValue('{lastname}','Achari');
$phpword->setValue('{officeAddress}','Yahoo');

$phpword->saveAs('edited.docx');

但是,并非所有{name}字段都在更改.不知道为什么.

However, not all of the {name} fields are changing. Not sure why.

或者:

// Creating the new document...
$zip = new \PhpOffice\PhpWord\Shared\ZipArchive();

//This is the main document in a .docx file.
$fileToModify = 'word/document.xml';

$file = public_path('template.docx');
$temp_file = storage_path('/app/'.date('Ymdhis').'.docx');
copy($template,$temp_file);

if ($zip->open($temp_file) === TRUE) {
    //Read contents into memory
    $oldContents = $zip->getFromName($fileToModify);

    echo $oldContents;

    //Modify contents:
    $newContents = str_replace('{officeaddqress}', 'Yahoo \n World', $oldContents);
    $newContents = str_replace('{name}', 'Santosh Achari', $newContents);

    //Delete the old...
    $zip->deleteName($fileToModify);
    //Write the new...
    $zip->addFromString($fileToModify, $newContents);
    //And write back to the filesystem.
    $return =$zip->close();
    If ($return==TRUE){
        echo "Success!";
    }
} else {
    echo 'failed';
}

效果很好.仍在尝试弄清楚如何将其另存为新文件并强制下载.

Works well. Still trying to figure how to save it as a new file and force a download.