数据库导出Excel的3种方法

发布时间:2012-03-07 22:00:01   来源:文档文库   
字号:

数据库数据用Excel导出的3种方法

分类: .Net 2008-06-30 11:07 192人阅读 评论(2) 收藏 举报

将数据库数据用Excel导出主要有3种方法:用Excel.Application接口、用OleDB、用HTMLTabel标签

方法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;

具体代码:

///

/// SQLServer中的数据导出到Excel(使用Excel类,在没装Office时无效)

///

/// 要导出的数据集

/// 输出到的文件目录

public static void SQLServerToExcel(DataSet ExelDt, string fileName)

{

int colIndex = 1, rowIndex = 1;

Excel.Application excel;

Workbook wBook;

Worksheet wSheet;

try

{

excel = new Excel.Application();

wBook = excel.Application.Workbooks.Add(true);

wSheet = wBook.Worksheets[1] as Worksheet;

//excel.Visible = true;

}

catch

{

Win32.MsgBox(0, "您可能没有安装Office,请安装再使用该功能", "", 0);

return;

}

try

{

foreach (DataColumn col in ExelDt.Tables[0].Columns)

{

wSheet.Cells[1, colIndex] = col.ColumnName; colIndex++;

}

foreach (DataRow row in ExelDt.Tables[0].Rows)

{

rowIndex++; colIndex = 0;

foreach (DataColumn col in ExelDt.Tables[0].Columns)

{

colIndex++;

if (colIndex == 1)

{

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(0, "输出Excel有错误,请确认没有关闭Excel", "", 0);

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,而且速度也比较快。

具体代码:

///

/// SQLServer中的数据导出到Excel(使用OleDB

///

/// 要导出的数据集

/// 输出到的文件目录

/// 信息

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 == 0)

{

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 = 0; i < cols; i++)

{

if (i < cols - 1)

{

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(0, sb.Length);

 

sb.Append("INSERT INTO ");

sb.Append(ExelDt.TableName + " ( ");

 

for (int i = 0; i < cols; i++)

{

if (i < cols - 1)

sb.Append(ExelDt.Columns[i].ColumnName + ",");

else

sb.Append(ExelDt.Columns[i].ColumnName + ") values (");

}

 

for (int i = 0; i < cols; i++)

{

if (i < cols - 1)

sb.Append("@" + ExelDt.Columns[i].ColumnName + ",");

else

sb.Append("@" + ExelDt.Columns[i].ColumnName + ")");

}

cmd.CommandText = sb.ToString();

OleDbParameterCollection param = cmd.Parameters;

 

for (int i = 0; i < cols; i++)

{

param.Add(new OleDbParameter("@" + ExelDt.Columns[i].ColumnName, OleDbType.VarChar));

}

 

//遍历DataTable将数据插入新建的Excel文件中

foreach (DataRow row in ExelDt.Rows)

{

for (int i = 0; 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——HTMLTabel标签:

这个具体我没试过实现,这里给个思路,将要导出的数据用这几个标签输出成HTML文件,然后把扩展名改为.xls就可以。

本文来源:https://www.2haoxitong.net/k/doc/790436c60c22590102029d0f.html

《数据库导出Excel的3种方法.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式