数据库数据用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 ...
随机推荐
- 无法在web服务器上启动调试,服务器不支持对ASP.NET 或ATL Server应用程序进行调试。
无法在web服务器上启动调试,服务器不支持对ASP.NET 或ATL Server应用程序进行调试. a>.DCOM配置里的属性灰色不可用的解决方法, 1>.管理工具->组件服务 ...
- 解决python2.7.9以下版本requests访问https的问题
在python2.7.9以下版本requests访问https连接后,总会报一些关于SSL warning. 解决法子可以参考:https://urllib3.readthedocs.io/en/la ...
- 利用python进行数据分析之绘图和可视化
matplotlib API入门 使用matplotlib的办法最常用的方式是pylab的ipython,pylab模式还会向ipython引入一大堆模块和函数提供一种更接近与matlab的界面,ma ...
- python自学笔记(十)语句与数据结构应用
1.最基本的迭代 for x in y 2.如何迭代字典 for x,y in a.items(): print:x,y 3.如何为字典排序 key_list = a.keys() key_list. ...
- C/C++中的内存管理
一.内存的分配方式 1. 程序代码区 2. 静态数据区 3. 动态数据区 二.动态内存 1. 在栈上创建的内存 2. 从堆上分配的内存 3. 小结 三.指针与内存 1. 操作内存 2. 指针与数组 3 ...
- nginx+tomcat+redis完成session共享
本文记录nginx+redis+tomcat实现session共享的过程 nginx安装:http://blog.csdn.net/grhlove123/article/details/4783467 ...
- android天气查询(一)websevice之ksoap2软件包的使用
对于用到天气信息,首先我想: 第一:数据不可能是我测得的,必须是网上的信息. 第二:网上的信息分为好多种,具体哪种比较好一点,这里我总结了两种. 第三:数据JSON怎么解析. 第四:如何提出数据与显示 ...
- VS2010/MFC设置对话框控件的Tab顺序
设置对话框控件的Tab顺序 前面几节为大家演示了加法计算器程序完整的编写过程,本节主要讲对话框上控件的Tab顺序如何调整. 上一讲为“计算”按钮添加了消息处理函数后,加法计算器已经能够进行浮点数的加法 ...
- IOS学习之路二十四(UIImageView 加载gif图片)
UIImageView 怎样加载一个gif图片我还不知道(会的大神请指教),不过可以通过加载不同的图片实现gif效果 代码如下: UIImageView* animatedImageView = [[ ...
- Objective-c 数据类型
这里列出Objective-c中独有数据类型: 一.字符串 在Objective-c中,字符串常量是由@和一对从引号括起的字符串序列.比如:@"China".@"obje ...