Asp.net操作Word文档,原来这么简单啊!

Word对象库文件
 

具体做法是打开菜单栏中的项目>添加引用>浏览,在打开的“选择组件”对话框中找到MSWORD.OLB后按确定即可引入此对象库文件,vs.net将会自动将库文件转化为DLL组件,这样我们只要在源码中创建该组件对象即可达到操作Word的目的!
 

如图

Asp.net操作Word文档,原来这么简单啊!

 

这会自动在你的应用程序文件夹中放置一个程序集(assembly)将COM接口邦定到Word。
 

 

上传并存储word文件

上传文件时首先通过上传控件找到所需上传的文件,然后获取文件的大小,最后以流的形式写入数据库

 

具体代码为

 
C# 代码   复制
Asp.net操作Word文档,原来这么简单啊!
Asp.net操作Word文档,原来这么简单啊!private void Btn_OK_Click(object sender, System.EventArgs e) 
Asp.net操作Word文档,原来这么简单啊!{ 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!string name=name_TextBox.Text; 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!//接收上传文件 
Asp.net操作Word文档,原来这么简单啊!
Asp.net操作Word文档,原来这么简单啊!           Stream fileStream=File1.PostedFile.InputStream; 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!//获取上传文件字节的大小 
Asp.net操作Word文档,原来这么简单啊!
Asp.net操作Word文档,原来这么简单啊!int length=File1.PostedFile.ContentLength; 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!byte[] wordData=new byte[length]; 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!//从流中读取字节并写入wordData 
Asp.net操作Word文档,原来这么简单啊!
Asp.net操作Word文档,原来这么简单啊!int n=fileStream.Read(wordData,0,length); 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!//获取当前时间 
Asp.net操作Word文档,原来这么简单啊!
Asp.net操作Word文档,原来这么简单啊!           DateTime time=DateTime.Now; 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!//连接数据库 
Asp.net操作Word文档,原来这么简单啊!
Asp.net操作Word文档,原来这么简单啊!           SqlConnection conn=new SqlConnection(); 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!           conn.ConnectionString="workstation id=TIANCHUNZHU;packet size=4096;integrated security=SSPI;data source=TIANCHUNZHU;persist security info=False;initial catalog=test"; 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!           SqlCommand cmd=new SqlCommand(); 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!           cmd.Connection=conn; 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!           cmd.CommandText="INSERT INTO word (fileName,postTime,fileContent) values (@fileName,@postTime,@fileContent)"; 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!           SqlParameter nameParam=new SqlParameter("@fileName",System.Data.SqlDbType.VarChar,50); 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!           nameParam.Value=name; 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!           cmd.Parameters.Add(nameParam); 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!           SqlParameter timeParam=new SqlParameter("@postTime",System.Data.SqlDbType.DateTime,8); 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!           timeParam.Value=time; 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!           cmd.Parameters.Add(timeParam); 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!//添加word文件 
Asp.net操作Word文档,原来这么简单啊!
Asp.net操作Word文档,原来这么简单啊!           SqlParameter contentParam=new SqlParameter("@fileContent",System.Data.SqlDbType.Image); ①//见本段最后注解 
Asp.net操作Word文档,原来这么简单啊!
Asp.net操作Word文档,原来这么简单啊!           contentParam.Value=wordData; 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!           cmd.Parameters.Add(contentParam); 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!           conn.Open(); 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!           cmd.ExecuteNonQuery(); 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!           conn.Close(); 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!       } 
Asp.net操作Word文档,原来这么简单啊!

 

说明

此处由于是Image类型文件,事先可能无法预测文件的大小,因此可不必指定size参数。如果希望控制上传文件的大小则可以输入size参数。如指定1000,则上传时最大可以上传1k的word文档。

 

从数据库中读取数据并恢复为word文件

 

读取数据时先将数据从数据库中读入缓冲区,然后再从缓冲区写入最终文件。因此首先要开辟一个缓冲区并设定它的大小,每当缓冲区读满时就要将缓冲区内的数据写入文件,以清空缓冲区并继续向缓冲区读数据,直到最后一次将缓冲区内剩余的数据全部写入文件,新的word文档即可生成。

由于这一部分用到了字节流的输入输出操作,因此要引用System.IO命名空间

 

