2

Word 文書を動的に生成しており、CKeditor コントロールを使用して生成された html コンテンツを使用して特別なタグを置き換える必要があります。ここで使用している単語ドキュメントは、事前に入力されたテキストを含むテンプレートであり、ドキュメントを生成するために Microsoft.Office.Interop.Word を使用しています。これで、interop の doc.range.Find メソッドを使用して特別なタグを見つけることができます。しかし、スタイルを失うことなく、このタグを HTML コンテンツに置き換えたい場合。これどうやってするの?
doc.range.Find.replacement.text の使用は、タグ全体を html テキストに置き換えるだけなので実用的ではありません。

例: 私のワード文書には、以下に示すような特別なタグがあります

 ##<Special Conditions Frag>## 

ドキュメントの生成中に、ckeditorコントロールを介して入力されたユーザーからのテキストを受け入れる必要があります(ボディタグとすべてを含むHTML形式になります)。そして、この html コンテンツは、Word 文書の上記の特別な条件の frag タグに置き換える必要があります。

私のHTMLコンテンツは以下のようになります

<html>
 <head>
  <title></title></head>
   <body>
    <p>
 <strong>Sample text</strong>
    </p>
   </body>
</html>
4

1 に答える 1

2

XML から OOXML、Interop に至るまで、実に多くのバリエーションが考えられます。

1 つは、クリップボードを使用してそれを行うことです。

string html = Clipboard.GetText(TextDataFormat.Html);

必要な HTML コードをクリップボードに送信しながら、HTML 文字列を操作できる場所。

//save the html content to a file
File.WriteAllText(temporaryFilePath, html);

ファイルに保存してファイルを開くと、ブラウザーで html コードの実際の変換が表示されます。

今すぐ Word に実装したい場合は、そのファイルの内容を次のように挿入できます。

s.Range.InsertFile(temporaryFilePath);

すべてのドキュメントを調べたい場合は、ループを使用して特定の場所の置換を確認することができます

foreach (NetOffice.WordApi.InlineShape s in docWord.InlineShapes)
{
    if (s.Type==NetOffice.WordApi.Enums.WdInlineShapeType.wdInlineShapePicture &&   s.AlternativeText.Contains("|"))
    {
        //save the html content to a file
        File.WriteAllText(temporaryFilePath, html);  
        s.Range.InsertFile(temporaryFilePath);             
    }
}

これは、HTML を Word に統合する方法です。もう 1 つの醜い方法は、HTML コードを画像に変換して挿入することですが、これはお勧めしません。それを Excel 用に拡張する場合は同じように機能します。html を Powerpoint に実装しようとすると機能しませんが、2 ステップで実行できます。最初にhtmlをExcelに貼り付け、貼り付けたコンテンツを選択してPowerpointに貼り付けます。正常に機能します。表を貼り付ける場合は、問題ありません。貼り付けるだけで、後で、Excel から Powerpoint に取得した表の代わりに新しい表を作成する 2 番目のループを記述します。

編集済み:エラーによると、あなたのメインでは次を追加する必要があります:

    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }

問題はここで遡ることができます: C# WinForms: How to set Main function STAThreadAttribute

于 2013-06-12T11:51:56.837 に答える