`

导出excel最简单的方法,一个sql语句解决问题

阅读更多
<summary>
///ConvertWebControltoExcel
///</summary>
///<paramname="ctl"></param>
///System.Web.UI.Controlctl为datagrid名称,stringfile_name为到处的文件名称
publicstaticvoidToExcel(System.Web.UI.Controlctl,stringfile_name)
{
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.Buffer
=true;
HttpContext.Current.Response.Charset
="gb2312";
HttpContext.Current.Response.AppendHeader(
"Content-Disposition","attachment;filename="+file_name);
HttpContext.Current.Response.ContentEncoding
=System.Text.Encoding.GetEncoding("gb2312");
HttpContext.Current.Response.ContentType
="application/ms-excel";
//HttpContext.Current.Response.ContentType="text/HTML";
//image/JPEG;text/HTML;image/GIF;vnd.ms-excel/msword
ctl.Page.EnableViewState=false;
System.Globalization.CultureInfomyCItrad
=newSystem.Globalization.CultureInfo("zh-CN",true);
System.IO.StringWritertw
=newSystem.IO.StringWriter(myCItrad);
System.Web.UI.HtmlTextWriterhw
=newSystem.Web.UI.HtmlTextWriter(tw);
ctl.RenderControl(hw);
HttpContext.Current.Response.Write(tw.ToString());
HttpContext.Current.Response.End();
}
导入/导出Excel
1.--从Excel文件中,导入数据到SQL数据库中,很简单,直接用下面的语句:
/*===================================================================*/
--如果接受数据导入的表已经存在

insertinto表select
*from
OPENROWSET(
'MICROSOFT.JET.OLEDB.4.0'
,
'Excel5.0;HDR=YES;DATABASE=c:est.xls',sheet1$)
--如果导入数据并生成表


select
*into表from
OPENROWSET(
'MICROSOFT.JET.OLEDB.4.0'
,
'Excel5.0;HDR=YES;DATABASE=c:est.xls',sheet1$)
/*===================================================================*/

2.--从SQL数据库中,导出数据到Excel:
--如果从SQL数据库中,导出数据到Excel,如果Excel文件已经存在,而且已经按照要接收的数据创建好表头,就可以简单的用:

insertintoOPENROWSET(
'MICROSOFT.JET.OLEDB.4.0'
,
'Excel5.0;HDR=YES;DATABASE=c:est.xls',sheet1$)
select
*from表

--如果Excel文件不存在,也可以用BCP来导成类Excel的文件,注意大小写:
--导出表的情况

EXECmaster..xp_cmdshell
'bcp数据库名.dbo.表名out"c:est.xls"/c-/S"服务器名"/U"用户名"-P"密码"'
--导出查询的情况


EXECmaster..xp_cmdshell
'bcp"SELECTau_fname,au_lnameFROMpubs..authorsORDERBYau_lname"queryout"c:est.xls"/c-/S"服务器名"/U"用户名"-P"密码"'

/*--说明:
c: est.xls为导入/导出的Excel文件名.
sheet1$为Excel文件的工作表名,一般要加上$才能正常使用.
--
*/


3.--建立存储过程,导出真正的Excel文件(用此方法导出的Excel文件在用于导入时不会报错)

--下面是导出真正Excel文件的方法:(请将一下所有代码复制到存储过程中)

ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[p_exporttb]')andOBJECTPROPERTY(id,N'IsProcedure')=1)
dropprocedure[dbo].[p_exporttb]
GO

/**//*--数据导出EXCEL

导出表中的数据到Excel,包含字段名,文件为真正的Excel文件
,如果文件不存在,将自动创建文件
,如果表不存在,将自动创建表
基于通用性考虑,仅支持导出标准数据类型

--邹建2003.10(引用请保留此信息)--
*/

/**//*--调用示例

p_exporttb@tbname='地区资料',@path='c:',@fname='aa.xls'
--
*/
createprocp_exporttb
@tbnamesysname,
--要导出的表名
@pathnvarchar(
1000),--文件存放目录
@fnamenvarchar(
250)=''--文件名,默认为表名
as
declare@err
int,@srcnvarchar(255),@descnvarchar(255),@outint
declare@obj
int,@constrnvarchar(1000),@sqlvarchar(8000),@fdlistvarchar(8000)

--参数检测
ifisnull(@fname,'')=''set@fname=@tbname+'.xls'

--检查文件是否已经存在
ifright(@path,1)<>''set@path=@path+''
createtable#tb(abit,bbit,cbit)
set@sql=@path+@fname
insertinto#tbexecmaster..xp_fileexist@sql

--数据库创建语句
set@sql=@path+@fname
ifexists(select1from#tbwherea=1)
set@constr='DRIVER={MicrosoftExcelDriver(*.xls)};DSN='''';READONLY=FALSE'
+';CREATE_DB="'+@sql+'";DBQ='+@sql
else
set@constr='Provider=Microsoft.Jet.OLEDB.4.0;ExtendedProperties="Excel8.0;HDR=YES'
+';DATABASE='+@sql+'"'


--连接数据库
exec@err
=sp_oacreate'adodb.connection',@objout
if@err<>0gotolberr

exec@err
=sp_oamethod@obj,'open',null,@constr
if@err<>0gotolberr

/**//*--如果覆盖已经存在的表,就加上下面的语句
--创建之前先删除表/如果存在的话
select@sql='droptable['+@tbname+']'
exec@err=sp_oamethod@obj,'execute',@outout,@sql
--
*/

--创建表的SQL
select@sql
='',@fdlist=''
select@fdlist
=@fdlist+',['+a.name+']'
,@sql
=@sql+',['+a.name+']'
+case
whenb.namelike
'%char'
then
casewhena.length>255then'memo'
else'text('+cast(a.lengthasvarchar)+')'end
whenb.namelike
'%int'orb.name='bit'then'int'
whenb.namelike
'%datetime'then'datetime'
whenb.namelike
'%money'then'money'
whenb.namelike
'%text'then'memo'
elseb.nameend
FROMsyscolumnsaleftjoinsystypesbona.xtype
=b.xusertype
whereb.namenotin('image','uniqueidentifier','sql_variant','varbinary','binary','timestamp')
andobject_id(@tbname)
=id
select@sql
='createtable['+@tbname
+']('+substring(@sql,2,8000)+')'
,@fdlist
=substring(@fdlist,2,8000)
exec@err
=sp_oamethod@obj,'execute',@outout,@sql
if@err<>0gotolberr

exec@err
=sp_oadestroy@obj

--导入数据
set@sql='openrowset(''MICROSOFT.JET.OLEDB.4.0'',''Excel8.0;HDR=YES;IMEX=1
;DATABASE='+@path+@fname+''',['+@tbname+'$])'

exec(
'insertinto'+@sql+'('+@fdlist+')select'+@fdlist+'from'+@tbname)

return

lberr:
execsp_oageterrorinfo
0,@srcout,@descout
lbexit:
selectcast(@err
asvarbinary(4))as错误号
,@src
as错误源,@descas错误描述
select@sql,@constr,@fdlist
go



ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[p_exporttb]')andOBJECTPROPERTY(id,N'IsProcedure')=1)
dropprocedure[dbo].[p_exporttb]
GO

/**//*--数据导出EXCEL

导出查询中的数据到Excel,包含字段名,文件为真正的Excel文件
如果文件不存在,将自动创建文件
如果表不存在,将自动创建表
基于通用性考虑,仅支持导出标准数据类型

--邹建2003.10(引用请保留此信息)--
*/

/**//*--调用示例

p_exporttb@sqlstr='select*from地区资料'
,@path='c:',@fname='aa.xls',@sheetname='地区资料'
--
*/
createprocp_exporttb
@sqlstrvarchar(
8000),--查询语句,如果查询语句中使用了orderby,请加上top100percent
@pathnvarchar(
1000),--文件存放目录
@fnamenvarchar(
250),--文件名
@sheetnamevarchar(
250)=''--要创建的工作表名,默认为文件名
as
declare@err
int,@srcnvarchar(255),@descnvarchar(255),@outint
declare@obj
int,@constrnvarchar(1000),@sqlvarchar(8000),@fdlistvarchar(8000)

--参数检测
ifisnull(@fname,'')=''set@fname='temp.xls'
ifisnull(@sheetname,'')=''set@sheetname=replace(@fname,'.','#')

--检查文件是否已经存在
ifright(@path,1)<>''set@path=@path+''
createtable#tb(abit,bbit,cbit)
set@sql=@path+@fname
insertinto#tbexecmaster..xp_fileexist@sql

--数据库创建语句
set@sql=@path+@fname
ifexists(select1from#tbwherea=1)
set@constr='DRIVER={MicrosoftExcelDriver(*.xls)};DSN='''';READONLY=FALSE'
+';CREATE_DB="'+@sql+'";DBQ='+@sql
else
set@constr='Provider=Microsoft.Jet.OLEDB.4.0;ExtendedProperties="Excel8.0;HDR=YES'
+';DATABASE='+@sql+'"'

--连接数据库
exec@err
=sp_oacreate'adodb.connection',@objout
if@err<>0gotolberr

exec@err
=sp_oamethod@obj,'open',null,@constr
if@err<>0gotolberr

--创建表的SQL
declare@tbnamesysname
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
whenb.namelike
'%char'
then
casewhena.length>255then'memo'
else'text('+cast(a.lengthasvarchar)+')'end
whenb.namelike
'%int'orb.name='bit'then'int'
whenb.namelike
'%datetime'then'datetime'
whenb.namelike
'%money'then'money'
whenb.namelike
'%text'then'memo'
elseb.nameend
FROMtempdb..syscolumnsaleftjointempdb..systypesbona.xtype
=b.xusertype
whereb.namenotin('image','uniqueidentifier','sql_variant','varbinary','binary','timestamp')
anda.id
=(selectidfromtempdb..sysobjectswherename=@tbname)

if@@rowcount=0return

select@sql
='createtable['+@sheetname
+']('+substring(@sql,2,8000)+')'
,@fdlist
=substring(@fdlist,2,8000)

exec@err
=sp_oamethod@obj,'execute',@outout,@sql
if@err<>0gotolberr

exec@err
=sp_oadestroy@obj

--导入数据
set@sql='openrowset(''MICROSOFT.JET.OLEDB.4.0'',''Excel8.0;HDR=YES
;DATABASE='+@path+@fname+''',['+@sheetname+'$])'

exec(
'insertinto'+@sql+'('+@fdlist+')select'+@fdlist+'from['+@tbname+']')

set@sql='droptable['+@tbname+']'
exec(@sql)
return

lberr:
execsp_oageterrorinfo
0,@srcout,@descout
lbexit:
selectcast(@err
asvarbinary(4))as错误号
,@src
as错误源,@descas错误描述
select@sql,@constr,@fdlist
go

4.--在.net中导出到Excel的简单实例.

(
1).添加引用MicrosoftExcel11.0ObjectLibrary(在COM中)

(
2).在web.config的上<system.web>里加

<identityimpersonate="true"/>

//此句为了使用户能在本地打开文档,identify属性规定了身份验证的模式,一般情况下为false,这样安全性较高

(
3).在Text.aspx上加Button1控件

(
4).在cs页面添加usingMicrosoft.Office.Interop.Excel;

(
5).添加单击事件,在这里处理将数据库中的数据导入excel,代码如下:

//定义方法GetData(),返回一个数据表
privateSystem.Data.DataTableGetData()
...{
SqlConnectionconn
=newSqlConnection(@"Server=XJIE;InitialCatalog=Northwind;Uid=sa;Pwd=xjie;");
SqlDataAdapteradapter
=newSqlDataAdapter("selectCompanyName用户名,ContactTitle联系主题,Address住宅地址,ContactName联系人,Phone电话,City城市fromCustomersorderbyCustomerIDdesc",conn);
DataSetds
=newDataSet();
try
...{
adapter.Fill(ds,
"Customer");
}
catch(Exceptionex)
...{
MessageBox.Show(ex.ToString());
}
returnds.Tables[0];
}


privatevoidButton1_Click(objectsender,System.EventArgse)
...{
Applicationexcel
=newApplication();
introwIndex=1;
intcolIndex=0;

excel.Application.Workbooks.Add(
true);

DataTabletable
=GetData();

//将所得到的表的列名,赋值给单元格
foreach(DataColumncolintable.Columns)
...{
colIndex
++;
excel.Cells[
1,colIndex]=col.ColumnName;
}

//同样方法处理数据
foreach(DataRowrowintable.Rows)
...{
rowIndex
++;
colIndex
=0;
foreach(DataColumncolintable.Columns)
...{
colIndex
++;
excel.Cells[rowIndex,colIndex]
=row[col.ColumnName].ToString();
}
}
//不可见,即后台处理
excel.Visible=true;
}
分享到:
评论

相关推荐

    基于Python实现SQL SEVER与Excel间数据的批量导出.pdf

    具体而言,操作者可以通过指定表复制或查询界面,选择复制一个或多个表或视图的数据,或者编写SQL语句查询数据后导出到Excel。通过这些步骤,可以完成SQL Server中数据批量导出到Excel数据表的操作。 总结来说,...

    Kettle 简单示例(数据库表到输出到Excel)

    【Kettle简介】 Kettle,又称为Pentaho ...对于初学者来说,这个示例是一个很好的起点,可以帮助理解Kettle的基本操作和工作原理。随着经验的积累,你可以逐步掌握更高级的功能,如错误处理、性能优化、数据流控制等。

    ssh整合web导出excel案例.docx

    - **Service代码**:实现导出Excel的具体逻辑,包括解决文件名中文乱码问题。 - **DAO代码**:可能涉及查询数据库获取需要导出的数据。 5. **JSP页面** - **index.jsp**:主页,提供导出链接或按钮。 - **list....

    C#操作Excel(导入导出)

    但是,对于简单的数据导入导出,OLEDB接口是一个简单快速的解决方案。 总之,C#操作Excel涉及了数据库连接、数据适配器和命令对象的使用,以及基本的SQL查询语法。正确理解和运用这些概念,可以有效地在C#应用程序...

    导出Excel实例项目:dbToExcel

    9. 用户界面(可选):如果这是一个用户交互的应用,可能还需要一个简单的图形用户界面(GUI),让用户输入数据库连接信息、选择要导出的表和字段,以及设置导出选项。JavaFX或Swing是创建Java GUI的常见工具。 综...

    从MySQL导出数据到excel

    下面是一个简单的步骤来实现这个功能: 1. **连接数据库**:首先,你需要使用JDBC建立与MySQL数据库的连接。这通常涉及到设置URL、用户名、密码,然后加载JDBC驱动并调用`DriverManager.getConnection()`方法。 ``...

    asp/net导出界面excel

    - 防止SQL注入:在从用户输入构建查询时,务必使用参数化查询或存储过程,避免直接拼接SQL语句。 - 内容过滤:确保导出的数据没有潜在的安全敏感信息,例如用户密码、个人识别信息等。 - 大小限制:为了避免性能...

    mysql数据导出工具

    "administrator-1.1.3-win.msi" 文件是一个针对Windows操作系统的MySQL数据导出工具,它提供了方便快捷的方式来处理数据库中的数据导出问题,特别是解决了SQL脚本可能出现的乱码问题。 MySQL数据库导出工具有以下几...

    数据库数据的导入导出和数据库备份和恢复.pdf

    在数据库管理中,数据的导入导出是一个重要的操作,它允许我们将数据从一个数据库系统转移到另一个系统,或者在不同的格式之间进行转换。例如,文件中提到的从SQL Server导出数据并导入到另一个SQL Server实例("SQL...

    车站售票管理系统课程设计 SQL

    2. SQL语句操作:在实现功能时,SQL语句的编写至关重要。例如,购票操作涉及INSERT语句插入新订单;退票可能需要UPDATE语句更新订单状态;查询余票需要用到SELECT语句,结合JOIN操作从多个表中获取信息。同时,学会...

    最小巧的SQLServer管理工具SQLchaxunfx

    2. 查询执行:提供一个简洁的查询编辑器,可以编写并执行SQL语句,进行数据查询、更新、插入和删除等操作。同时,它还支持结果集的查看和导出。 3. 对象管理:允许用户浏览和管理数据库中的表、视图、存储过程、...

    易语言源码对象excel读取MDB数据库源码.rar

    1. "最简单的MDB数据库转换保存为excel表格地方法.e" - 这很可能是易语言编写的主程序文件,执行MDB到Excel的转换。.e文件是易语言的可执行文件扩展名,用户可以直接运行这个文件来体验程序的功能。 2. "源码使用...

    The ninth skills of SQL design by DB Query Analyzer

    总的来说,DB查询分析器3.02是一个强大且灵活的SQL设计工具,它能够帮助用户高效地编写、调试和管理SQL语句,适应多种数据库系统,同时解决了特殊字符处理等问题,极大地提升了SQL编程的效率和便利性。无论是初学者...

    c#读取excel(包含2003和2007)

    这个方法适用于简单的情况,如读取单个工作表且不涉及复杂的公式、图表或VBA宏。对于更复杂的需求,可能需要使用其他库,如EPPlus或NPOI,它们提供了更全面的功能和更好的性能。需要注意的是,使用OLEDB方式读取...

    ExcelVBA操作MySQL

    在介绍Excel VBA操作MySQL的系列文章中,作者首先...在文章的最后,作者也鼓励读者通过电子邮件与他交流心得,提出了问题或提供了更好的解决方案。这种开放性的交流有助于促进知识共享,以及技术经验的相互学习和提高。

    SQl数据库考试题推荐.pdf

    1. **问题解决**:在安装SQL Server时,如果出现“以前的某个程序安装已在安装计算机上创建挂起的文件操作”的提示,通常可以通过清理Windows的“安装/卸载程序”列表或使用专门的清理工具如Revo Uninstaller来解决...

Global site tag (gtag.js) - Google Analytics