数据库数据用Excel导出的3种方法
将数据库数据用Excel导出主要有3种方法:用Excel.Application接口、用OleDB、用HTML的Tabel标签
方法1——Excel.Application接口:
首先,需要要Excel.dll这个文件,确保自身机器上装有MS Office,在Office安装目录(../Microsoft Office/OFFICE11/,具体目录取决于自己的安装)中找到Excel.exe,然后放在(../Microsoft Visual Studio 8/SDK/v2.0/Bin)目录中,在CMD中输入“CD C:/Program Files/Microsoft Visual Studio 8/SDK/v2.0/Bin(具体目录取决于自己的安装)”,然后输入“TlbImp EXCEL.EXE Excel.dll”。然后在Bin这个文件夹中就能找到Excel.dll这个文件。用到时候在项目中引用就可以。
要使用命名空间
using Excel;
具体代码:
/// <summary>
/// 将SQLServer中的数据导出到Excel(使用Excel类,在没装Office时无效)
/// </summary>
/// <param name="ExelDt">要导出的数据集</param>
/// <param name="fileName">输出到的文件目录</param>
public static void SQLServerToExcel(DataSet ExelDt, string fileName)
{
int colIndex = , rowIndex = ;
Excel.Application excel;
Workbook wBook;
Worksheet wSheet;
try
{
excel = new Excel.Application();
wBook = excel.Application.Workbooks.Add(true);
wSheet = wBook.Worksheets[] as Worksheet;
//excel.Visible = true;
}
catch
{
Win32.MsgBox(, "您可能没有安装Office,请安装再使用该功能", "", );
return;
}
try
{
foreach (DataColumn col in ExelDt.Tables[].Columns)
{
wSheet.Cells[, colIndex] = col.ColumnName; colIndex++;
}
foreach (DataRow row in ExelDt.Tables[].Rows)
{
rowIndex++; colIndex = ;
foreach (DataColumn col in ExelDt.Tables[].Columns)
{
colIndex++;
if (colIndex == )
{
wSheet.Cells[rowIndex, colIndex] = "'" + row[col.ColumnName].ToString();
}
else
{
wSheet.Cells[rowIndex, colIndex] = row[col.ColumnName].ToString();
}
}
}
//设置禁止弹出保存和覆盖的询问提示框
excel.DisplayAlerts = false;
excel.AlertBeforeOverwriting = false; //保存
wSheet.SaveAs(fileName, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value,Missing.Value, Missing.Value, Missing.Value, Missing.Value);
wBook.Save();
}
catch (System.Exception)
{
Win32.MsgBox(, "输出Excel有错误,请确认没有关闭Excel", "", );
return;
}
finally
{
excel.Quit();
}
}
其中要注意的是:
wSheet.SaveAs(fileName, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value,Missing.Value, Missing.Value, Missing.Value, Missing.Value);
wBook.Save();
这样就不会在保存的时候还会弹出保存对话框。
还要记得关闭Excel,不然就一直占有着
finally
{
excel.Quit();
}
方法2——用OleDB:
个人觉得用OleDB最好,因为不需要安装Office也可以导出Excel,而且速度也比较快。
具体代码:
/// <summary>
/// 将SQLServer中的数据导出到Excel(使用OleDB)
/// </summary>
/// <param name="ExelDt">要导出的数据集</param>
/// <param name="filePath">输出到的文件目录</param>
/// <returns>信息</returns>
public static string SQLServerToExcel(System.Data.DataTable ExelDt, string filePath)
{
if (ExelDt == null)
{
return "数据不能为空";
}
//数据集的行总数、列总数
int rows = ExelDt.Rows.Count;
int cols = ExelDt.Columns.Count;
if (rows == )
{
return "没有数据";
} StringBuilder sb = new StringBuilder();
string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = " + filePath + ";Extended Properties=Excel 8.0";
OleDbCommand cmd = new OleDbCommand();
OleDbConnection myConn = new OleDbConnection(strCon);
try
{
//创建文件
myConn.Open();
//创建表
cmd.Connection = myConn;
sb.Append("create table ");
sb.Append(ExelDt.TableName + "(");
for (int i = ; i < cols; i++)
{
if (i < cols - )
{
sb.Append(string.Format("{0} varchar,", ExelDt.Columns[i].ColumnName));
}
else
{
sb.Append(string.Format("{0} varchar)", ExelDt.Columns[i].ColumnName));
}
}
cmd.CommandText = sb.ToString();
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
return "建立Exel文件失败:" + ex.ToString();
} //--------------------------------------------------------------------------------- //插入数据
sb.Remove(, sb.Length); sb.Append("INSERT INTO ");
sb.Append(ExelDt.TableName + " ( "); for (int i = ; i < cols; i++)
{
if (i < cols - )
sb.Append(ExelDt.Columns[i].ColumnName + ",");
else
sb.Append(ExelDt.Columns[i].ColumnName + ") values (");
} for (int i = ; i < cols; i++)
{
if (i < cols - )
sb.Append("@" + ExelDt.Columns[i].ColumnName + ",");
else
sb.Append("@" + ExelDt.Columns[i].ColumnName + ")");
}
cmd.CommandText = sb.ToString();
OleDbParameterCollection param = cmd.Parameters; for (int i = ; i < cols; i++)
{
param.Add(new OleDbParameter("@" + ExelDt.Columns[i].ColumnName, OleDbType.VarChar));
} //遍历DataTable将数据插入新建的Excel文件中
foreach (DataRow row in ExelDt.Rows)
{
for (int i = ; i < param.Count; i++)
{
param[i].Value = row[i];
} cmd.ExecuteNonQuery();
} cmd.Connection.Close(); return "数据已成功导入Excel";
}
其中注意:
string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = " + filePath + ";Extended Properties=Excel 8.0";
其中“Excel 8.0”是表示使用MS Office 2003,其他版本的没有用过,不确定是否只需修改版本号就可以。
方法3——用HTML的Tabel标签:
这个具体我没试过实现,这里给个思路,将要导出的数据用<tabel>、<tr>、<td>这几个标签输出成HTML文件,然后把扩展名改为.xls就可以。
数据库数据用Excel导出的3种方法的更多相关文章
- oracle数据的导入导出(两种方法三种方式)
大概了解数据库中数据的导入导出.在oracle中,导入导出数据的方法有两种,一种是使用cmd命令行的形式导入导出数据,另一种是使用PL/SQL工具导入导出数据. 1,使用cmd命令行导入导出数据 1. ...
- 利用Aspose.Cells完成easyUI中DataGrid数据的Excel导出功能
我准备在项目中实现该功能之前,google发现大部分代码都是利用一般处理程序HttpHandler实现的服务器端数据的Excel导出,但是这样存在的问题是ashx读取的数据一般都是数据库中视图的数据, ...
- MySQL修改数据表存储引擎的3种方法介绍
这篇文章主要介绍了MySQL修改数据表存储引擎的3种方法介绍,分别是直接修改.导出导入.创建插入3种方法, 可以参考下 MySQL作为最常用的数据库,经常遇到各种各样的问题.今天要说的就是表存储引 ...
- 用easyui从servlet传递json数据到前端页面的两种方法
用easyui从servlet传递json数据到前端页面的两种方法 两种方法获取的数据在servlet层传递的方法相同,下面为Servlet中代码,以查询表中所有信息为例. //重写doGet方法 p ...
- 配置ODBC DSN数据源,导出数据库数据到Excel过程记录
一.前言 工作中我们可能遇到这样的需要:查询数据库中的信息,并将结果导出到Excel文件.这本来没什么,但数据量比较大时,用PLSQL.toad导出Excel会出现内存不足等情况,使用odbc+Mic ...
- java 对excel操作 读取、写入、修改数据;导出数据库数据到excel
============前提加入jar包jxl.jar========================= // 从数据库导出数据到excel public List<Xskh> outPu ...
- 导出数据库数据制成Excel和txt
引用ICSharpCode.SharpZipLib.dll 1.编写压缩和解压代码 using System; using System.Collections.Generic; using Syst ...
- .NET CORE 2.1 导出excel文件的两种方法
最近在做 MVC 项目的时候遇到项目的导出,下面总结下两种导出到excel 的方法 第一种方法: 将文件写到本地,然后返回这个File 或者返回这个 File 的绝对地址 其中 _hostingE ...
- delphi 导出到excel的第1种方法
第一种方法delphi 快速导出excel uses ComObj,clipbrd; function ToExcel(sfilename:string; ADOQuery:TADOQuery):bo ...
随机推荐
- WCF服务
一.新建windows服务 二.新建wcf服务 三.添加安装程序 四.设置安装程序 五.设置启动代码 6 7 8. 注:当使用管理员身份 安装不成功时,可以使用vs自带的命令工具 ...
- divmod数字处理函数
divmod(a,b)函数 中文说明: divmod(a,b)方法返回的是a//b(除法取整)以及a对b的余数 返回结果类型为tuple 参数: a,b可以为数字(包括复数) 版本: 在python2 ...
- asp.net mvc3 linq实现数据的增、删、改、查、
asp.net mvc 3 linq实现数据的增.删.改.查. 添加数据 定义一个对象: public class Student { public int id{get; set;} public ...
- GDI+ 中发生一般性错误(在 OutputStream 中保存 PNG 格式图像时遇到的问题)
在将图片以 PNG 格式保存至 Response.OutputStream 时,会碰到如下错误: GDI+ 中发生一般性错误. 原因: 在写 PNG 格式的图像时,指针需要在存储的位置来回移动.而 R ...
- 提供基于Lesktop的IM二次开发,联系QQ:87172811
提供基于Lesktop的IM二次开发,联系QQ:87172811
- HDU 1983 Kaitou Kid - The Phantom Thief (2)
神题,搜索太差,来自网络的题解与程序 思路: 封锁出口或者入口周围的格子. 最多需要4个封锁点. 所以我们可以采取这样的策略: 1.寻找一条盗贼的可行路线,如果没有,返回0. 2.计算封锁出口和入口四 ...
- HDU4451Dressing(计数)
HDU4451Dressing(计数) 题目链接 题目大意:给你N件衣服, M条裤子, K双鞋子,如今有P个不合理的的搭配(衣服和裤子或者裤子和鞋子),要求不用P中不理的搭配方式来将衣服裤子鞋子三件搭 ...
- openstack之keystone
一.什么是keystone 用于为openstack家族中的其它组件成员提供统一的认证服务,包括身份认证.令牌发放和校验.服务列表.用户权限定义等: 基本概念: 用户User:用于身份认证.一个用户可 ...
- web.xml 的加载顺序
context-param -> listener -> filter -> servlet
- TC基础使用指南(基于xbeta的TC配置文件)
所有常用目录都可以通过ctrl+d加一个或几个字母的超快捷方式直接跳转到位. 按下BackSpace键,就可以进入到上一级目录 Ctrl+q 在右侧打开左侧选定文件,再按一次Ctrl+q退出 按 Ct ...