C#操作Excel(创建、打开、读写、保存)

 在.NET开发中,不管是web程序还是桌面软件(尤其是涉及数据库操作的MIS系统等),常常需操作Excel,如读取Excel中数据到程序中,导出数据到Excel等。总结起来,其操作不外乎创建、打开、读写、保存(后退出/释放),而其操作方法,则主要有:通过ADO.NET数据连接方式、通过Excel对象模型“自动化”操作、使用中间数据格式如文本文件,XML等间接操作Excel、使用第三方控件(主要用于向Excel传输数据)等。
一.通过ADO.NET数据库连接方式

连接字符串:
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath +";Extended Properties=Excel 8.0;";

其中,filePath为要导入Excel的路径,可以自定义。

1.使用ADO.NET读取Excel中的数据填充到DataTable中,示例如下:

using System.Data.OleDb;
using System.Data;

 public static DataSet LoadDataFromExcel(string filePath)
{
   String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" +filePath+
 ";Extended Properties=Excel 8.0;";
   OleDbConnection objConn = new OleDbConnection(sConnectionString);
   objConn.Open();
   OleDbCommand objCmdSelect =new OleDbCommand("SELECT * FROM [sheet1]", objConn);
   OleDbDataAdapter objAdapter1 = new OleDbDataAdapter();
   objAdapter1.SelectCommand = objCmdSelect;
   DataSet objDataset1 = new DataSet();
   //将Excel中数据填充到数据集
   objAdapter1.Fill(objDataset1, "XLData");
   objConn.Close();

}

2.从DataTable中得到数据导入到Excel中

public static bool SaveDataTableToExcel(System.Data.DataTable excelTable, string filePath)
{
    Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.ApplicationClass();
    try
    {
       app.Visible = false;
       Workbook wBook = app.Workbooks.Add(true);
       Worksheet wSheet = wBook.Worksheets[1] as Worksheet;
       if (excelTable.Rows.Count > 0)
       {
            int row = excelTable.Rows.Count;
            int col = excelTable.Columns.Count;
            for (int i = 0; i < row; i++)
            {
                 for (int j = 0; j < col; j++)
                 {
                      wSheet.Cells[i + 2, j + 1] = excelTable.Rows[i][j].ToString();
                 }
            }
         }
         int size = excelTable.Columns.Count;
         //向Excel表中添加标题名称
         for (int i = 0; i < size; i++)
         {
              wSheet.Cells[1, 1 + i] = excelTable.Columns[i].ColumnName;
          }
          //设置禁止弹出保存和覆盖的询问提示框
          app.DisplayAlerts = false;
          app.AlertBeforeOverwriting = false;

          wBook.Save();
          app.Save(filePath);
          app.SaveWorkspace(filePath);
          app.Quit();
          app = null;
          return true;
    }
    catch (Exception e)
   {
       Console.WriteLine(e.Message);
       return false;
    }
   finally
   {

   }

}

直接使用ADO.NET向Excel表中添加数据

   String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
     "Data Source=d:/test.xls;" +
     "Extended Properties=Excel 8.0;";
   OleDbConnection cn = new OleDbConnection(sConnectionString);
   cn.Open();
   OleDbCommand cmd = cn.CreateCommand();
   cmd.CommandText="CREATE TABLE TestSheet ([ID] INTEGER,[Username] VarChar,[UserPwd] VarChar)";
   //创建TestSheet工作表,且若没有Excel文件这根据连接字符串中的路径,自动创建一个Excel文件
   cmd.ExecuteNonQuery();
   //添加数据
   cmd.CommandText = "INSERT INTO TestSheet VALUES(1,'elmer','password')";
   cmd.ExecuteNonQuery();
   cn.Close();

二.通过Excel对象模型的“自动化”操作


三.通过中间数据格式间接操作


四.使用第三方控件

 

posted @ 2012-04-11 13:49  百年一人  阅读(1059)  评论(0)    收藏  举报