Temptation
寻道之路 , 与您同行 !
博客园
::
首页
::
新随笔
::
联系
::
订阅
::
管理
::
319 随笔 :: 0 文章 :: 170 评论 :: 3 Trackbacks
【转】 asp.net数据导出EXCEL
/**/
/**/
/**/
/*
--数据导出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
4
.
--
在.net中导出到Excel的简单实例.
(
1
).添加引用Microsoft Excel
11.0
Object Library (在COM中)
(
2
).在web.config的上
<
system.web
>
里加
<
identity impersonate
=
"
true
"
/>
//
此句为了使用户能在本地打开文档,identify属性规定了身份验证的模式,一般情况下为false,这样安全性较高
(
3
).在Text.aspx上加Button1控件
(
4
).在cs页面添加
using
Microsoft.Office.Interop.Excel;
(
5
).添加单击事件,在这里处理将数据库中的数据导入excel,代码如下:
//
定义方法GetData(),返回一个数据表
private
System.Data.DataTable GetData()
{
SqlConnection conn
=
new
SqlConnection(
@"
Server=XJIE;Initial Catalog=Northwind;Uid=sa;Pwd=xjie;
"
);
SqlDataAdapter adapter
=
new
SqlDataAdapter(
"
select CompanyName 用户名,ContactTitle 联系主题,Address 住宅地址,ContactName 联系人,Phone 电话,City 城市 from Customers order by CustomerID desc
"
,conn);
DataSet ds
=
new
DataSet();
try
{
adapter.Fill(ds,
"
Customer
"
);
}
catch
(Exception ex)
{
MessageBox.Show(ex.ToString());
}
return
ds.Tables[
0
];
}
private
void
Button1_Click(
object
sender, System.EventArgs e)
{
Application excel
=
new
Application();
int
rowIndex
=
1
;
int
colIndex
=
0
;
excel.Application.Workbooks.Add(
true
);
DataTable table
=
GetData();
//
将所得到的表的列名,赋值给单元格
foreach
(DataColumn col
in
table.Columns)
{
colIndex
++
;
excel.Cells[
1
,colIndex]
=
col.ColumnName;
}
//
同样方法处理数据
foreach
(DataRow row
in
table.Rows)
{
rowIndex
++
;
colIndex
=
0
;
foreach
(DataColumn col
in
table.Columns)
{
colIndex
++
;
excel.Cells[rowIndex,colIndex]
=
row[col.ColumnName].ToString();
}
}
//
不可见,即后台处理
excel.Visible
=
true
;
}
posted on 2008-04-09 17:02
temptation
阅读(179)
评论(0)
编辑
收藏
所属分类:
ASP.Net 开发(C#)
社区
新闻
新用户注册
刷新评论列表
标题
姓名
主页
Email
(只有博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
另存
打印
所属分类的其他文章:
·
【原】 C#关键字 Ref 学习笔记
·
【转】 asp.net数据导出EXCEL
·
[转] 为GridView删除添加确认对话框
·
[转] Microsoft AppLocale Utility 使用说明
·
[转] 三层开发中的层次划分
·
[转] Visual Studio 2003/Visual Studio 2005常用快捷键
·
[*转*] 开发B2C电子商务系统(ASP.NET)--多年前的老文章
·
[转] ASP.NET1.1(C#)中验证码产生的原理及应用
·
[原] 提示为"无法在web服务器上启动调试,未将项目配置为进行调试"的可能原因
·
[转] ASP.NET 常见参考项目的 UI、BLL 、Model 、 DAL 分析
最新IT新闻:
·
腾讯CEO马化腾:中国互联网业准备再过冬
·
F8 Keynote Speech[多图]
·
奥运核心资源被分食 搜狐央视网谁忽悠谁?
·
微软推新型搜索技术"BrowseRank"挑战谷歌
·
2008年7月26日IT博客精选
博客园新闻频道
博客园首页
社区
<
2008年4月
>
日
一
二
三
四
五
六
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
公告
天气预报
与我联系
发短消息
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
我的新闻
最新评论
我的标签
留言簿
(6)
给我留言
查看留言
我参加的小组
每日一句英语
ASP.NET
程序员音乐空间
读书(Books)
设计模式
OOAD&UML
asp.net控件开发技术
我参与的团队
上海.NET俱乐部(0/2154)
数据库团队(0/200)
随笔分类
(316)
"活"在日本(13)
(rss)
ASP.Net 开发(C#)(15)
(rss)
ASP.Net 开发(VB.Net) (2)
(rss)
ASP开发(9)
(rss)
C#技术(21)
(rss)
CGI技术(1)
(rss)
Delphi 精华(2)
(rss)
Design Pattern
(rss)
Eclipse 学习(2)
(rss)
J2EE 技术(EJB方向)(3)
(rss)
J2EE 技术(JSP+Servlet+JavaBean方向) (9)
(rss)
J2EE 技术(Struts+Hibernate+Spring方向) (3)
(rss)
J2SE 技术(12)
(rss)
JavaScript技术(8)
(rss)
Ruby on Rails
(rss)
SharpDevelop(4)
(rss)
UML 学习(1)
(rss)
VB 数据库开发(18)
(rss)
VB 游戏开发
(rss)
VC++ 游戏开发 (1)
(rss)
串口通信(C#方向)
(rss)
串口通信(JAVA方向)
(rss)
串口通信(VB方向)(4)
(rss)
电子竞技(4)
(rss)
怀旧照片
(rss)
计算机日常应用(软件) (5)
(rss)
计算机日常应用(网络) (4)
(rss)
计算机日常应用(硬件)(5)
(rss)
面试题汇总(25)
(rss)
日语学习(11)
(rss)
数据库--MSSQL(33)
(rss)
数据库--MySQL
(rss)
数据库--Oracle(6)
(rss)
体育竞技(1)
(rss)
我的思想(11)
(rss)
杂七杂八(83)
(rss)
随笔档案
(319)
2008年4月 (4)
2008年3月 (4)
2008年2月 (1)
2008年1月 (5)
2007年12月 (5)
2007年11月 (4)
2007年10月 (9)
2007年9月 (6)
2007年8月 (4)
2007年7月 (9)
2007年6月 (7)
2007年5月 (10)
2007年4月 (4)
2007年3月 (6)
2007年2月 (22)
2007年1月 (6)
2006年12月 (5)
2006年11月 (10)
2006年10月 (5)
2006年9月 (23)
2006年8月 (46)
2006年7月 (9)
2006年6月 (31)
2006年5月 (27)
2006年4月 (34)
2006年3月 (23)
收藏夹
(6)
【.Net 相关资源】(6)
(rss)
朋友的Blog
╃小〥斌╄
--对日外包的园友
BoyLee
--对日外包的园友
Catherine's BLOG
--Catherine,我就是我,颜色不一样的烟火 !
Eternity
--一个和我非常象的人
Moneystar的专栏--NFramework
Xia jie`s Blog
混子的BLOG
老谷的Blog
--专注于.net开发
刘亨利的Blog
--专注于工业控制的研究
龙潜's blog
--才子
吕震宇老师的Blog
钱宇老师(赵帆的女友)
--专注于初中语文教学
谭佳佳老师
--专注于小学语文教学
汪晓芬老师
--专注于小学数学教学
小山的Blog
搜索
积分与排名
积分 - 121821
排名 - 299
最新随笔
1. 【原】有线通设定
2. 【原】 C#关键字 Ref 学习笔记
3. 【转】 asp.net数据导出EXCEL
4. 【原】Sql中时间处理函数 DateAdd & DateDiff
5. [转] 为GridView删除添加确认对话框
6. [转] SQL Server中的行列转换问题
7. [转] 对面向对象设计原则的总结
8. [原] Excel(VBA)中数据的非科学记数法显示
9. [原] Excel中计算2个日期间的时间间隔
10. 【转】 简单的3个SQL视图搞定所有SqlServer数据库字典
11. [*原*] 2个面试问题--与BoyLee的交流
12. [转] 股票基础知识
13. [转] 纯代码取得本机IP地址
14. [*小技巧*] combobox如何让用户不能输入只能从下拉列表里面选择
15. [原] SharpDevelop2.2 + MySQL5.0试用小记(4)_MySQL创建表和存储过程
最新评论
1. re: [转] 解析oracle的ROWNUM -- 作者: chen_liang
good article, thanks.
--jackie zhuhai
2. re: [转] 130道C#面试题
啥子答案哟,好多错的哦!!!!
--roro
3. re: [***怀念母校--安徽理工大学(淮南矿院)***] 想回到过去...
学校变的都不敢认了,我们那时的足球场是一片黄土,放了学可是我们乐园!!
怀念!怀念!!怀念!!!
一去不返的岁月
--爆破96
4. re: [*小技巧*] combobox如何让用户不能输入只能从下拉列表里面选择
晕~~~~~!
--ktgu
5. re: [转] ASP.NET 常见参考项目的 UI、BLL 、Model 、 DAL 分析
很全,学习了.
--阿牛 - 专注企业开发
阅读排行榜
1. [转] 能ping通,但不能上网.(8789)
2. [转] left join/right join/inner join操作演示 (6563)
3. [转] 硬盘工具DiskMan使用图解(5803)
4. [转] IIS问题:Server Application Error 的解决(4495)
5. [转] 一张废手机卡的作用大全 (没试过)(3989)
评论排行榜
1. [转] 解析oracle的ROWNUM -- 作者: chen_liang(16)
2. [***怀念母校--安徽理工大学(淮南矿院)***] 想回到过去...(12)
3. [转] left join/right join/inner join操作演示 (10)
4. [转] C#试题(7)
5. [转] 图解eclipse+myelcipse开发EJB (6)
Powered by:
博客园
Copyright © temptation