以编程方式从ASP.NET生成可编辑的Word文档?

时间:2010-06-25 16:23:01

标签: asp.net html ms-word

目的是生成可在事后手动编辑的提案文档,但在将其发送给客户之前。

许多提案内容将从现有的HTML网站内容(支持CMS)以及某些场景的某些自定义(非HTML)注入中提取。当然,条件逻辑可以进入服务器端ASP.NET以适当地改变内容。

如果对Word API的原始操作非常困难,我会对第三方工具持开放态度。事实上,一个好的第三方工具可能就是答案。

5 个答案:

答案 0 :(得分:3)

为.Net使用Aspose Words组件。

Aspose Words Component Link

该组件本身可以理解Microsoft Word文件格式,而无需在您的应用程序环境中安装任何Microsoft Office产品。然后,您可以从现有的单词模板开始,或者从头开始以编程方式构建整个Microsoft Word文档。然后,Word对象模型允许您导出到doc / docx等,并将其另存为本机Word文件。

他们在自己的网站上设置了大量演示。

答案 1 :(得分:3)

之前我没有使用任何第三方工具,因为我只为已经安装了Office的PC编写Office自动化应用程序。

从头开始创建文档,或者将它们基于模板,非常简单。使用模板,您可以定义书签和邮件合并字段,以便更轻松地查找和替换文档元素。

以下是您可能会发现有用的一些内容:

命名和可选参数
Word对象模型相当容易使用。 VB.NET曾经比C#更容易使用:因为Office自动化API最初是用VB编写的,所以你可以利用可选参数。在早期版本的C#中,您必须在API调用中指定每个参数,这非常繁琐。我知道在Visual C#2010中已经发生了变化:

如何:在Office编程中使用命名参数和可选参数(C#编程指南) http://msdn.microsoft.com/en-us/library/dd264738.aspx

<强>教程
我发现这些教程非常方便:

使用VB.NET自动化Office程序
http://www.xtremevbtalk.com/showthread.php?t=160433

VB.NET办公自动化常见问题解答
http://www.xtremevbtalk.com/showthread.php?t=160459

从.NET开发人员的角度理解Word对象模型
http://msdn.microsoft.com/en-us/library/aa192495%28office.11%29.aspx

早期和晚期绑定
值得一提的是:通常建议使用后期绑定,但如果您不知道将在应用程序的主机上部署哪个版本的Office,它可能非常有用。早期绑定往往运行得更快,并且在IDE中具有智能感知的优势:

在自动化中使用早期绑定和后期绑定
http://support.microsoft.com/kb/245115

早期与晚期绑定
http://word.mvps.org/faqs/interdev/earlyvslatebinding.htm

搜索和替换
需要注意的一点是,findreplacement对象可能无法正常工作。它不是搜索整个文档,而只搜索主文本。如果文档中有文本框架,则会忽略这些文本框架。相反,你必须循环遍历所有的StoryRanges,并搜索每个的内容。这是我在VB.NET中搜索主要文本故事和文本框架的原因:

Private Sub FindReplaceAll(ByVal objDoc As Object, ByVal strFind As String, ByVal strReplacement As String)
    Dim rngStory As Object

    For Each rngStory In objDoc.StoryRanges
        Do
            If rngStory.StoryType = wdMainTextStory Or rngStory.StoryType = wdTextFrameStory Then
                With rngStory.Find
                    .Text = strFind
                    .Replacement.Text = strReplacement
                    .Wrap = wdFindContinue
                    .Execute(Replace:=wdReplaceAll)
                End With
            End If
            rngStory = rngStory.NextStoryRange
        Loop Until rngStory Is Nothing
    Next rngStory
End Sub

StoryRanges Collection对象
http://msdn.microsoft.com/en-us/library/bb178940%28office.12%29.aspx

答案 2 :(得分:2)

关于文档生成和邮件合并,我有很长的历史。在过去,我们甚至在服务器端(ASP)应用程序中广泛使用Office COM。多年来,我们了解到这种方法导致了许多问题,而今天我一直主张在几乎任何情况下都不使用Office COM(Word自动化)。

随着微软推出Open XML SDK,我们设法创建了一个可靠的邮件合并组件,其速度比使用Office COM的解决方案快许多倍。根据我的经验,Open XML SDK允许开发人员创建可靠的解决方案,但需要花费大量的精力和时间才能使其有用且强大。

市场上有几个好的文档生成/处理库。我们后来最终购买了一个,在我看来,创建自己的解决方案(基于Open XML SDK或Office COM)根本就没有回报。

目前我们正在使用Docentric Toolkit这是一个通用的文档处理库,甚至是更好的基于模板的/邮件合并工具包。它允许在MS Word中进行模板设计,然后使用应用程序数据填充它们并生成不同格式的最终​​文档。

答案 3 :(得分:1)

您可以查看使用XSL to generate some WordML.

这种技术绝对令人费解,但在你的布局中给你很大的力量。

答案 4 :(得分:0)

您不需要任何第三方控件来创建Word文档。从2007年开始,Word可以将html作为word文档读取。您只需使用“ .doc ”扩展程序保存任何网页,Word就会对其进行排序。

只需使用您想要的任何格式创建您的网页,然后使用.doc扩展名保存。

我使用HttpWebRequest将Url(带有parmaters)调用到我的页面,然后使用WebResponseStream将我的页面放入缓冲区,然后StreamReader和{ {1}}将其保存到实际文档中。我已经有了自己的自定义功能来下载文件。

如果有人想要我的代码,请告诉我