代码

 
C# 代码   复制
Asp.net操作Word文档,原来这么简单啊!
Asp.net操作Word文档,原来这么简单啊!private void Btn_get_Click(object sender, System.EventArgs e) 
Asp.net操作Word文档,原来这么简单啊!{ 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!//连接数据库 
Asp.net操作Word文档,原来这么简单啊!
Asp.net操作Word文档,原来这么简单啊!           SqlConnection conn=new SqlConnection(); 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!           conn.ConnectionString="workstation id=TIANCHUNZHU;packet size=4096;integrated security=SSPI;data source=TIANCHUNZHU;persist security info=False;initial catalog=test"; 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!           SqlCommand cmd=new SqlCommand(); 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!           cmd.Connection=conn; 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!//根据TextBox中指定的文件名进行查找读取 
Asp.net操作Word文档,原来这么简单啊!
Asp.net操作Word文档,原来这么简单啊!           cmd.CommandText="select fileContent from word where fileName='"+name_TextBox.Text.ToString()+"'"; 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!           FileStream fs; 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!           BinaryWriter bw; 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!//设定允许读取到缓冲区的最大长度 
Asp.net操作Word文档,原来这么简单啊!
Asp.net操作Word文档,原来这么简单啊!int buffersize=100; 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!//要将字节流读入的缓冲区 
Asp.net操作Word文档,原来这么简单啊!
Asp.net操作Word文档,原来这么简单啊!byte[] outbyte=new byte[buffersize]; 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!//用于记录已经读取的字节数 
Asp.net操作Word文档,原来这么简单啊!
Asp.net操作Word文档,原来这么简单啊!long reval; 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!//字段中的索引,从这里开始读取操作 
Asp.net操作Word文档,原来这么简单啊!
Asp.net操作Word文档,原来这么简单啊!long startIndex; 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!//FileStream对象将封装的文件的相对路径或绝对路径 
Asp.net操作Word文档,原来这么简单啊!
Asp.net操作Word文档,原来这么简单啊!string filePath=@"C:wordData.doc"; 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!           conn.Open(); 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!           SqlDataReader reader; 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!           reader=cmd.ExecuteReader(); 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!while (reader.Read()) 
Asp.net操作Word文档,原来这么简单啊!{ 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!              fs=new FileStream(filePath,FileMode.OpenOrCreate,FileAccess.Write); 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!              bw=new BinaryWriter(fs); 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!              startIndex=0; 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!//将字节流读入outbyte缓冲区中并返回读取的字节数 
Asp.net操作Word文档,原来这么简单啊!
Asp.net操作Word文档,原来这么简单啊!              reval=reader.GetBytes(0,startIndex,outbyte,0,buffersize); 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!//当读取的字节流达到缓冲区允许的最大长度时要卸载缓冲区内的数据并将数据写入文件 
Asp.net操作Word文档,原来这么简单啊!
Asp.net操作Word文档,原来这么简单啊!while (reval==buffersize) 
Asp.net操作Word文档,原来这么简单啊!{ 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!                  bw.Write(outbyte); 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!                  bw.Flush(); 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!//重新设定开始读取的位置,并继续读取和写数据 
Asp.net操作Word文档,原来这么简单啊!
Asp.net操作Word文档,原来这么简单啊!                  startIndex+=buffersize; 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!                  reval=reader.GetBytes(0,startIndex,outbyte,0,buffersize); 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!              } 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!//将缓冲区内最后剩余的数据写入文件 
Asp.net操作Word文档,原来这么简单啊!
Asp.net操作Word文档,原来这么简单啊!              bw.Write(outbyte,0,(int)reval-1); 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!              bw.Flush(); 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!              bw.Close(); 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!               fs.Close(); 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!           } 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!           reader.Close(); 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!           conn.Close(); 
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!} 
Asp.net操作Word文档,原来这么简单啊!

 

说明

此时将按照filePath中指定的路径和名称重新生成word文档。可以在filePath中根据具体情况指定生成的word文档的名称和路径。

 

