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
;
}
查看全文
相关阅读:
开源魔兽世界私服搭建
centos7 普通用户无法使用ssh登录其他服务器
Java时间格式大全
C#中的线程之Abort陷阱
C# 多线程学习系列四之ThreadPool取消、超时子线程操作以及ManualResetEvent和AutoResetEvent信号量的使用
C# ThreadPool类(线程池)
VS2019输出信息到调试控制台
Stream/Bytes[]/Image对象相互转化
Asp.NetCore 读取配置文件帮助类
Java SpringBoot使用126邮箱发送html内容邮件,带附件
原文地址:https://www.cnblogs.com/temptation/p/1145339.html
最新文章
那些年我们一起清除过的浮动
最新版本Firefox表单css兼容性
mongodb控制台中文乱码
SecureCRT的脚本+快捷键设置
shiro filter执行顺序
trouble shooting(mybatis)
Kafka和RocketMQ的使用体验
mpush调研
Tigergraph高性能图数据库深入调研
Tigergraph和ArangoDB的性能测试
热门文章
ArangoDB、Neo4j、OrientDB性能比较
关于github的pull requests,commits,issues,code reivew统计
springboot多环境配置文件无效
github图片打不开解决方案
trouble shooting(Cannot determine embedded database driver class for database type NONE)
spring security认证源码分析之账户权限
spring security认证源码分析之账户验证
window系统文件路径太长无法删除
elasticsearch ik分词插件的扩展字典和扩展停止词字典用法
git账户切换bug(trouble shooting)
Copyright © 2011-2022 走看看