CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

请教各位高手,在asp.net中如何把两个word文档合并成一个word文档,用C#.net写代码???

楼主longest9(张与)2005-08-04 14:40:34 在 .NET技术 / ASP.NET 提问

asp.net中如何把两个word文档合并成一个word文档? 问题点数:100、回复次数:9Top

1 楼tigerwen01(小虎)回复于 2005-08-04 15:29:03 得分 0

使用数据库来合并,分别把两个WORD文档保存到数据库里,然后再取出存为一个WORD文档。  
   
  在ASP.NET程序中存储和调用word文件    
  本文通过一个实例概要讲解如何在ASP.NET程序中配合SQL   Server2000进行word文件的存储和调用过程(没有使用VBA   )。    
       
   
   
   
   
   
  (1)   建立数据库  
   
  首先,我们在数据库中建立一个表,表中有三个字段,fileName(varchar,50),postTime(datetime,8),   fileContent(image,16),分别存储文件名称,上传时间和word文件的具体内容,其中fileName为主键。具体的SQL脚本如下:  
   
  CREATE   TABLE   [dbo].[word]   (  
   
                [fileName]   [varchar]   (50)   COLLATE   Chinese_PRC_CI_AS   NOT   NULL   ,  
   
                [postTime]   [datetime]   NOT   NULL   ,  
   
                [fileContent]   [image]   NOT   NULL    
   
  )   ON   [PRIMARY]   TEXTIMAGE_ON   [PRIMARY]  
   
   
     
   
   
   
  (2)   上传并存储word文件  
   
  在VS.NET中建立一个ASP.NET   web应用程序,在界面内加入如下控件  
   
  控件类型  
    ID  
    Text  
    说明  
     
  Label  
    Label1  
    请输入文档的标题  
     
     
   
     
  Label  
    Label2  
    请选择具体文档  
     
     
   
     
  File   Field  
    File1  
     
     
   
    上传控件(要将此HTML控件转化为服务器控件)  
     
  TextBox  
    name_TextBox  
     
     
   
    用于录入文档标题  
     
  Button  
    Btn_OK  
    上传文件  
     
     
   
     
  Button  
    Btn_get  
    读取文件  
     
     
   
     
  HyperLink  
    HyperLink1  
    打开  
    用于打开word文档  
     
   
   
     
   
   
  上传文件时首先通过上传控件找到所需上传的文件,然后获取文件的大小,最后以流的形式写入数据库,具体代码为:  
   
  private   void   Btn_OK_Click(object   sender,   System.EventArgs   e)    
   
   
                    {    
   
   
                              string   name=name_TextBox.Text;    
   
   
                          //接收上传文件    
   
   
                            Stream   fileStream=File1.PostedFile.InputStream;      
   
   
                              //获取上传文件字节的大小    
   
   
                              int   length=File1.PostedFile.ContentLength;      
   
   
                              byte[]   wordData=new   byte[length];    
   
   
                              //从流中读取字节并写入wordData    
   
   
                              int   n=fileStream.Read(wordData,0,length);    
   
   
                              //获取当前时间    
   
   
                              DateTime   time=DateTime.Now;    
   
   
                              //连接数据库    
   
   
                              SqlConnection   conn=new   SqlConnection();    
   
   
                              conn.ConnectionString="workstation   id=TIANCHUNZHU;packet   size=4096;integrated   security=SSPI;data   source=TIANCHUNZHU;persist   security   info=False;initial   catalog=test";    
   
   
                              SqlCommand   cmd=new   SqlCommand();    
   
   
                              cmd.Connection=conn;    
   
   
                              cmd.CommandText="INSERT   INTO   word   (fileName,postTime,fileContent)   values   (@fileName,@postTime,@fileContent)";    
   
   
                              SqlParameter   nameParam=new   SqlParameter("@fileName",System.Data.SqlDbType.VarChar,50);    
   
   
                              nameParam.Value=name;    
   
   
                              cmd.Parameters.Add(nameParam);    
   
   
                              SqlParameter   timeParam=new   SqlParameter("@postTime",System.Data.SqlDbType.DateTime,8);    
   
   
                              timeParam.Value=time;    
   
   
                              cmd.Parameters.Add(timeParam);    
   
   
  //添加word文件    
   
   
                              SqlParameter   contentParam=new   SqlParameter("@fileContent",System.Data.SqlDbType.Image);   ①//见本段最后注解    
   
   
                              contentParam.Value=wordData;    
   
   
                              cmd.Parameters.Add(contentParam);    
   
   
                              conn.Open();    
   
   
                              cmd.ExecuteNonQuery();    
   
   
                              conn.Close();    
   
   
                    }    
   
   
   
     
   
   
  注①:此处由于是Image类型文件,事先可能无法预测文件的大小,因此可不必指定size参数。如果希望控制上传文件的大小则可以输入size参数。如指定1000,则上传时最大可以上传1k的word文档。  
   
   
   
   
  (3)   从数据库中读取数据并恢复为word文件    
   
   
  读取数据时先将数据从数据库中读入缓冲区,然后再从缓冲区写入最终文件。因此首先要开辟一个缓冲区并设定它的大小,每当缓冲区读满时就要将缓冲区内的数据写入文件,以清空缓冲区并继续向缓冲区读数据,直到最后一次将缓冲区内剩余的数据全部写入文件,新的word文档即可生成。  
   
  由于这一部分用到了字节流的输入输出操作,因此要引用System.IO命名空间  
   
  下面是关于这一部分的完整代码:  
   
  private   void   Btn_get_Click(object   sender,   System.EventArgs   e)    
   
   
  {  
   
  //连接数据库    
   
   
                              SqlConnection   conn=new   SqlConnection();    
   
   
                              conn.ConnectionString="workstation   id=TIANCHUNZHU;packet   size=4096;integrated   security=SSPI;data   source=TIANCHUNZHU;persist   security   info=False;initial   catalog=test";    
   
   
                              SqlCommand   cmd=new   SqlCommand();    
   
   
                              cmd.Connection=conn;    
   
   
                          //根据TextBox中指定的文件名进行查找读取    
   
   
                              cmd.CommandText="select   fileContent   from   word   where   fileName='"+name_TextBox.Text.ToString()+"'";    
   
   
                              FileStream   fs;    
   
   
                              BinaryWriter   bw;    
   
   
                              //设定允许读取到缓冲区的最大长度    
   
   
                              int   buffersize=100;    
   
   
                              //要将字节流读入的缓冲区    
   
   
                              byte[]   outbyte=new   byte[buffersize];    
   
   
                              //用于记录已经读取的字节数    
   
   
                              long   reval;    
   
   
                              //字段中的索引,从这里开始读取操作    
   
   
                              long   startIndex;    
   
   
                              //FileStream对象将封装的文件的相对路径或绝对路径    
   
   
                              string   filePath=@"C:wordData.doc";    
   
   
                              conn.Open();    
   
   
                              SqlDataReader   reader;    
   
   
                              reader=cmd.ExecuteReader();    
   
   
                              while   (reader.Read())    
   
   
                              {    
   
   
                                        fs=new   FileStream(filePath,FileMode.OpenOrCreate,FileAccess.Write);    
   
   
                                        bw=new   BinaryWriter(fs);      
   
   
                                        startIndex=0;    
   
   
                                        //将字节流读入outbyte缓冲区中并返回读取的字节数    
   
   
                                        reval=reader.GetBytes(0,startIndex,outbyte,0,buffersize);    
   
   
                                        //当读取的字节流达到缓冲区允许的最大长度时要卸载缓冲区内的数据并将数据写入文件    
   
   
                                        while   (reval==buffersize)    
   
   
                                        {    
   
   
                                                bw.Write(outbyte);    
   
   
                                                bw.Flush();    
   
   
                                                //重新设定开始读取的位置,并继续读取和写数据    
   
   
                                                startIndex+=buffersize;    
   
   
                                                reval=reader.GetBytes(0,startIndex,outbyte,0,buffersize);    
   
   
                                        }    
   
   
                                        //将缓冲区内最后剩余的数据写入文件    
   
   
                                        bw.Write(outbyte,0,(int)reval-1);    
   
   
                                        bw.Flush();    
   
   
                                        bw.Close();    
   
   
                                      fs.Close();    
   
   
                              }    
   
   
                              reader.Close();    
   
   
                        conn.Close();    
   
   
  }    
   
   
  此时将按照filePath中指定的路径和名称重新生成word文档。可以在filePath中根据具体情况指定生成的word文档的名称和路径。    
   
   
   
   
  (4)   打开word文档    
   
   
    在打开word文档这一部分暂时并没有找到通过Button按钮直接打开word的有效办法,但我们可以HyperLink控件,只要将HyperLink控件的NavigateUrl属性指向word文档的物理路径就可以了。  
   
     
  Top

