5

Excel グラフィックスを埋め込んだ Microsoft Word ドキュメント ジェネレーターを実装する必要があります。私の制約の 1 つは、生成した docx を Microsoft Word 2010 と 2003 + 互換パックの両方で動作させることです。

私はそれを両方で機能させることができませんでした。Word 2010 では機能するようにできますが、ドキュメントは 2003 では機能せず、その逆も同様です。

Word 2003で機能させるためにいくつか検索した後、コードにこれを追加しました:

    private static void Word2003(ChartPart importedChartPart, MainDocumentPart mainDocumentPart, Stream fileStream)
    {
        var ext = new ExternalData { Id = "rel" + 5 };
        importedChartPart.ChartSpace.InsertAt(ext, 3);


        var fi = new FileInfo(@"generated.xlsx");
        importedChartPart.AddExternalRelationship("http://schemas.openxmlformats.org/officeDocument/2006/relationships/package", new Uri(fi.Name, UriKind.Relative), "rel5");

        EmbeddedPackagePart embeddedObjectPart = mainDocumentPart.AddEmbeddedPackagePart(@"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        Stream copyStream = new MemoryStream();
        fileStream.CopyTo(copyStream);
        embeddedObjectPart.FeedData(copyStream);
    }

しかし、この時点で生成された文書は Word 2010 では機能しません。これら 2 つの行を削除すると、次のようになります。

 var ext = new ExternalData { Id = "rel" + 5 };
 importedChartPart.ChartSpace.InsertAt(ext, 3);

前のコードから、Word 2010 では機能しますが、Word 2003 では機能しません。

いくつかのことを試しましたが、それぞれのケースでうまく機能させることができませんでした。

この小さなコードはここにあります

前提条件は、チャートとグラフィックを含む Excel ファイルのテンプレートです。


編集: 生成されたドキュメントは常に Microsoft Office 2007 で動作します (問題のある 2 つのコード行があるかどうかに関係なく)。私はまだ解決策を探しています!

4

1 に答える 1

5

私はついに解決策を見つけました!

問題は 2 つのことが原因でした: 外部データを正しく配置しなかったことと、外部関係が間違っていたことです。

このコードはそれを機能させます:

private static void Word2003(ChartPart importedChartPart, MainDocumentPart mainDocumentPart, Stream fileStream)
{
    // Add of the external data id
    ExternalData ext = new ExternalData { Id = "rel" + 5 };
    AutoUpdate autoUpdate = new AutoUpdate{ Val = false};
    ext.Append(autoUpdate);
    importedChartPart.ChartSpace.Append(ext);

    // Set of the relationship
    var fi = new FileInfo(@"generated.xlsx");
    importedChartPart.AddExternalRelationship("http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject", new Uri(fi.Name, UriKind.Relative), "rel5");

    // Link to the embedded file
    EmbeddedPackagePart embeddedObjectPart = mainDocumentPart.AddEmbeddedPackagePart(@"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
    Stream copyStream = new MemoryStream();
    fileStream.CopyTo(copyStream);
    embeddedObjectPart.FeedData(copyStream);
}

生成された Word ドキュメントは、Word 2003、2007、および 2010 で動作するようになりました。

多分これは誰かを助けるでしょう!

于 2012-09-18T14:35:39.170 に答える