C#操作Excel文件三種方式及連接字符串

轉自:http://www.cnblogs.com/JacobHuang/p/5663926.html

.Net平臺上對Excel進行操作主要有兩種方式。第一種,把Excel文件看成一個數據庫,通過OleDb的方式進行讀取與操作;第二種,調用Excel的COM組件。兩種方式各有特點。

注意一些簡單的問題1.excel文件只能存儲65535行數據,如果你的數據大於65535行,那麼就需要將excel分割存放了。2.關於亂碼,這主要是字符設置問題。


 

一、OleDb方式

  • 讀取Excel文件

複製代碼

 1 //加載Excel   
 2 public static DataSet LoadDataFromExcel(string filePath)  
 3 {  
 4     try  
 5     {  
 6         string strConn;  
 7         strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=False;IMEX=1'";  
 8         OleDbConnection OleConn = new OleDbConnection(strConn);  
 9         OleConn.Open();  
10         String sql = "SELECT * FROM  [Sheet1$]";//可是更改Sheet名稱,比如sheet2,等等   
11   
12         OleDbDataAdapter OleDaExcel = new OleDbDataAdapter(sql, OleConn);  
13         DataSet OleDsExcle = new DataSet();  
14         OleDaExcel.Fill(OleDsExcle, "Sheet1");  
15         OleConn.Close();  
16         return OleDsExcle;  
17     }  
18     catch (Exception err)  
19     {  
20         MessageBox.Show("數據綁定Excel失敗!失敗原因:" + err.Message, "提示信息",  
21             MessageBoxButtons.OK, MessageBoxIcon.Information);  
22         return null;  
23     }  
24 }  

複製代碼

訪問.xls的文件使用的是“Microsoft.Jet.OLEDB.4.0”,訪問.xlsx的文件使用的是“Microsoft.Ace.OleDb.12.0”

  • 寫入excel文件

複製代碼

 1 /// <summary>
 2 /// 寫入Excel文檔
 3 /// </summary>
 4 public bool SaveFP2toExcel(string filePathath)
 5 {
 6     try
 7     {
 8         string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+ filePathath +";Extended Properties=Excel 8.0;";
 9         OleDbConnection conn = new OleDbConnection(strConn);
10         conn.Open();  
11         System.Data.OleDb.OleDbCommand cmd=new OleDbCommand ();
12         cmd.Connection =conn;
13 
14         for(int i=0;i<fp2.Sheets [0].RowCount -1;i++)
15         {
16             if(fp2.Sheets [0].Cells[i,0].Text!="")
17             {
18                 cmd.CommandText ="INSERT INTO [sheet1$] (工號,姓名,部門,職務,日期,時間) VALUES('"+fp2.Sheets [0].Cells[i,0].Text+ "','"+
19                 fp2.Sheets [0].Cells[i,1].Text+"','"+fp2.Sheets [0].Cells[i,2].Text+"','"+fp2.Sheets [0].Cells[i,3].Text+
20                 "','"+fp2.Sheets [0].Cells[i,4].Text+"','"+fp2.Sheets [0].Cells[i,5].Text+"')";
21                 cmd.ExecuteNonQuery ();
22             }
23         }
24         
25         conn.Close ();
26         return true;
27     }
28     catch(System.Data.OleDb.OleDbException ex)
29     {
30         Console.WriteLine ("寫入Excel發生錯誤:"+ex.Message );
31         return false;
32     }
33 }

複製代碼

 


 

二、Excel COM組件

一個.NET組件事實上是一個.NET下的DLL,它包含的不僅是運行程序本身,更重要的是包含這個DLL的描述信息(Meta Data,即元數據),而一個COM組件是用其類庫(TLB)儲存其描述信息。這些COM組件都是非受管代碼,要在Visual C#中使用這些非受管代碼的COM組件,就必須把他們轉換成受管代碼的.NET組件。所以在用Visual C#調用Excel表格之前,必須完成從COM組件的非受管代碼到受管代碼的類庫的轉換。

添加COM組件

