用.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();
这工作,但将复制/粘贴多达几千个字符串使用剪贴板破坏什么?
为了使用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自己翻译呢?
- 读取Excel单元格
- 把你的值写入一个HTML文本文件中,就像它是一个WORD文档一样。 打开WORD,让它读取HTML文件。
- 指示WORD将文档另存为新的WORD文档(如果需要)。