2 楼Fooo(四月·来也勿勿·去也冲冲)回复于 2006-05-26 01:50:10 得分 0

 
  学习Top

3 楼ilovejolly(有些伤感)回复于 2006-05-26 08:38:35 得分 0

markTop

4 楼lemontreefun(flying)回复于 2006-05-26 08:45:02 得分 0

gzingTop

5 楼foyuan(暴走零零漆)回复于 2006-05-26 09:32:49 得分 0

学习一下  
  不过应该用COM    
  或者引用ms的命名空间,网上的教程还是有的Top

6 楼Fooo(四月·来也勿勿·去也冲冲)回复于 2006-05-27 09:09:03 得分 0

 
  upTop

7 楼zzn007(猴子007)回复于 2006-06-09 10:26:44 得分 0

路过,也想知道如何实现这个功能!  
  楼上说的还是保存一个文件,然后读取一个文件,并没有将两个文件的内容生成一个文件!  
  帮你顶Top

8 楼amandag(高歌)回复于 2006-06-09 10:32:06 得分 0

学习Top

9 楼zzn007(猴子007)回复于 2006-06-09 10:41:07 得分 0

楼主可以参考这个(Delphi实现的):  
  http://community.csdn.net/Expert/topic/4738/4738113.xml?temp=.2168238Top

相关问题

  • 散50分求.net petshop3.0的源代码和文档!!C#版的
  • 谁给我一份详细的代码规范文档(C/C++)?给100分..............................
  • 谁给我一份详细的代码规范文档(C/C++)?给100分
  • 高分求 asp。net+c# 代码
  • asp代码如何用asp.net(c#)实现^_^
  • 高分求下面asp代码转成c#代码。谢谢了
  • 100分求用C#做的OA系统 源代码 最好有设计文档
  • 求学习C++ Builder60的源代码和编程文档和帮助.
  • asp+sql实现文件上传代码。主要是word文档和excel文档。100分求救!!急!!!!
  • C#源代码

关键词

  • asp.net
  • 文档
  • 文件
  • word
  • 数据库
  • 控件
  • 代码
  • 数据
  • 学习
  • asp

得分解答快速导航

  • 帖主:longest9

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo