CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
【经验总结】不能实施并行处理的情况 浅谈并行编程中的任务分解模式
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

asp.net(c#)如何把数据库导出一个模板excel中?

楼主dreams1981(子山)2005-11-28 11:33:29 在 .NET技术 / ASP.NET 提问

现在我使用asp.net(c#)写的网页,其中有些报表客户要求输出到指定格式的个excel文件!现在就是想先做好一个模板的excel文件,再在页面做一个导出按钮;使数据库中相应的数据往模板的excel文件对应的地方填充.那要怎么做尼?请给我例子或代码!(现在老进不了asp.net这个门)!如果可以就该我发个代码:dreams1981@126.com 谢谢了! 问题点数:50、回复次数:6Top

1 楼dreams1981(子山)回复于 2005-11-28 11:39:33 得分 0

导出的excel文件还分三个表的!Top

2 楼vivianfdlpw()回复于 2005-11-28 11:48:59 得分 25

http://blog.csdn.net/zjcxc/archive/2003/12/29/20084.aspx  
   
  导入/导出Excel    
  --从Excel文件中,导入数据到SQL数据库中,很简单,直接用下面的语句:  
  /*===================================================================*/  
  --如果接受数据导入的表已经存在  
  insert   into   表   select   *   from    
  OPENROWSET('MICROSOFT.JET.OLEDB.4.0'  
  ,'Excel   5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$)  
   
  --如果导入数据并生成表  
  select   *   into   表   from    
  OPENROWSET('MICROSOFT.JET.OLEDB.4.0'  
  ,'Excel   5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$)  
   
   
  /*===================================================================*/  
  --如果从SQL数据库中,导出数据到Excel,如果Excel文件已经存在,而且已经按照要接收的数据创建好表头,就可以简单的用:  
  insert   into   OPENROWSET('MICROSOFT.JET.OLEDB.4.0'  
  ,'Excel   5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$)  
  select   *   from   表  
   
   
  --如果Excel文件不存在,也可以用BCP来导成类Excel的文件,注意大小写:  
  --导出表的情况  
  EXEC   master..xp_cmdshell   'bcp   数据库名.dbo.表名   out   "c:\test.xls"   /c   -/S"服务器名"   /U"用户名"   -P"密码"'  
   
  --导出查询的情况  
  EXEC   master..xp_cmdshell   'bcp   "SELECT   au_fname,   au_lname   FROM   pubs..authors   ORDER   BY   au_lname"   queryout   "c:\test.xls"   /c   -/S"服务器名"   /U"用户名"   -P"密码"'  
   
  /*--说明:  
  c:\test.xls     为导入/导出的Excel文件名.  
  sheet1$             为Excel文件的工作表名,一般要加上$才能正常使用.  
  --*/  
     
   
  --下面是导出真正Excel文件的方法:  
   
  if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[p_exporttb]')   and   OBJECTPROPERTY(id,   N'IsProcedure')   =   1)  
  drop   procedure   [dbo].[p_exporttb]  
  GO  
   
  /*--数据导出EXCEL  
     
    导出表中的数据到Excel,包含字段名,文件为真正的Excel文件  
    ,如果文件不存在,将自动创建文件  
    ,如果表不存在,将自动创建表  
    基于通用性考虑,仅支持导出标准数据类型  
   
  --邹建   2003.10(引用请保留此信息)--*/  
   
  /*--调用示例  
   
    p_exporttb   @tbname='地区资料',@path='c:\',@fname='aa.xls'  
  --*/  
  create   proc   p_exporttb  
  @tbname   sysname,         --要导出的表名  
  @path   nvarchar(1000),       --文件存放目录  
  @fname   nvarchar(250)=''     --文件名,默认为表名  
  as  
  declare   @err   int,@src   nvarchar(255),@desc   nvarchar(255),@out   int  
  declare   @obj   int,@constr   nvarchar(1000),@sql   varchar(8000),@fdlist   varchar(8000)  
   
  --参数检测  
  if   isnull(@fname,'')=''   set   @fname=@tbname+'.xls'  
   
  --检查文件是否已经存在  
  if   right(@path,1)<>'\'   set   @path=@path+'\'  
  create   table   #tb(a   bit,b   bit,c   bit)  
  set   @sql=@path+@fname  
  insert   into   #tb   exec   master..xp_fileexist   @sql  
   
  --数据库创建语句  
  set   @sql=@path+@fname  
  if   exists(select   1   from   #tb   where   a=1)  
    set   @constr='DRIVER={Microsoft   Excel   Driver   (*.xls)};DSN='''';READONLY=FALSE'  
                +';CREATE_DB="'+@sql+'";DBQ='+@sql  
  else  
    set   @constr='Provider=Microsoft.Jet.OLEDB.4.0;Extended   Properties="Excel   8.0;HDR=YES'  
          +';DATABASE='+@sql+'"'  
   
   
  --连接数据库  
  exec   @err=sp_oacreate   'adodb.connection',@obj   out  
  if   @err<>0   goto   lberr  
   
  exec   @err=sp_oamethod   @obj,'open',null,@constr  
  if   @err<>0   goto   lberr  
   
  /*--如果覆盖已经存在的表,就加上下面的语句  
  --创建之前先删除表/如果存在的话  
  select   @sql='drop   table   ['+@tbname+']'  
  exec   @err=sp_oamethod   @obj,'execute',@out   out,@sql  
  --*/  
   
  --创建表的SQL  
  select   @sql='',@fdlist=''  
  select   @fdlist=@fdlist+',['+a.name+']'  
    ,@sql=@sql+',['+a.name+']   '  
      +case    
        when   b.name   like   '%char'    
        then   case   when   a.length>255   then   'memo'  
          else   'text('+cast(a.length   as   varchar)+')'   end  
        when   b.name   like   '%int'   or   b.name='bit'   then   'int'  
        when   b.name   like   '%datetime'   then   'datetime'  
        when   b.name   like   '%money'   then   'money'  
        when   b.name   like   '%text'   then   'memo'  
        else   b.name   end  
  FROM   syscolumns   a   left   join   systypes   b   on   a.xtype=b.xusertype  
  where   b.name   not   in('image','uniqueidentifier','sql_variant','varbinary','binary','timestamp')  
    and   object_id(@tbname)=id  
  select   @sql='create   table   ['+@tbname  
    +']('+substring(@sql,2,8000)+')'  
    ,@fdlist=substring(@fdlist,2,8000)  
  exec   @err=sp_oamethod   @obj,'execute',@out   out,@sql  
  if   @err<>0   goto   lberr  
   
  exec   @err=sp_oadestroy   @obj  
   
  --导入数据  
  set   @sql='openrowset(''MICROSOFT.JET.OLEDB.4.0'',''Excel   8.0;HDR=YES;IMEX=1  
        ;DATABASE='+@path+@fname+''',['+@tbname+'$])'  
   
  exec('insert   into   '+@sql+'('+@fdlist+')   select   '+@fdlist+'   from   '+@tbname)  
   
  return  
   
  lberr:  
    exec   sp_oageterrorinfo   0,@src   out,@desc   out  
  lbexit:  
    select   cast(@err   as   varbinary(4))   as   错误号  
      ,@src   as   错误源,@desc   as   错误描述  
    select   @sql,@constr,@fdlist  
  go  
     
   
   
  if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[p_exporttb]')   and   OBJECTPROPERTY(id,   N'IsProcedure')   =   1)  
  drop   procedure   [dbo].[p_exporttb]  
  GO  
   
  /*--数据导出EXCEL  
     
    导出查询中的数据到Excel,包含字段名,文件为真正的Excel文件  
    如果文件不存在,将自动创建文件  
    如果表不存在,将自动创建表  
    基于通用性考虑,仅支持导出标准数据类型  
   
  --邹建   2003.10(引用请保留此信息)--*/  
   
  /*--调用示例  
   
    p_exporttb   @sqlstr='select   *   from   地区资料'  
      ,@path='c:\',@fname='aa.xls',@sheetname='地区资料'  
  --*/  
  create   proc   p_exporttb  
  @sqlstr   varchar(8000),       --查询语句,如果查询语句中使用了order   by   ,请加上top   100   percent  
  @path   nvarchar(1000),       --文件存放目录  
  @fname   nvarchar(250),       --文件名  
  @sheetname   varchar(250)=''     --要创建的工作表名,默认为文件名  
  as    
  declare   @err   int,@src   nvarchar(255),@desc   nvarchar(255),@out   int  
  declare   @obj   int,@constr   nvarchar(1000),@sql   varchar(8000),@fdlist   varchar(8000)  
   
  --参数检测  
  if   isnull(@fname,'')=''   set   @fname='temp.xls'  
  if   isnull(@sheetname,'')=''   set   @sheetname=replace(@fname,'.','#')  
   
  --检查文件是否已经存在  
  if   right(@path,1)<>'\'   set   @path=@path+'\'  
  create   table   #tb(a   bit,b   bit,c   bit)  
  set   @sql=@path+@fname  
  insert   into   #tb   exec   master..xp_fileexist   @sql  
   
  --数据库创建语句  
  set   @sql=@path+@fname  
  if   exists(select   1   from   #tb   where   a=1)  
    set   @constr='DRIVER={Microsoft   Excel   Driver   (*.xls)};DSN='''';READONLY=FALSE'  
                +';CREATE_DB="'+@sql+'";DBQ='+@sql  
  else  
    set   @constr='Provider=Microsoft.Jet.OLEDB.4.0;Extended   Properties="Excel   8.0;HDR=YES'  
          +';DATABASE='+@sql+'"'  
   
  --连接数据库  
  exec   @err=sp_oacreate   'adodb.connection',@obj   out  
  if   @err<>0   goto   lberr  
   
  exec   @err=sp_oamethod   @obj,'open',null,@constr  
  if   @err<>0   goto   lberr  
   
  --创建表的SQL  
  declare   @tbname   sysname  
  set   @tbname='##tmp_'+convert(varchar(38),newid())  
  set   @sql='select   *   into   ['+@tbname+']   from('+@sqlstr+')   a'  
  exec(@sql)  
   
  select   @sql='',@fdlist=''  
  select   @fdlist=@fdlist+',['+a.name+']'  
    ,@sql=@sql+',['+a.name+']   '  
      +case    
        when   b.name   like   '%char'    
        then   case   when   a.length>255   then   'memo'  
          else   'text('+cast(a.length   as   varchar)+')'   end  
        when   b.name   like   '%int'   or   b.name='bit'   then   'int'  
        when   b.name   like   '%datetime'   then   'datetime'  
        when   b.name   like   '%money'   then   'money'  
        when   b.name   like   '%text'   then   'memo'  
        else   b.name   end  
  FROM   tempdb..syscolumns   a   left   join   tempdb..systypes   b   on   a.xtype=b.xusertype  
  where   b.name   not   in('image','uniqueidentifier','sql_variant','varbinary','binary','timestamp')  
    and   a.id=(select   id   from   tempdb..sysobjects   where   name=@tbname)  
   
  if   @@rowcount=0   return  
   
  select   @sql='create   table   ['+@sheetname  
    +']('+substring(@sql,2,8000)+')'  
    ,@fdlist=substring(@fdlist,2,8000)  
   
  exec   @err=sp_oamethod   @obj,'execute',@out   out,@sql  
  if   @err<>0   goto   lberr  
   
  exec   @err=sp_oadestroy   @obj  
   
  --导入数据  
  set   @sql='openrowset(''MICROSOFT.JET.OLEDB.4.0'',''Excel   8.0;HDR=YES  
        ;DATABASE='+@path+@fname+''',['+@sheetname+'$])'  
   
  exec('insert   into   '+@sql+'('+@fdlist+')   select   '+@fdlist+'   from   ['+@tbname+']')  
   
  set   @sql='drop   table   ['+@tbname+']'  
  exec(@sql)  
  return  
   
  lberr:  
    exec   sp_oageterrorinfo   0,@src   out,@desc   out  
  lbexit:  
    select   cast(@err   as   varbinary(4))   as   错误号  
      ,@src   as   错误源,@desc   as   错误描述  
    select   @sql,@constr,@fdlist  
  go  
   
   
  Top

3 楼suosa(快乐每一天)回复于 2005-11-28 11:54:50 得分 25

private   void   Page_Load(object   sender,   System.EventArgs   e)  
  {  
  DataSet   objDataset   =   new   DataSet();  
  SqlConnection   objConn   =   new   SqlConnection();  
  objConn   =   new   SqlConnection(ConfigurationSettings.AppSettings["ConnectionSqlServer"].ToString());  
  objConn.Open();  
  SqlDataAdapter   objAdapter   =   new   SqlDataAdapter("Select   top   5   *   from   customers   where   country='USA'",objConn);  
  objAdapter.Fill(objDataset);  
  DataView   oView   =   new   DataView(objDataset.Tables[0]);  
  dgExcel.DataSource   =   oView;  
  dgExcel.DataBind();  
  objConn.Close();  
  objConn.Dispose();  
  objConn   =   null;  
  if(Request.QueryString["bExcel"]   ==   "1")  
  {  
  Response.ContentType   =   "application/vnd.ms-excel";  
   
  Response.Charset   =   "";  
   
  //关闭   ViewState  
  EnableViewState   =   false;  
  System.IO.StringWriter   tw   =   new   System.IO.StringWriter();//将信息写入字符串  
  System.Web.UI.HtmlTextWriter   hw   =   new   System.Web.UI.HtmlTextWriter(tw);//在WEB窗体页上写出一系列连续的HTML特定字符和文本。  
  //此类提供ASP.NET服务器控件在将HTML内容呈现给客户端时所使用的格式化功能  
  //获取control的HTML  
  dgExcel.RenderControl(hw);//将DATAGRID中的内容输出到HtmlTextWriter对象中  
  //   把HTML写回浏览器  
  Response.Write(tw.ToString());  
  Response.End();  
  }  
   
  }  
   
  #region   Web   Form   Designer   generated   code  
  override   protected   void   OnInit(EventArgs   e)  
  {  
  //  
  //   CODEGEN:该调用是   ASP.NET   Web   窗体设计器所必需的。  
  //  
  InitializeComponent();  
  base.OnInit(e);  
  }  
   
  ///   <summary>  
  ///   设计器支持所需的方法   -   不要使用代码编辑器修改  
  ///   此方法的内容。  
  ///   </summary>  
  private   void   InitializeComponent()  
  {          
  this.btnGetExcel.Click   +=   new   System.EventHandler(this.btnGetExcel_Click);  
  this.Load   +=   new   System.EventHandler(this.Page_Load);  
   
  }  
  #endregion  
   
  private   void   btnGetExcel_Click(object   sender,   System.EventArgs   e)  
  {  
  Response.Redirect("excel.aspx?bExcel=1");  
  }  
   
  }Top

4 楼dreams1981(子山)回复于 2005-11-28 14:12:43 得分 0

谢谢两位大哥,可惜我有点晕了!谁可以发个demo项目给我把!小第太笨了!dreams1981@126.comTop

5 楼dreams1981(子山)回复于 2005-11-28 16:42:57 得分 0

没有你们的帮助我是怎么都上不去的Top

6 楼dreams1981(子山)回复于 2005-11-29 00:44:14 得分 0

没办法.自己顶上去Top

相关问题

  • ASP导出EXCEL问题
  • c#里从SQLSERVER导出数据到EXCEL
  • ASP里面做Excel导出,急,100分
  • ASP导出EXCEL出现问题!
  • asp能不能实现导出到EXCEL?
  • asp excel 导出空格处理问题
  • 导出到excel
  • 导出EXCEL
  • 导出到EXCEL
  • 将Excel用ASP导入及将数据导出为Excel详解

关键词

  • asp.net
  • c#
  • excel
  • 模板
  • 数据库
  • 文件
  • 数据
  • hdr
  • 语句
  • 代码

得分解答快速导航

  • 帖主:dreams1981
  • vivianfdlpw
  • suosa

相关链接

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

广告也精彩

反馈

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