Create an Automation Client for Microsoft Excel

    1. Start Microsoft Visual Studio .NET.
    2. On the File menu, click New, and then click Project. Select Windows Application from the Visual C# Project types. Form1 is created by default.
    3. Add a reference to the Microsoft Excel Object Library. To do this, follow these steps:
      1. On the Project menu, click Add Reference.
      2. On the COM tab, locate Microsoft Excel Object Library, and click Select.
      3. Click OK in the Add References dialog box to accept your selections. If you are prompted to generate wrappers for the libraries that you selected, click Yes.
      4. using Excel = Microsoft.Office.Interop.Excel;
  •  讀取Excel文件

複製代碼

 1 private void button1_Click(object sender, EventArgs e)
 2 {
 3     Excel.Application xlApp ;
 4     Excel.Workbook xlWorkBook ;
 5     Excel.Worksheet xlWorkSheet ;
 6     Excel.Range range ;
 7 
 8     string str;
 9     int rCnt = 0;
10     int cCnt = 0;
11 
12     xlApp = new Excel.Application();
13     xlWorkBook = xlApp.Workbooks.Open("csharp.net-informations.xls");
14     xlWorkSheet = xlWorkBook.Sheets["Sheet1"];
15 
16     range = xlWorkSheet.UsedRange;
17 
18     for (rCnt = 1; rCnt <= range.Rows.Count; rCnt++)
19     {
20         for (cCnt = 1; cCnt <= range.Columns.Count; cCnt++)
21         {
22             str = (string)(range.Cells[rCnt, cCnt] as Excel.Range).Value2 ;
23             MessageBox.Show(str);
24         }
25     }
26 
27     xlWorkBook.Close(true, null, null);
28     xlApp.Quit();
29 }

複製代碼

  • 寫入Excel文件

複製代碼

 1 private void button1_Click(object sender, EventArgs e)
 2 {
 3     Excel.Application xlApp ;
 4     Excel.Workbook xlWorkBook ;
 5     Excel.Worksheet xlWorkSheet ;
 6     object misValue = System.Reflection.Missing.Value;
 7 
 8     xlApp = new Excel.Application();
 9     xlWorkBook = xlApp.Workbooks.Add(misValue);
10     xlWorkSheet = xlWorkBook.Sheets["Sheet1"];
11 
12     //add some text 
13     xlWorkSheet.Cells[1, 1] = "http://csharp.net-informations.com";
14     xlWorkSheet.Cells[2, 1] = "Adding picture in Excel File";
15 
16     xlWorkBook.SaveAs("csharp.net-informations.xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
17     xlWorkBook.Close(true, misValue, misValue);
18     xlApp.Quit();
19 
20     MessageBox.Show ("File created !");
21 }

複製代碼

 

主要參考:http://csharp.net-informations.com/excel/files/download/csharp-open-excel_download.htm


三、第三方插件-NPOI

摘要: NPOI,顧名思義,就是POI的.NET版本。那POI又是什麼呢?POI是一套用Java寫成的庫,能夠幫助開發者在沒有安裝微軟Office的情況下讀寫Office 97-2003的文件,支持的文件格式包括xls, doc, ppt等。在本文發佈時,NPOI的最新版本是2.2.1。 

 

NPOI網址  http://npoi.codeplex.com/

C#連接Excel的連接字符串

在c#項目中導入Excel數據的時候,需要連接Excel的各個版本已滿足需求,不得不做Excel各個版本的處理。

string fileExt = Path.GetExtension(excelPath); 
string conn = ""; 
if (fileExt == ".xls") 
{ 
    conn = "Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source =" + excelPath + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'"; 
} 
else 
{ 
    conn = "Provider = Microsoft.ACE.OLEDB.12.0 ; Data Source =" + excelPath + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1'"; 
} 

03和07及以上版本的引擎不同,03是Microsoft.Jet.OLEDB.4.0 ,07及以上是Microsoft.ACE.OLEDB.12.0 。
還發現一個小差別就是Microsoft.Jet.OLEDB.4.0引擎的Excel文檔行索引從1開始,而Microsoft.ACE.OLEDB.12.0 的行索引從0開始。
 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章