2

入力は Excel ファイルです。セルには、<b>、<br>、<h2> などの基本的な HTML 形式が含まれている場合があります。

文字列を読み取り、そのテキストを書式設定されたテキストとして Word 文書に挿入したい、つまり <b>Foo</b> は Word では太字の文字列として表示されます。

どのタグが使用されているのかわからないので、「一般的な解決策」が必要です。検索/置換アプローチは機能しません。

2011 年 1 月に、WebBrowser コンポーネントを使用して解決策を見つけました。したがって、HTML は RTF に変換され、RTF が Word に挿入されます。今日、より良い解決策があるかどうか疑問に思っていました。

商用コンポーネントを使用しても問題ありません。

アップデート

Matthew Manela のMarkupConverterクラスに出会いました。HTML を RTF に変換します。次に、クリップボードを使用してスニペットを単語ファイルに挿入します

// rtf contains the converted html string using MarkupConverter
Clipboard.SetText(rtf, TextDataFormat.Rtf);
// objTable is a table in my word file
objTable.Cell(1, 1).Range.Paste();

これは機能しますが、クリップボードを使用して最大数千の文字列をコピー/貼り付けすると何かが壊れますか?

4

3 に答える 3

3

OpenXML を使用するには、 OpenXML SDKが必要です。使いこなすのはかなり難しいかもしれませんが、非常に強力で、Office Automation や Interop よりもはるかに安定性と信頼性に優れています。

以下は、ドキュメントを開き、AltChunkパーツを作成し、それに HTML を追加して、ドキュメントに埋め込みます。のより広範な概要については、Eric White のブログAltChunkを参照してください。

using (var wordDoc = WordprocessingDocument.Open("DocumentName.docx", true))
{
    var altChunkId = "AltChunkId1";
    var mainPart = wordDoc.MainDocumentPart;

    var chunk = mainPart.AddAlternativeFormatImportPart(AlternativeFormatImportPartType.Html, altChunkId);
    using (var textStream = new MemoryStream())
    {
        var html = "<html><body>...</body></html>";
        var data = Encoding.UTF8.GetBytes(html);
        textStream.Write(data, 0, data.Length);
        textStream.Position = 0;
        chunk.FeedData(textStream);
    }

    var altChunk = new AltChunk();
    altChunk.Id = altChunkId;
    mainPart.Document.Body.InsertAt(altChunk, 0);
    mainPart.Document.Save();
}

明らかに、あなたのケースでは、必要なテーブルを見つけて(または構築して)AltChunk、本体の最初の位置ではなくそこに挿入する必要があります。単語 doc に挿入する HTML は、<html>タグ付きの完全な HTML ドキュメントでなければならないことに注意してください。必要かどうか<body>はわかりませんが、害はありません。HTML 形式のテキストだけがある場合は、テキストをこれらのタグで囲み、ドキュメントに挿入します。

テーブルの高さを取得するには、Office Automation/Interop を使用する必要があるようです。OpenXML SDK は高さを更新せず、Word のみが更新するというこの回答を参照してください。

于 2013-05-03T05:22:42.890 に答える
2

動作しているこのコードを使用してください..

Response.AppendHeader("content-disposition", "attachment;filename=FileEName.xls");
Response.Charset = "";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "application/vnd.ms-excel";
this.EnableViewState = false;
//Response.Write("Your HTML Code");
Response.Write("<table border='1 px solid'><tr><th>sfsd</th><th>sfsdfssd</th></tr><tr>
<td>ssfsdf</td><td><table border='1 px solid'><tr><th>sdf</th><th>hhsdf</th></tr><tr>
<td>sdfds</td><td>sdhjhfds</td></tr></table></td></tr></table>");
Response.End();
于 2013-05-04T04:09:02.927 に答える