2

输入是 Excel 文件 - 单元格可能包含一些基本的 HTML 格式,如 <b>、<br>、<h2>。

我想读取字符串并将文本作为格式化文本插入到 word 文档中,即 <b>Foo</b> 将在 Word 中显示为粗体字符串。

我不知道使用了哪些标签,所以我需要一个“通用解决方案”,查找/替换方法对我不起作用。

我 从 2011 年 1 月开始使用 WebBrowser 组件找到了一个解决方案。因此 HTML 被转换为 RTF 并且 RTF 被插入到 Word 中。我想知道今天是否有更好的解决方案。

使用商业组件对我来说很好。

更新

我遇到了 Matthew Manela 的MarkupConverter课程。它将 HTML 转换为 RTF。然后我使用剪贴板将片段插入到word文件中

// 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 SDK才能使用 OpenXML。进入它可能会非常棘手,但它非常强大,并且比 Office Automation 或 Interop 更加稳定和可靠。

下面将打开一个文档,创建一个AltChunk部件,将 HTML 添加到其中,并将其嵌入到文档中。有关更广泛的概述,AltChunk请参阅Eric White 的博客

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那里而不是在正文中的第一个位置。请注意,您插入到 word doc 中的 HTML 必须是带有<html>标签的完整 HTML 文档。我不确定是否<body>需要,但它不会受到伤害。如果您只有 HTML 格式的文本,只需将文本包装在这些标签中并插入到文档中。

您似乎需要使用 Office 自动化/互操作来获取表格高度。请参阅这个答案,它说 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 回答
1

为什么不让 WORD 自己翻译,因为它理解 HTML。

  1. 阅读您的 Excel 单元格
  2. 将您的值写入 HTML 文本文件,就像它是 WORD 文档一样。
  3. 打开 WORD 并让它读取该 HTML 文件。
  4. 指示 WORD 将文档另存为新的 WORD 文档(如果需要)。
于 2013-05-01T13:12:23.860 回答