技术标签: 文档 reference string asp.net .net microsoft object
在ASP.NET中使用Microsoft Word文档
[日期:2004-10-04] 来源: CSDN <http://dev.csdn.net/develop/article/20/20901.shtm> 作者: [字体: 大 <javascript:ContentSize(16)> 中 <javascript:ContentSize(14)> 小 <javascript:ContentSize(12)>]
[来源]http://www.codeproject.com/useritems/wordapplication.asp
[作者]Michela
[下载本文中使用的演示工程] 工程文件 大小:309 Kb <http://www.codeproject.com/useritems/WordApplication/WordApplication_demo.zip>
[介绍]
本文是应在ASP.NET里创建Microsoft Word文档之需而写的。这篇文章演示了在ASP.NET里怎么创建和修改Microsoft Word文档。
[背景]
自动化是一种能让各种语言编写的(如:Visual Basic.NET或C#)应用程序在程序级别上控制其他应用程序。
对于Word的自动化允许你执行诸如创建新的文档,向文档里添加文本,邮件合并和格式化文档这些操作。在Word和其他的Microsoft Office程序里,那些通过用户接口进行的可视化操作也可以通过程序级别的自动化来实现。
Word通过对象模型把这个程序可操作的功能向外提供了使用接口。
对象模型是一组类和方法的集合,这些类和方法与Word的逻辑组件构成对应。例如,他可能是应用程序对象,文档对象,段落对象,每一个对象都包含了Word组件的功能。
[建立工程]
在.NET里操作Word的第一步就是添加COM引用到你的工程里,通过右键点击Solution Explorer的Reference,Add Reference。选择COM选项卡,查找Microsoft Word 10.0 Object Library。点击选择,OK。
这将把封装有Word的COM的程序集自动的添加到应用程序目录里。
现在,你可以建立一个Word的实例了:
Word.ApplicationClass oWordApp = new Word.ApplicationClass();
你可以调用Word提供给你的方法和属性来操纵Word文档。
学习如何使用Word,Excel,Powerpoint的对象模型最好的途径就是使用在这些Office应用里使用Macro Recorder:
1.在Tools菜单的Macro选项里选择 Record New Macro ,并且执行你有兴趣的任务。
2.在Tools菜单的Macro选项里选择 Stop Recording。
3.如果你进行了纪录,选择Tools菜单的Macro选项里的Macros,找到你记录的宏,你可以编辑它。
上面的操作产生了VBA代码来完成你记录的任务。需要注意的是,宏在大多数情况下不是最好的代码,但是它提供了一种便捷和可用的方法。
下面例子打开并添加一写文字:
object fileName = "c://database//test.doc";
object readOnly = false;
object isVisible = true;
object missing = System.Reflection.Missing.Value;
Word.ApplicationClass oWordApp = new Word.ApplicationClass();
Word.Document oWordDoc = oWordApp.Documents.Open(ref fileName, ref missing,ref readOnly,
ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref isVisible,ref missing,ref missing,ref missing);
oWordDoc.Activate();
oWordApp.Selection.TypeText("This is the text");
oWordApp.Selection.TypeParagraph();
oWordDoc.Save();
oWordApp.Application.Quit(ref missing, ref missing, ref missing);
如果创建一个新文档并保存是这样写的:
Word.ApplicationClass oWordApp = new Word.ApplicationClass();
Word.Document oWordDoc = oWordApp.Documents.Add(ref missing, ref missing,ref missing, ref missing);
oWordDoc.Activate();
oWordApp.Selection.TypeText("This is the text");
oWordApp.Selection.TypeParagraph();
oWordDoc.SaveAs("c://myfile.doc");
oWordApp.Application.Quit(ref missing, ref missing, ref missing);
在C#里,Word文档类的打开方法是这样定义的:Open(ref object, ref object, ref object, ref object, ref object, ref object, ref object, ref object, ref object, ref object, ref object, ref object, ref object, ref object, ref object)。在C#里的打开方法需要15个参数,并且每个参数必须被ref关键字所描述,而且是object类型。
第一个参数是文件,名,在Visual Basic.NET里通常是一个String,但是在在C#里,它必须是一个包含有String的object,代码是这样的:
object fileName = "c://database//test.doc";
虽然我们仅需要使用Open方法的第一个参数,但是C#不允许使用默认参数,所以我们赋予它14个object类型的值:System.Reflection.Missing.Value
[使用摸版]
如果你需要自动的建立有通用格式的文档,那你可以使用基于预格式化的摸版来建立新文档,这样可以方便很多。
在Word里使用摸版而不是建立空文档有两个明显的优点:
1.你可以更大程度的格式化文档和控制文档里的对象。
2.可以用较少的代码建立文档。
通过使用摸版,你可以调整表格、段落和其他一些在文档里的对象的位置,同时包括格式化这些对象。通过使用自动化处理,你可以建立一个基于摸版的文档,代码如下:
Word.ApplicationClass oWordApp = new Word.ApplicationClass();
object oTemplate = "c://MyTemplate.dot";
oWordDoc = oWordApp.Documents.Add(ref oTemplate, ref Missing,ref Missing, ref Missing);
在你使用的摸版里,你可以定义一些记号,自动化处理将向这些位置填充文本,如下:
object oBookMark = "MyBookmark";
oWordDoc.Bookmarks.Item(ref oBookMark).Range.Text = "Some Text Here";
使用摸版的另一个优点是你可以创建和保存那些在运行过程中你想要的格式化样式,如下:
object oStyleName = "MyStyle";
oWordDoc.Bookmarks.Item(ref oBookMark).Range.set_Style(ref oStyleName);
[使用CCWordApp类]
在工程中包含了CCWordApp.cs这个文件,我不想总是在写象插入文本,打开文档这样的代码。
所以,我决定把一些最重要的功能封装到CCWordApp类里去。
下面代码简要描述了这个类和他的功能:
public class CCWordApp
{
//it's a reference to the COM object of Microsoft Word Application
private Word.ApplicationClass oWordApplic;
// it's a reference to the document in use
private Word.Document oWordDoc;
// Activate the interface with the COM object of Microsoft Word
public CCWordApp();
// Open an existing file or open a new file based on a template
public void Open( string strFileName);
// Open a new document
public void Open( );
// Deactivate the interface with the COM object of Microsoft Word
public void Quit( );
// Save the document
public void Save( );
//Save the document with a new name as HTML document
public void SaveAs(string strFileName );
// Save the document in HTML format
public void SaveAsHtml(string strFileName );
// Insert Text
public void InsertText( string strText);
// Insert Line Break
public void InsertLineBreak( );
// Insert multiple Line Break
public void InsertLineBreak( int nline);
// Set the paragraph alignment
// Possible values of strType :"Centre", "Right", "Left", "Justify"
public void SetAlignment(string strType );
// Set the font style
// Possible values of strType :"Bold","Italic,"Underlined"
public void SetFont( string strType );
// Disable all the style
public void SetFont( );
// Set the font name
public void SetFontName( string strType );
// Set the font dimension
public void SetFontSize( int nSize );
// Insert a page break
public void InsertPagebreak();
// Go to a predefined bookmark
public void GotoBookMark( string strBookMarkName);
// Go to the end of document
public void GoToTheEnd( );
// Go to the beginning of document
public void GoToTheBeginning( );
打开一个存在的文件的代码将是这样的:
CCWordApp test ;
test = new CCWordApp();
test.Open ("c://database//test.doc");
test.InsertText("This is the text");
test.InsertLineBreak;
test.Save ();
test.Quit();
[细节]
演示工程包含:
CCWordApp.cs - 上面使用的类
CreateDocModel.aspx - 建立基于使用书签的摸版的新文档的例子。
CreateNewDoc.aspx - 建立新文档,并向其中添加一写文本。
ModifyDocument.aspx - 打开一个存在的文档,并在末尾追加一些文本。
template/template1.dot - 摸版的例子(在CreateDocModel.aspx中使用到)
注意你用来保存文档的目录,应该是可重写的。
可以在 Web.config 里修改这个路径。
[参考文献]
Microsoft Word Objects <http://msdn.microsoft.com/library/default.asp?url=/library/en-us/off2000/html/wotocObjectModelApplication.asp>
Converting Microsoft Office VBA Macros to Visual Basic .NET and C# <http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnofftalk/html/office11072002.asp>
HOWTO: Automate Microsoft Word to Perform a Mail Merge from Visual Basic .NET <http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/Q301/6/56.ASP&NoWebContent=1>
A Primer to the Office XP Primary Interop Assemblies <http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnofftalk/html/office10032002.asp>
HOWTO: Find and Use Office Object Model Documentation <http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/q222/1/01.asp&NoWebContent=1>
Creating and Opening Microsoft Word Documents from .NET using C# <http://www.c-sharpcorner.com/Code/2002/Mar/WordFromDotNet.asp>
文章浏览阅读1k次。通过使用ajax方法跨域请求是浏览器所不允许的,浏览器出于安全考虑是禁止的。警告信息如下:不过jQuery对跨域问题也有解决方案,使用jsonp的方式解决,方法如下:$.ajax({ async:false, url: 'http://www.mysite.com/demo.do', // 跨域URL ty..._nginx不停的xhr
文章浏览阅读2k次。关于在 Oracle 中配置 extproc 以访问 ST_Geometry,也就是我们所说的 使用空间SQL 的方法,官方文档链接如下。http://desktop.arcgis.com/zh-cn/arcmap/latest/manage-data/gdbs-in-oracle/configure-oracle-extproc.htm其实简单总结一下,主要就分为以下几个步骤。..._extproc
文章浏览阅读1.5w次。linux下没有上面的两个函数,需要使用函数 mbstowcs和wcstombsmbstowcs将多字节编码转换为宽字节编码wcstombs将宽字节编码转换为多字节编码这两个函数,转换过程中受到系统编码类型的影响,需要通过设置来设定转换前和转换后的编码类型。通过函数setlocale进行系统编码的设置。linux下输入命名locale -a查看系统支持的编码_linux c++ gbk->utf8
文章浏览阅读750次。今天准备从生产库向测试库进行数据导入,结果在imp导入的时候遇到“ IMP-00009:导出文件异常结束” 错误,google一下,发现可能有如下原因导致imp的数据太大,没有写buffer和commit两个数据库字符集不同从低版本exp的dmp文件,向高版本imp导出的dmp文件出错传输dmp文件时,文件损坏解决办法:imp时指定..._imp-00009导出文件异常结束
文章浏览阅读143次。当下是一个大数据的时代,各个行业都离不开数据的支持。因此,网络爬虫就应运而生。网络爬虫当下最为火热的是Python,Python开发爬虫相对简单,而且功能库相当完善,力压众多开发语言。本次教程我们爬取前程无忧的招聘信息来分析Python程序员需要掌握那些编程技术。首先在谷歌浏览器打开前程无忧的首页,按F12打开浏览器的开发者工具。浏览器开发者工具是用于捕捉网站的请求信息,通过分析请求信息可以了解请..._初级python程序员能力要求
文章浏览阅读7.6k次,点赞2次,收藏6次。@Service标注的bean,类名:ABDemoService查看源码后发现,原来是经过一个特殊处理:当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致public class AnnotationBeanNameGenerator implements BeanNameGenerator { private static final String C..._@service beanname
文章浏览阅读6.9w次,点赞73次,收藏463次。1.前序创建#include<stdio.h>#include<string.h>#include<stdlib.h>#include<malloc.h>#include<iostream>#include<stack>#include<queue>using namespace std;typed_二叉树的建立
文章浏览阅读7.1k次。在Asp.net上使用Excel导出功能,如果文件名出现中文,便会以乱码视之。 解决方法: fileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);_asp.net utf8 导出中文字符乱码
文章浏览阅读2.1k次,点赞4次,收藏23次。第一次实验 词法分析实验报告设计思想词法分析的主要任务是根据文法的词汇表以及对应约定的编码进行一定的识别,找出文件中所有的合法的单词,并给出一定的信息作为最后的结果,用于后续语法分析程序的使用;本实验针对 PL/0 语言 的文法、词汇表编写一个词法分析程序,对于每个单词根据词汇表输出: (单词种类, 单词的值) 二元对。词汇表:种别编码单词符号助记符0beginb..._对pl/0作以下修改扩充。增加单词
文章浏览阅读773次。我在使用adb.exe时遇到了麻烦.我想使用与bash相同的adb.exe shell提示符,所以我决定更改默认的bash二进制文件(当然二进制文件是交叉编译的,一切都很完美)更改bash二进制文件遵循以下顺序> adb remount> adb push bash / system / bin /> adb shell> cd / system / bin> chm..._adb shell mv 权限
文章浏览阅读6.8k次,点赞12次,收藏125次。1. 单目相机标定引言相机标定已经研究多年,标定的算法可以分为基于摄影测量的标定和自标定。其中,应用最为广泛的还是张正友标定法。这是一种简单灵活、高鲁棒性、低成本的相机标定算法。仅需要一台相机和一块平面标定板构建相机标定系统,在标定过程中,相机拍摄多个角度下(至少两个角度,推荐10~20个角度)的标定板图像(相机和标定板都可以移动),即可对相机的内外参数进行标定。下面介绍张氏标定法(以下也这么称呼)的原理。原理相机模型和单应矩阵相机标定,就是对相机的内外参数进行计算的过程,从而得到物体到图像的投影_相机-投影仪标定
文章浏览阅读2.2k次。文章目录Wayland 架构Wayland 渲染Wayland的 硬件支持简 述: 翻译一篇关于和 wayland 有关的技术文章, 其英文标题为Wayland Architecture .Wayland 架构若是想要更好的理解 Wayland 架构及其与 X (X11 or X Window System) 结构;一种很好的方法是将事件从输入设备就开始跟踪, 查看期间所有的屏幕上出现的变化。这就是我们现在对 X 的理解。 内核是从一个输入设备中获取一个事件,并通过 evdev 输入_wayland