将数据库数据用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. java代理课程测试 spring AOP代理简单测试

    jjava加强课程测试代码 反射. 代理 .泛型.beanUtils等 项目源码下载:http://download.csdn.net/detail/liangrui1988/6568169 热身运动 ...

  2. Database SQL script automation management tools investigation

    Recently researched about database SQL scripts auto management tools, recorded the results here. Res ...

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

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

  4. BZOJ 2463 谁能赢呢? (博弈论)

    题解:简单博弈论 #include <cstdio> int main(){ int n; while(scanf("%d",&n),n!=0) if (n&a ...

  5. Oracle select into from 和 insert into select

    select into from SQLSERVER  创建表: select * into aaa from bbb Oracle 创建表: create table aaa as select * ...

  6. AOP 面向切面编程、拦截器

    AOP(Aspect-Oriented Programming,面向切面的编程),它是可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术.它是一种新的方法论, ...

  7. HDU 1501 Zipper 动态规划经典

    Zipper Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  8. Web开发者的10个最好的云开发环境

    1. Cloud9 IDE cloud9 Cloud9是我最喜欢的一个最好的云开发环境,它可以让我在任何时间任何地点进行代码编写.运行和调试.Cloud9对Node.js 和 JavaScript代码 ...

  9. filter, sort

    def is_odd(n): return n % 2 == 1 t = list(filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 0])) print(t) # ...

  10. YII框架实现排序

    YII框架实现排序 用YII2实现批量修改排序功能,如下图 控制器: /** * Lists all CollectionAlbum models. * @return mixed */ public ...