将数据库数据用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种方法的更多相关文章

  1. oracle数据的导入导出(两种方法三种方式)

    大概了解数据库中数据的导入导出.在oracle中,导入导出数据的方法有两种,一种是使用cmd命令行的形式导入导出数据,另一种是使用PL/SQL工具导入导出数据. 1,使用cmd命令行导入导出数据 1. ...

  2. 利用Aspose.Cells完成easyUI中DataGrid数据的Excel导出功能

    我准备在项目中实现该功能之前,google发现大部分代码都是利用一般处理程序HttpHandler实现的服务器端数据的Excel导出,但是这样存在的问题是ashx读取的数据一般都是数据库中视图的数据, ...

  3. MySQL修改数据表存储引擎的3种方法介绍

    这篇文章主要介绍了MySQL修改数据表存储引擎的3种方法介绍,分别是直接修改.导出导入.创建插入3种方法, 可以参考下   MySQL作为最常用的数据库,经常遇到各种各样的问题.今天要说的就是表存储引 ...

  4. 用easyui从servlet传递json数据到前端页面的两种方法

    用easyui从servlet传递json数据到前端页面的两种方法 两种方法获取的数据在servlet层传递的方法相同,下面为Servlet中代码,以查询表中所有信息为例. //重写doGet方法 p ...

  5. 配置ODBC DSN数据源,导出数据库数据到Excel过程记录

    一.前言 工作中我们可能遇到这样的需要:查询数据库中的信息,并将结果导出到Excel文件.这本来没什么,但数据量比较大时,用PLSQL.toad导出Excel会出现内存不足等情况,使用odbc+Mic ...

  6. java 对excel操作 读取、写入、修改数据;导出数据库数据到excel

    ============前提加入jar包jxl.jar========================= // 从数据库导出数据到excel public List<Xskh> outPu ...

  7. 导出数据库数据制成Excel和txt

    引用ICSharpCode.SharpZipLib.dll 1.编写压缩和解压代码 using System; using System.Collections.Generic; using Syst ...

  8. .NET CORE 2.1 导出excel文件的两种方法

    最近在做 MVC 项目的时候遇到项目的导出,下面总结下两种导出到excel 的方法 第一种方法: 将文件写到本地,然后返回这个File 或者返回这个 File 的绝对地址  其中  _hostingE ...

  9. delphi 导出到excel的第1种方法

    第一种方法delphi 快速导出excel uses ComObj,clipbrd; function ToExcel(sfilename:string; ADOQuery:TADOQuery):bo ...

随机推荐

  1. 无法在web服务器上启动调试,服务器不支持对ASP.NET 或ATL Server应用程序进行调试。

    无法在web服务器上启动调试,服务器不支持对ASP.NET 或ATL Server应用程序进行调试. a>.DCOM配置里的属性灰色不可用的解决方法,   1>.管理工具->组件服务 ...

  2. 解决python2.7.9以下版本requests访问https的问题

    在python2.7.9以下版本requests访问https连接后,总会报一些关于SSL warning. 解决法子可以参考:https://urllib3.readthedocs.io/en/la ...

  3. 利用python进行数据分析之绘图和可视化

    matplotlib API入门 使用matplotlib的办法最常用的方式是pylab的ipython,pylab模式还会向ipython引入一大堆模块和函数提供一种更接近与matlab的界面,ma ...

  4. python自学笔记(十)语句与数据结构应用

    1.最基本的迭代 for x in y 2.如何迭代字典 for x,y in a.items(): print:x,y 3.如何为字典排序 key_list = a.keys() key_list. ...

  5. C/C++中的内存管理

    一.内存的分配方式 1. 程序代码区 2. 静态数据区 3. 动态数据区 二.动态内存 1. 在栈上创建的内存 2. 从堆上分配的内存 3. 小结 三.指针与内存 1. 操作内存 2. 指针与数组 3 ...

  6. nginx+tomcat+redis完成session共享

    本文记录nginx+redis+tomcat实现session共享的过程 nginx安装:http://blog.csdn.net/grhlove123/article/details/4783467 ...

  7. android天气查询(一)websevice之ksoap2软件包的使用

    对于用到天气信息,首先我想: 第一:数据不可能是我测得的,必须是网上的信息. 第二:网上的信息分为好多种,具体哪种比较好一点,这里我总结了两种. 第三:数据JSON怎么解析. 第四:如何提出数据与显示 ...

  8. VS2010/MFC设置对话框控件的Tab顺序

    设置对话框控件的Tab顺序 前面几节为大家演示了加法计算器程序完整的编写过程,本节主要讲对话框上控件的Tab顺序如何调整. 上一讲为“计算”按钮添加了消息处理函数后,加法计算器已经能够进行浮点数的加法 ...

  9. IOS学习之路二十四(UIImageView 加载gif图片)

    UIImageView 怎样加载一个gif图片我还不知道(会的大神请指教),不过可以通过加载不同的图片实现gif效果 代码如下: UIImageView* animatedImageView = [[ ...

  10. Objective-c 数据类型

    这里列出Objective-c中独有数据类型: 一.字符串 在Objective-c中,字符串常量是由@和一对从引号括起的字符串序列.比如:@"China".@"obje ...