4

Laravel アプリケーションで PHPOffice/PHPWord を使用しています。結果をテーブルに含む .docx ドキュメントを生成するために使用されます。これは、6 行の 3 つのテーブルのドキュメントではうまく機能しますが、さらに行がある場合はドキュメントが生成されますが、ドキュメントを開くと次のエラーが発生します。

We're sorry, We can't open (documentname) because we found a problem with its contents.

Details: XML parsing error Location: Part:/word/document.xml, Line: 2, Column 14349. 

ここで、.docx ドキュメントも生成したい別の結果ページの作業を開始しました。これには 5 つのテーブルが含まれますが、3 つの行で同じ XML 解析エラーが発生しますが、場所は異なります (場所: 部分: /word/document.xml、行:4、列:2888)。これが私のコードのエラーなのか、それとも phpword/words のエラーなのか、誰か説明してもらえますか?

すべてを削除し、ゆっくりと新しい行を追加することで、トラブルシューティングを行いました。エラーを見つけましたが、どうすれば修正できますか。最初の 2 つのテーブルは正常に生成されます。

    $phpWord = new \PhpOffice\PhpWord\PhpWord();

    $section = $phpWord->addSection();
    $section->addImage('../public/img/2.jpg', array('width' => 230, 'height' => 65, 'alignment' => 'left'));
    $section->addText('Project IDs:' . $parameter);
    $header =$section->addHeader();
    $header->addText('Results Summary');

    $section->addLine(
        array(
            'width'       => \PhpOffice\PhpWord\Shared\Converter::cmToPixel(16),
            'height'      => \PhpOffice\PhpWord\Shared\Converter::cmToPixel(0),
            'positioning' => 'absolute',
        )
    );
    $tableName = 'rStyle';
    $phpWord->addFontStyle($tableName, array('italic' => true, 'size' => 12));
    $thName = 'tStyle';
    $phpWord->addFontStyle($thName, array('bold' => true, 'size' => 9));

    $section->addText('General Information Table', $tableName);
    $fancyTableStyle = array('borderSize' => 6, 'borderColor' => '999999');
    $spanTableStyleName = 'Overview tables';
    $phpWord->addTableStyle($spanTableStyleName, $fancyTableStyle);
    $table = $section->addTable($spanTableStyleName);
    $table->addRow(null, array('tblHeader' => true, 'cantSplit' => true));
    $table->addCell(1750)->addText('Project ID',$thName);
    $table->addCell(1750)->addText('Description',$thName);
    $table->addCell(1750)->addText('Notes',$thName);
    foreach ($id_array_explode as $char) {
        $table->addRow();
        $singlenumber = (int)$char;
        $cursor = $collection->find(array("id" => $singlenumber));
        foreach ($cursor as $document) {
                    $table->addCell(1750)->addText($document["project_id"]);
                    $table->addCell(1750)->addText($document["description"]);
                    $table->addCell(1750)->addText($document["notes"]);
        }
    }
    $section->addText('        
');
    $section->addLine(
        array(
            'width'       => \PhpOffice\PhpWord\Shared\Converter::cmToPixel(16),
            'height'      => \PhpOffice\PhpWord\Shared\Converter::cmToPixel(0),
            'positioning' => 'absolute',
        )
    );
    $section->addText('Input Table', $tableName);
    $table1 = $section->addTable($spanTableStyleName);
    $table1->addRow(null, array('tblHeader' => true, 'cantSplit' => true));
    $table1->addCell(1750)->addText('Project ID',$thName);
    $table1->addCell(1750)->addText('#',$thName);
    foreach ($id_array_explode as $char) {
        $table1->addRow();
        $singlenumber = (int)$char;
        $cursor = $collection->find(array("id" => $singlenumber));
        foreach ($cursor as $document) {
            if (is_array($document['input'])) {
                foreach ($document['input'] as $samples) {
                    $table1->addCell(1750)->addText($document["project_id"]);
                    $table1->addCell(1750)->addText($samples['nr']);
                }
            }
        }
    }
    $section->addText('        
');
    $section->addLine(
        array(
            'width'       => \PhpOffice\PhpWord\Shared\Converter::cmToPixel(16),
            'height'      => \PhpOffice\PhpWord\Shared\Converter::cmToPixel(0),
            'positioning' => 'absolute',
        )
    );
    $section->addText('Output Table', $tableName);
    $table2 = $section->addTable($spanTableStyleName);
//// THIS IS WHERE THE ERROR OCCURS!! 
        $table2->addRow(null, array('tblHeader' => true, 'cantSplit' => true));
        $table2->addCell(1750)->addText('ID',$thName);

ありがとうございました!

解決策 わかりましたので、ドキュメント全体を削除し、すべての文を個別に追加して、エラーが発生した場所を確認しました。これにより、取得していたデータからエラーが発生したことがわかりました。">" および "&" 記号を処理できませんでした。

したがって、このエラーが発生した場合は、印刷しているデータを確認してください。

4

3 に答える 3

3

確かに、それはあなたのデータから来ています.XML特殊文字が含まれており、Wordがドキュメントを解析すると、理解できません. を使用してこの問題を解決しましhtmlspecialchars()た。それが最善の方法かどうかはわかりませんが、うまくいきます。

于 2016-11-22T16:56:48.983 に答える