zoukankan
html css js c++ java
【转】 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
;
}
查看全文
相关阅读:
10 种保护 Spring Boot 应用的绝佳方法
Redis 如何分析慢查询操作?
Spring Boot 主类及目录结构介绍
Redis 再牛逼,也得设置密码!!
Spring Data Redis 详解及实战一文搞定
Spring Boot Redis Cluster 实战干货
超详细的 Redis Cluster 官方集群搭建指南
Redis Linux 安装运行实战全记录
hdu 4790 Just Random (思路+分类计算+数学)
poj 1328 Radar Installation(贪心)
原文地址:https://www.cnblogs.com/temptation/p/1145339.html
最新文章
[置顶] UITableViewCell
无题
html或jsp实现打印三种方法
K倍动态减法游戏
Windows
HDU 2191 (13.12.2)
访问者模式(Visitor)
Android 下用 Pull 解析和生成 XML
opencv——Rect和RotatedRect类详解
c++——this指针
热门文章
c++——静态成员变量成员函数
c++——对象的动态建立和释放(new 和delete)
c++——初始化列表
c++——深拷贝和浅拷贝
c++——对象的构造和析构函数、构造函数的分类及调用
c++——类和对象初探
c++—— 函数重载(Overroad)
c++——默认参数、函数占位参数
深入浅出 Java 中的包装类
金九银十,史上最强 Java 面试题整理。
Copyright © 2011-2022 走看看