常用生成word文档的代码

 
C# 代码   复制
Asp.net操作Word文档,原来这么简单啊!
Asp.net操作Word文档,原来这么简单啊!public string CreateWordFile(string CheckedInfo)
{
Asp.net操作Word文档,原来这么简单啊!string message = "";
Asp.net操作Word文档,原来这么简单啊!try
{
Asp.net操作Word文档,原来这么简单啊!Object Nothing = System.Reflection.Missing.Value;
Asp.net操作Word文档,原来这么简单啊!Directory.CreateDirectory("C:/CNSI"); //创建文件所在目录
Asp.net操作Word文档,原来这么简单啊!string name = "CNSI.doc";
Asp.net操作Word文档,原来这么简单啊!object filename = "C://CNSI//" + name; //文件保存路径
Asp.net操作Word文档,原来这么简单啊!//创建Word文档
Asp.net操作Word文档,原来这么简单啊!Word.Application WordApp = new Word.ApplicationClass();
Asp.net操作Word文档,原来这么简单啊!Word.Document WordDoc = WordApp.Documents.Add(ref Nothing, ref Nothing, ref Nothing, ref Nothing);
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!//添加页眉
Asp.net操作Word文档,原来这么简单啊!WordApp.ActiveWindow.View.Type = WdViewType.wdOutlineView;
Asp.net操作Word文档,原来这么简单啊!WordApp.ActiveWindow.View.SeekView = WdSeekView.wdSeekPrimaryHeader;
Asp.net操作Word文档,原来这么简单啊!WordApp.ActiveWindow.ActivePane.Selection.InsertAfter("[页眉内容]");
Asp.net操作Word文档,原来这么简单啊!WordApp.Selection.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphRight;//设置右对齐
Asp.net操作Word文档,原来这么简单啊!WordApp.ActiveWindow.View.SeekView = WdSeekView.wdSeekMainDocument;//跳出页眉设置
Asp.net操作Word文档,原来这么简单啊!
Asp.net操作Word文档,原来这么简单啊!WordApp.Selection.ParagraphFormat.LineSpacing = 15f;//设置文档的行间距
Asp.net操作Word文档,原来这么简单啊!
/*WordDoc.PageSetup.Orientation = Word.WdOrientation.wdOrientLandscape; //设置页面为纵向
Asp.net操作Word文档,原来这么简单啊!            WordDoc.PageSetup.PageHeight = WordApp.CentimetersToPoints(21F);
Asp.net操作Word文档,原来这么简单啊!            WordDoc.PageSetup.PageWidth = WordApp.CentimetersToPoints(29.7F);
Asp.net操作Word文档,原来这么简单啊!            WordDoc.PageSetup.TopMargin = 57; //设置上边距
Asp.net操作Word文档,原来这么简单啊!            WordDoc.PageSetup.BottomMargin = 57;//设置下边距
Asp.net操作Word文档,原来这么简单啊!            WordDoc.PageSetup.LeftMargin = 57;//设置左边距
Asp.net操作Word文档,原来这么简单啊!            WordDoc.PageSetup.RightMargin = 57;//设置右边距*/
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!//移动焦点并换行
Asp.net操作Word文档,原来这么简单啊!object count = 14;
Asp.net操作Word文档,原来这么简单啊!object WdLine = Word.WdUnits.wdLine;//换一行;
Asp.net操作Word文档,原来这么简单啊!WordApp.Selection.MoveDown(ref WdLine, ref count, ref Nothing);//移动焦点
Asp.net操作Word文档,原来这么简单啊!WordApp.Selection.TypeParagraph();//插入段落
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!//文档中创建表格
Asp.net操作Word文档,原来这么简单啊!Word.Table newTable = WordDoc.Tables.Add(WordApp.Selection.Range, 12, 3, ref Nothing, ref Nothing);
Asp.net操作Word文档,原来这么简单啊!//设置表格样式
Asp.net操作Word文档,原来这么简单啊!newTable.Borders.OutsideLineStyle = Word.WdLineStyle.wdLineStyleThickThinLargeGap;
Asp.net操作Word文档,原来这么简单啊!newTable.Borders.InsideLineStyle = Word.WdLineStyle.wdLineStyleSingle;
Asp.net操作Word文档,原来这么简单啊!newTable.Columns[1].Width = 100f;
Asp.net操作Word文档,原来这么简单啊!newTable.Columns[2].Width = 220f;
Asp.net操作Word文档,原来这么简单啊!newTable.Columns[3].Width = 105f;
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!//填充表格内容
Asp.net操作Word文档,原来这么简单啊!newTable.Cell(1, 1).Range.Text = "产品详细信息表";
Asp.net操作Word文档,原来这么简单啊!newTable.Cell(1, 1).Range.Bold = 2;//设置单元格中字体为粗体
Asp.net操作Word文档,原来这么简单啊!//合并单元格
Asp.net操作Word文档,原来这么简单啊!newTable.Cell(1, 1).Merge(newTable.Cell(1, 3));
Asp.net操作Word文档,原来这么简单啊!WordApp.Selection.Cells.VerticalAlignment = Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter;//垂直居中
Asp.net操作Word文档,原来这么简单啊!WordApp.Selection.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;//水平居中
Asp.net操作Word文档,原来这么简单啊!Asp.net操作Word文档,原来这么简单啊!//填充表格内容
Asp.net操作Word文档,原来这么简单啊!newTable.Cell(2, 1).Range.Text = "产品基本信息";
Asp.net操作Word文档,原来这么简单啊!newTable.Cell(2, 1).Range.Font.Color = Word.WdColor.wdColorDarkBlue;//设置单元格内字体颜色
Asp.net操作Word文档,原来这么简单啊!//合并单元格
Asp.net操作Word文档,原来这么简单啊!newTable.Cell(2, 1).Merge(newTable.Cell(2, 3