用.net将Excel文件中的html字符串转换为格式化的word文件

本文关键字:文件 转换 格式化 word 字符串 html Excel net | 更新日期: 2023-09-27 18:10:44

输入是Excel文件-单元格可能包含一些基本的HTML格式,如

我想读取字符串并将文本作为格式化文本插入word文档,即Foo将在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();

这工作,但将复制/粘贴多达几千个字符串使用剪贴板破坏什么?

用.net将Excel文件中的html字符串转换为格式化的word文件

为了使用OpenXML,您将需要OpenXML SDK。使用它可能相当棘手,但它非常强大,而且比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,而不是在body中的第一个位置。注意,插入到word doc中的HTML必须是完整的HTML文档,并带有<html>标记。我不确定是否需要<body>,但它没有伤害。如果您只有HTML格式的文本,只需将文本包装在这些标记中并插入到文档中。

看来你需要使用Office Automation/Interop来获得桌子高度。看看这个答案,它说OpenXML SDK不更新高度,只有Word更新。

使用这段代码就可以了。

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();

既然WORD能理解HTML,为什么不让WORD自己翻译呢?

  1. 读取Excel单元格
  2. 把你的值写入一个HTML文本文件中,就像它是一个WORD文档一样。
  3. 打开WORD,让它读取HTML文件。
  4. 指示WORD将文档另存为新的WORD文档(如果需要)。