【问题标题】:How to create a word document using html written in C#如何使用用 C# 编写的 html 创建 word 文档
【发布时间】:2011-04-01 13:27:13
【问题描述】:

我创建了一个必须创建 word 文档的 C# 应用程序。

我正在使用Microsoft.Office.Interop.Word 来执行此操作,并且我已经成功地输出了一些word 文档,但是通过代码创建内容是一项非常耗时的工作。

我注意到 word 能够打开 html 页面并将其显示为正常内容,因此我在 html 中创建了一个简单的测试表并将其插入到 word 文档中。但是当我输出文档时,显而易见的事情发生了:标签还在哪里! Word 没有将标签格式化为 html。它只是输出了我放在那里的内容。

如何告诉 word 将文本重新格式化为 html?

编辑:(当然是通过 C# 代码)

编辑 2:请注意,我正在解析一些数据来完成此操作,所以我最终会得到大约 4 页的同一个表格/html,所以我需要能够告诉 word 从每次我完成一个循环时都会翻页。因此,仅 html 的方法可能行不通。

【问题讨论】:

  • How to convert HTML file to word? 的可能副本,在那里阅读这些答案,他们提供了也可以使用 C# 的替代方法
  • 这不是重复的......我清楚地将我的问题格式化得更详细,我使用的是 C#,我并不是要求一个库来做到这一点。
  • 您的编辑显示(比以前更多)您应该为您的任务使用库而不是走 HTML 路线。并且有一个可用的 Apache POI 的 C# 端口,它应该可以解决您使用 Interop 的性能问题,看这里stackoverflow.com/questions/2680546/…

标签: c# html ms-word formatting


【解决方案1】:

如果您只想将简单的 HTML 内容输出为 Word 文档,您可以随时作弊并使用 .doc 扩展名写出 HTML 内容。

Word 可以正常打开。

如果需要添加分页符,可以使用 CSS page-break-before,如下所示:

<br style="page-break-before: always;"/>

如果您准备使用 Interop,在阅读了一些内容后,this post 声明您需要一个转换器来插入 HTML,并且转换器仅在以下情况下才可访问:

  • 您从剪贴板粘贴 HTML
  • 从文件中打开/插入 HTML

所以,这个答案看起来提供了一个基于剪贴板的解决方案:Adding html text to Word using Interop

但是,如果有任何资金可用于该项目,我可以衷心推荐Aspose.Words,它将为您完成所有这些工作。

【讨论】:

  • 哈哈,太好了,我不知道,甜作弊!但这并不能解决我的问题,因为我需要输出多个页面,而且我无法通过 html 告诉 word trough 来创建新页面。
  • 我不了解 Word 文档,但我在写出 HTML 内容和为文件赋予 .xls 或 .xlsx 扩展名时遇到了可怕的麻烦 - Office 2007 提供了一个不错的“你的文件”正在尝试打开 .xlsx 的格式与文件扩展名指定的格式不同”错误,通常不会获得焦点。
  • 哦,这个答案效果很好,但这并不是我想要的,因为我需要知道何时在新页面上恢复。
  • @Pieter888:如果处理页面是您唯一的问题,请查看w3.org/TR/CSS21/page.html。更具体地说,当您在文档上插入分页符并将其保存为 HTML 时,Word 已经使用了page-break-before:always,因此在打开文档时应该能够理解它;)
  • @herenvardo:从this question看来,它不起作用,真可惜!
【解决方案2】:

根据 OP 的要求,为了让其他人更容易找到这个解决方案,这里是我作为评论发布的答案(加上测试的额外结果):

当打开一个 HTML 文件时,MS Word 支持 CSS 属性 page-break-beforepage-break-after。但是有一个警告:

在“网页设计”视图中,从不显示分页符(这并不意味着它们不存在),就像浏览器不“显示”它们一样。 Word 默认会在 Web 设计视图中打开 html 文件(这很有意义)。您需要打印文档或切换到其他视图(通常是“打印设计”)才能看到您的休息时间。

因此,保存带有.doc 扩展名的 HTML 文件是一个可行的解决方案(也经过测试:尽管有扩展名,Word 也能正常打开它)。

注意:所有测试均使用此 sn-p 在 MS Word 2003 上完成:&lt;html&gt;asdf&lt;br style="page-break-before: always;"&gt;new page!&lt;/html&gt;

【讨论】:

    【解决方案3】:

    不要在代码中构建文档,在 Word 中将其创建为模板或邮件合并模板,并使用代码合并或替换字段数据。

    在此处查看此答案 MS Word Office Automation - Filling Text Form Fields And Check Box Form Fields And Mail Merge

    从母舰上看到这个:

    http://msdn.microsoft.com/en-us/library/ff433638.aspx

    【讨论】:

    • 当文档中的某个部分您必须遍历某些数据时,这是否有效?
    • 如果这是一个长时间运行的进程,例如 ASP.Net 或 Windows 服务,您将遇到 Office 自动化问题。
    【解决方案4】:

    如果您不想使用外部库,Interop 对您来说太慢,而且纯 HTML 和邮件合并模板都不够灵活,您可以将内容作为文本或 HTML 写入一个或多个文件(使用 C# ),在 Word 文档中创建一个 VBA 宏,该宏本身会创建第二个 Word 文档,读取内容文件并在之后执行您想要的任何格式。

    您可以通过使用命令行开关 /m 启动 Word 以编程方式运行此宏。

    【讨论】:

      【解决方案5】:

      另一种可能的方法,如果您的 html 是 xhtml(即 XML 兼容),您可以使用 XSLT 将其转换为 Word XML 格式。但这需要花费 LOOOOOOOOOOONG 时间来编写代码。

      如果您不必使用 HTML 作为起点,您可以简单地自己构建 Word XML 文档,而不是使用 XSLT,这会更容易。耗时但可能 - 这是我在工作中经常做的事情。

      【讨论】:

        【解决方案6】:

        如果第三方组件是一个选项,我会推荐来自Aspose 的东西。
        到目前为止,我对他们的工具非常满意。 API 有点杂乱,但一切正常。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-10
          • 2014-01-03
          • 2011-05-09
          • 1970-01-01
          相关资源
          最近更新 更多