`
wjm901215
  • 浏览: 154102 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

利用 Visual C# .NET 和 asp .net 使 Word 自动新建文档

阅读更多

概要

loadTOCNode(1, 'summary');
本文分步介绍如何利用 Visual C# .NET 的自动化功能在 Word 中创建新文档。

代码示例

loadTOCNode(3, 'summary');本文中的代码示例将说明如何完成以下任务:
插入包含文本和格式的段落。
浏览和修改文档中的不同范围。
插入表格、设置表格格式并在表格中填充数据。
添加图表。
要利用 Visual C# .NET 的自动化功能创建新的 Word 文档,请执行以下步骤:
1. 启动 Microsoft Visual Studio .NET。在文件菜单上,单击新建,然后单击项目。在项目类型下,单击 Visual C# 项目,然后单击模板下的 Windows 应用程序。默认情况下会创建 Form1。
2. 添加对 Microsoft Word 对象库的引用。为此,请按照下列步骤操作:
a. 项目菜单上,单击添加引用
b. COM 选项卡上,找到 Microsoft Word 对象库,然后单击选择
c. 添加引用对话框中单击确定,接受您的选择。如果系统提示您为选定的库生成包装,请单击
3. 视图菜单上,选择工具箱以显示工具箱,然后向 Form1 添加一个按钮。
4. 双击 Button1。出现该窗体的代码窗口。
5. 在代码窗口中,将以下代码
private void button1_Click(object sender, System.EventArgs e)
{
}
					
替换为:
private void button1_Click(object sender, System.EventArgs e)
{
	object oMissing = System.Reflection.Missing.Value;
	object oEndOfDoc = "\\endofdoc"; /* \endofdoc is a predefined bookmark */ 

	//Start Word and create a new document.
	Word._Application oWord;
	Word._Document oDoc;
	oWord = new Word.Application();
	oWord.Visible = true;
	oDoc = oWord.Documents.Add(ref oMissing, ref oMissing,
		ref oMissing, ref oMissing);

	//Insert a paragraph at the beginning of the document.
	Word.Paragraph oPara1;
	oPara1 = oDoc.Content.Paragraphs.Add(ref oMissing);
	oPara1.Range.Text = "Heading 1";
	oPara1.Range.Font.Bold = 1;
	oPara1.Format.SpaceAfter = 24;    //24 pt spacing after paragraph.
	oPara1.Range.InsertParagraphAfter();

	//Insert a paragraph at the end of the document.
	Word.Paragraph oPara2;
	object oRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
	oPara2 = oDoc.Content.Paragraphs.Add(ref oRng);
	oPara2.Range.Text = "Heading 2";
	oPara2.Format.SpaceAfter = 6;
	oPara2.Range.InsertParagraphAfter();

	//Insert another paragraph.
	Word.Paragraph oPara3;
	oRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
	oPara3 = oDoc.Content.Paragraphs.Add(ref oRng);
	oPara3.Range.Text = "This is a sentence of normal text. Now here is a table:";
	oPara3.Range.Font.Bold = 0;
	oPara3.Format.SpaceAfter = 24;
	oPara3.Range.InsertParagraphAfter();

	//Insert a 3 x 5 table, fill it with data, and make the first row
	//bold and italic.
	Word.Table oTable;
	Word.Range wrdRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
	oTable = oDoc.Tables.Add(wrdRng, 3, 5, ref oMissing, ref oMissing);
	oTable.Range.ParagraphFormat.SpaceAfter = 6;
	int r, c;
	string strText;
	for(r = 1; r <= 3; r++)
		for(c = 1; c <= 5; c++)
		{
			strText = "r" + r + "c" + c;
			oTable.Cell(r, c).Range.Text = strText;
		}
	oTable.Rows[1].Range.Font.Bold = 1;
	oTable.Rows[1].Range.Font.Italic = 1;

	//Add some text after the table.
	Word.Paragraph oPara4;
	oRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
	oPara4 = oDoc.Content.Paragraphs.Add(ref oRng);
	oPara4.Range.InsertParagraphBefore();
	oPara4.Range.Text = "And here's another table:";
	oPara4.Format.SpaceAfter = 24;
	oPara4.Range.InsertParagraphAfter();

	//Insert a 5 x 2 table, fill it with data, and change the column widths.
	wrdRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
	oTable = oDoc.Tables.Add(wrdRng, 5, 2, ref oMissing, ref oMissing);
	oTable.Range.ParagraphFormat.SpaceAfter = 6;
	for(r = 1; r <= 5; r++)
		for(c = 1; c <= 2; c++)
		{
			strText = "r" + r + "c" + c;
			oTable.Cell(r, c).Range.Text = strText;
		}
	oTable.Columns[1].Width = oWord.InchesToPoints(2); //Change width of columns 1 & 2
	oTable.Columns[2].Width = oWord.InchesToPoints(3);

	//Keep inserting text. When you get to 7 inches from top of the
	//document, insert a hard page break.
	object oPos;
	double dPos = oWord.InchesToPoints(7);
	oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range.InsertParagraphAfter();
	do
	{
		wrdRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
		wrdRng.ParagraphFormat.SpaceAfter = 6;
		wrdRng.InsertAfter("A line of text");
		wrdRng.InsertParagraphAfter();
		oPos = wrdRng.get_Information
                       (Word.WdInformation.wdVerticalPositionRelativeToPage);
	}
	while(dPos >= Convert.ToDouble(oPos));
	object oCollapseEnd = Word.WdCollapseDirection.wdCollapseEnd;
	object oPageBreak = Word.WdBreakType.wdPageBreak;
	wrdRng.Collapse(ref oCollapseEnd);
	wrdRng.InsertBreak(ref oPageBreak);
	wrdRng.Collapse(ref oCollapseEnd);
	wrdRng.InsertAfter("We're now on page 2. Here's my chart:");
	wrdRng.InsertParagraphAfter();

	//Insert a chart.
	Word.InlineShape oShape;
	object oClassType = "MSGraph.Chart.8";
	wrdRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
	oShape = wrdRng.InlineShapes.AddOLEObject(ref oClassType, ref oMissing, 
		ref oMissing, ref oMissing, ref oMissing,
		ref oMissing, ref oMissing, ref oMissing);

	//Demonstrate use of late bound oChart and oChartApp objects to
	//manipulate the chart object with MSGraph.
	object oChart;
	object oChartApp;
	oChart = oShape.OLEFormat.Object;
	oChartApp = oChart.GetType().InvokeMember("Application",
		BindingFlags.GetProperty, null, oChart, null);

	//Change the chart type to Line.
	object[] Parameters = new Object[1];
	Parameters[0] = 4; //xlLine = 4
	oChart.GetType().InvokeMember("ChartType", BindingFlags.SetProperty,
		null, oChart, Parameters);

	//Update the chart image and quit MSGraph.
	oChartApp.GetType().InvokeMember("Update",
		BindingFlags.InvokeMethod, null, oChartApp, null);
	oChartApp.GetType().InvokeMember("Quit",
		BindingFlags.InvokeMethod, null, oChartApp, null);
	//... If desired, you can proceed from here using the Microsoft Graph 
	//Object model on the oChart and oChartApp objects to make additional
	//changes to the chart.

	//Set the width of the chart.
	oShape.Width = oWord.InchesToPoints(6.25f);
	oShape.Height = oWord.InchesToPoints(3.57f);

	//Add text after the chart.
	wrdRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
	wrdRng.InsertParagraphAfter();
	wrdRng.InsertAfter("THE END.");

	//Close this form.
	this.Close();
}
					
6. 滚动到代码窗口的顶部。将下面的代码行添加到 using 指令列表的末尾:
using Word = Microsoft.Office.Interop.Word;
using System.Reflection;
					
7. 按 F5 键生成并运行程序。
8. 单击 Button1,启动 Word 自动化功能并创建文档。
代码执行完成后,检查为您创建的文档。该文档包含两页设置了格式的段落、表格和图表。

使用模板

loadTOCNode(3, 'summary');如果您要使用自动化功能创建的文档都是通用格式,则利用基于预设格式的模板的新文档来开始创建过程会更加容易。与从头创建文档相比,将某个模板与 Word 自动化客户端配合使用有两大优点:
您可以对整个文档中的对象的格式设置和布局施加更多控制。
可以使用较少的代码创建文档。
通过使用模板,可以精确地调整表格、段落和其他对象在文档中的布局,并可为这些对象添加格式设置。通过使用自动化功能,可以基于包含下面这样的代码的模板创建新文档:
object oTemplate = "c:\\MyTemplate.dot";
oDoc = oWord.Documents.Add(ref oTemplate, ref oMissing,
	ref oMissing, ref oMissing);
				
在模板中,可以定义书签,这样,自动化客户端就可以在文档的特定位置加入可变文本,如下所示:
object oBookMark = "MyBookmark";
oDoc.Bookmarks.Item(ref oBookMark).Range.Text = "Some Text Here";
				
使用模板的另一个优点在于,您可以创建和存储希望在运行时应用的格式样式,如下所示:
object oStyleName = "MyStyle";
oDoc.Bookmarks.Item(ref oBookMark).Range.set_Style(ref oStyleName);
				
- 或者 -
object oStyleName = "MyStyle";
oWord.Selection.set_Style(ref oStyleName);
				

参考

loadTOCNode(1, 'references');
有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
301659 (http://support.microsoft.com/kb/301659/EN-US/) HOWTO:利用 Visual C# .NET 使 Microsoft Word 自动执行邮件合并
302902 (http://support.microsoft.com/kb/302902/EN-US/) HOWTO:用 Visual C# .NET 进行 Office 自动化服务器的绑定
有关详细信息,请访问下面的 Microsoft Developer Network (MSDN) 网站:
Microsoft Office Development with Visual Studio(使用 Visual Studio 进行 Microsoft Office 开发)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnoxpta/html/vsofficedev.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnoxpta/html/vsofficedev.asp)

Word in the Office (MSDN Online Article)(Office 中的 Word(MSDN 联机文章))
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnofftalk/html/office112000.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnofftalk/html/office112000.asp)

One More Word (MSDN Online Article)(补充说明(MSDN 联机文章))
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnofftalk/html/office12072000.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnofftalk/html/office12072000.asp)
asp .net
default.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Microsoft.Office.Interop.Word;
using System.Reflection;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
Application _wordApp = null;
_wordApp = new Application();
_wordApp.Visible = true;
Object missing = Type.Missing;
object oMissing = System.Reflection.Missing.Value;
object oEndOfDoc = "\\endofdoc"; /* \endofdoc is a predefined bookmark */

Object sFileName = "C:\\Sample.doc";
Documents docs = _wordApp.Documents;
Document doc = docs.Add(ref missing, ref missing, ref missing, ref missing);
doc.Activate();
Paragraph oPara1;
oPara1 = doc.Content.Paragraphs.Add(ref missing);
oPara1.Range.Text = "Heading 1";
oPara1.Range.Font.Bold = 1;
oPara1.Format.SpaceAfter = 24; //24 pt spacing after paragraph.
oPara1.Range.InsertParagraphAfter();
Paragraph oPara2;
object oRng = doc.Bookmarks.get_Item(ref oEndOfDoc).Range;
oPara2 = doc.Content.Paragraphs.Add(ref oRng);
oPara2.Range.Text = "Heading 2";
oPara2.Format.SpaceAfter = 6;
oPara2.Range.InsertParagraphAfter();
Paragraph oPara3;
oRng = doc.Bookmarks.get_Item(ref oEndOfDoc).Range;
oPara3 = doc.Content.Paragraphs.Add(ref oRng);
oPara3.Range.Text = "This is a sentence of normal text. Now here is a table:";
oPara3.Range.Font.Bold = 0;
oPara3.Format.SpaceAfter = 24;
oPara3.Range.InsertParagraphAfter();
Microsoft.Office.Interop.Word.Table oTable;
Range wrdRng = doc.Bookmarks.get_Item(ref oEndOfDoc).Range;
oTable = doc.Tables.Add(wrdRng, 3, 5, ref oMissing, ref oMissing);
oTable.Range.ParagraphFormat.SpaceAfter = 6;
int r, c;
string strText;
for (r = 1; r <= 3; r++)
for (c = 1; c <= 5; c++)
{
strText = "r" + r + "c" + c;
oTable.Cell(r, c).Range.Text = strText;
}
oTable.Rows[1].Range.Font.Bold = 1;
oTable.Rows[1].Range.Font.Italic = 1;
Paragraph oPara4;
oRng = doc.Bookmarks.get_Item(ref oEndOfDoc).Range;
oPara4 = doc.Content.Paragraphs.Add(ref oRng);
oPara4.Range.InsertParagraphBefore();
oPara4.Range.Text = "And here's another table:";
oPara4.Format.SpaceAfter = 24;
oPara4.Range.InsertParagraphAfter();
wrdRng = doc.Bookmarks.get_Item(ref oEndOfDoc).Range;
oTable = doc.Tables.Add(wrdRng, 5, 2, ref oMissing, ref oMissing);
oTable.Range.ParagraphFormat.SpaceAfter = 6;
for (r = 1; r <= 5; r++)
for (c = 1; c <= 2; c++)
{
strText = "r" + r + "c" + c;
oTable.Cell(r, c).Range.Text = strText;
}
oTable.Columns[1].Width = _wordApp.InchesToPoints(2); //Change width of columns 1 & 2
oTable.Columns[2].Width = _wordApp.InchesToPoints(3);
//Keep inserting text. When you get to 7 inches from top of the
//document, insert a hard page break.
object oPos;
double dPos = _wordApp.InchesToPoints(7);
doc.Bookmarks.get_Item(ref oEndOfDoc).Range.InsertParagraphAfter();
do
{
wrdRng = doc.Bookmarks.get_Item(ref oEndOfDoc).Range;
wrdRng.ParagraphFormat.SpaceAfter = 6;
wrdRng.InsertAfter("A line of text");
wrdRng.InsertParagraphAfter();
oPos = wrdRng.get_Information
(WdInformation.wdVerticalPositionRelativeToPage);
}
while (dPos >= Convert.ToDouble(oPos));
object oCollapseEnd = WdCollapseDirection.wdCollapseEnd;
object oPageBreak = WdBreakType.wdPageBreak;
wrdRng.Collapse(ref oCollapseEnd);
wrdRng.InsertBreak(ref oPageBreak);
wrdRng.Collapse(ref oCollapseEnd);
wrdRng.InsertAfter("We're now on page 2. Here's my chart:");
wrdRng.InsertParagraphAfter();
//Insert a chart.
InlineShape oShape;
object oClassType = "MSGraph.Chart.8";
wrdRng = doc.Bookmarks.get_Item(ref oEndOfDoc).Range;
oShape = wrdRng.InlineShapes.AddOLEObject(ref oClassType, ref oMissing,
ref oMissing, ref oMissing, ref oMissing,
ref oMissing, ref oMissing, ref oMissing);
//Demonstrate use of late bound oChart and oChartApp objects to
//manipulate the chart object with MSGraph.
object oChart;
object oChartApp;
oChart = oShape.OLEFormat.Object;
oChartApp = oChart.GetType().InvokeMember("Application",
BindingFlags.GetProperty, null, oChart, null);
//Change the chart type to Line.
object[] Parameters = new Object[1];
Parameters[0] = 4; //xlLine = 4
oChart.GetType().InvokeMember("ChartType", BindingFlags.SetProperty,
null, oChart, Parameters);
//Update the chart image and quit MSGraph.
oChartApp.GetType().InvokeMember("Update",
BindingFlags.InvokeMethod, null, oChartApp, null);
oChartApp.GetType().InvokeMember("Quit",
BindingFlags.InvokeMethod, null, oChartApp, null);
//... If desired, you can proceed from here using the Microsoft Graph
//Object model on the oChart and oChartApp objects to make additional
//changes to the chart.
//Set the width of the chart.
oShape.Width = _wordApp.InchesToPoints(6.25f);
oShape.Height = _wordApp.InchesToPoints(3.57f);
//Add text after the chart.
wrdRng = doc.Bookmarks.get_Item(ref oEndOfDoc).Range;
wrdRng.InsertParagraphAfter();
wrdRng.InsertAfter("THE END.");
doc.SaveAs(ref sFileName, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
doc.Close(ref missing, ref missing, ref missing);
_wordApp.Quit(ref missing, ref missing, ref missing);
_wordApp = null;
}
}
分享到:
评论

相关推荐

    asp.net 记住密码 自动登录

    总之,ASP.NET的"记住密码"和"自动登录"功能是通过Forms Authentication机制实现的,通过创建和管理加密的身份验证cookie来保持用户的登录状态。理解这一机制并正确实现这两个功能,能显著提升网站的用户体验。在...

    ASP.NET 3.5 开发大全word课件

    4.1.5 ASP.NET网站和ASP.NET应用程序的区别 4.2 代码隐藏页模型的解释过程 4.3 代码隐藏页模型的事件驱动处理 4.4 ASP.NET客户端状态 4.4.1 视图状态 4.4.2 控件状态 4.4.3 隐藏域 4.4.4 Cookie 4.4.5 客户端状态...

    Word操作C#对Word操作的造作代码示例

    通过上述步骤,我们成功地用C#实现了对Word文档的基本操作,包括创建文档、插入文本和格式设置。这种技术可用于各种应用场景,比如自动化报告生成、批量文档编辑等。掌握这些基本操作对于提高开发效率和增强应用程序...

    记事本记事本提供学习

    开发人员可能会使用Visual Studio作为IDE,因为它提供了对ASP.NET和C#的全面支持。 压缩包中的“记事本”可能是源代码文件,包含了实现上述功能的C#代码。为了学习和理解这些功能的实现,你可以通过查看源代码来...

    2021-2022计算机二级等级考试试题及答案No.13866.docx

    14. ASP.NET不使用JavaScript作为编程语言,而是基于.NET框架,可以使用C#、VB.NET等语言。 15. Word是常用的文字处理软件,用于创建、编辑和排版文档。 16. 在JSP中,要使对象在整个应用程序中有效,需要将其保存...

    2021-2022计算机二级等级考试试题及答案No.298.docx

    计算机二级等级考试是针对计算机基础知识和编程能力的一项标准化测试,涵盖多个方面的知识,包括VB(Visual Basic)编程、Word文档处理、数据结构、网络基础、数据库操作等。以下是对给定文件中部分内容的知识点解析...

    2021-2022计算机二级等级考试试题及答案No.9861.docx

    以上知识点涵盖了 ASP.NET、SQL 命令对象、数据库结构、属性设置、Access 参照完整性、二进制数表示、字符串处理、集合遍历、Windows 文件操作、RAM、PowerPoint、Python 序列类型、Word 文档创建、ENIAC、类和对象...

    2021-2022计算机二级等级考试试题及答案No.14234.docx

    - **ASP.NET与.NET框架的关系**:ASP.NET确实依赖于微软的.NET框架来运行,因为它提供了必要的运行环境和支持库。 - **执行效率**:相比于传统的基于脚本的Web开发方式(如ASP),ASP.NET采用面向对象的语言(如C#、...

    2021-2022计算机二级等级考试试题及答案No.3102.docx

    - **编程语言**:ASP.NET支持多种编程语言,包括C#和VB.NET,并非JavaScript。 #### 7. Java多线程实现 - **实现方式**:通过继承`Thread`类或实现`Runnable`接口两种方式创建多线程。 - **继承Thread类**:可以...

    2021-2022计算机二级等级考试试题及答案No.4364.docx

    3. ASP.NET是Microsoft开发的Web应用程序框架,用于创建动态网页。使用ASP.NET开发的网页文件扩展名为.aspx。 4. 索引在数据库中用于加速查询,通常一个索引有多个属性,如主键索引、唯一索引等,因此选项C表示索引...

    2021-2022计算机二级等级考试试题及答案No.15917.docx

    18. ASP.NET开发:Web窗体页的C#代码可以采用单文件页模型或者代码隐藏页模型,后者将代码和界面分离。 19. MySQL账户管理:创建MySQL账户可以通过GRANT、CREATE USER语句,或直接操作MySQL的授权表。 20. Word...

    2021-2022计算机二级等级考试试题及答案No.17406.docx

    PHP不是ASP.NET支持的语言之一,ASP.NET主要支持VB.NET、JavaScript和C#等语言。 ### 11. Label控件的属性 在Windows Forms应用中,Label控件用于显示文本。 - **答案解析**:正确答案是A。Label控件的属性包括...

    2021-2022计算机二级等级考试试题及答案No.17062.docx

    - **ASP.NET**:一种用于开发动态网页的应用框架。 - **支持的语言**:C#、VB.NET 和 Jscript.NET。 ### 5. Java网络编程中的DatagramSocket **知识点概述**: - **DatagramSocket**:用于UDP协议的数据报套接字。...

    2021-2022计算机二级等级考试试题及答案No.13992.docx

    - ASP.NET验证控件确实可以在客户端和服务器端进行验证,但是客户端验证依赖于JavaScript的支持,因此不是所有浏览器环境下都能自动进行客户端验证。 2. **B选项正确:** - 客户端验证依赖于JavaScript,服务器端...

    2021-2022计算机二级等级考试试题及答案No.15944.docx

    - C项错误,ASP.NET 不支持 PHP,但它支持 VB.NET、C# 和 JavaScript 等语言。 #### 19. 冯·诺依曼体系结构 - **知识点**: 冯·诺依曼体系结构提出了存储程序的概念,即程序和数据一起存储在内存中。 - **解析*...

    2021-2022计算机二级等级考试试题及答案No.13097.docx

    Word新建文档的快捷键 - **知识点**: 在Microsoft Word中,使用Ctrl+N可以快速新建一个文档。 #### 8. 运行宏或宏组 - **知识点**: 宏是预先定义好的一系列操作步骤,可以通过运行宏或宏组来触发这些操作。 - ...

Global site tag (gtag.js) - Google Analytics