将数据库数据用Excel导出主要有3种方法

将数据库数据用Excel导出主要有3种方法

(2011-04-27 09:05:05)
转载
标签:

数据库

数据

用excel导出

主要有

3种方法

it

将数据库数据用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 = 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,而且速度也比较快。
具体代码:
/// <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 == 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――用HTML的Tabel标签:
这个具体我没试过实现,这里给个思路,将要导出的数据用<tabel>、<tr>、<td>这几个标签输出成HTML文件,然后把扩展名改为.xls就可以。

你可能感兴趣的:(职场,休闲)