C#讀寫EXCEL

一.程序設計及運行環境  
   
     (1).微軟視窗2000   服務器版  
     (2)..Net   Framework   SDK   Beta   2  
     (3).Microsoft   Data   Access   Component   2.6以上版本(MDAC2.6)  
     (4).Office   2000套件    
    二.Visual   C#讀取Excel表格中的數據:  
    本節將通過一個程序來介紹Visual   C#讀取Excel表格中的數據,並把數據以DataGrid的形式顯示出來。  
   
    (1).如何讀取數據:  
   
    其實讀取Excel表格中的數據和讀取數據庫中的數據是非常類似的,因爲在某種程度上Excel表格可以看成是一張一張的數據表。其二者的主要區別在於所使用的數據引擎不一樣。在本文的程序中,通過下列代碼實現讀取Excel表格數據,具體如下:  
   
   
  //創建一個數據鏈接  
  string   strCon   =   "   Provider   =   Microsoft.Jet.OLEDB.4.0   ;   Data   Source   =   c://sample.xls;Extended   Properties=Excel   8.0"   ;  
  OleDbConnection   myConn   =   new   OleDbConnection   (   strCon   )   ;  
  string   strCom   =   "   SELECT   *   FROM   [Sheet1$]   "   ;  
  myConn.Open   (   )   ;  
  file://打開數據鏈接,得到一個數據集  
  OleDbDataAdapter   myCommand   =   new   OleDbDataAdapter   (   strCom   ,   myConn   )   ;  
  file://創建一個   DataSet對象  
  myDataSet   =   new   DataSet   (   )   ;  
  file://得到自己的DataSet對象  
  myCommand.Fill   (   myDataSet   ,   "[Sheet1$]"   )   ;  
  file://關閉此數據鏈接  
  myConn.Close   (   )   ;    
   
   
    怎麼樣讀取Excel表格中的數據其實和讀取數據庫中的數據沒有什麼實質上的區別。  
   
    註釋:這裏讀取的是C盤根目錄下的"Sample.xls"文件。  
   
    (2).用DataGrid來顯示得到的數據集:  
   
    在得到DataSet對象後,只需要通過下列二行代碼,就可以把數據集用DataGrid顯示出來了:  
   
   
  DataGrid1.DataMember=   "[Sheet1$]"   ;  
  DataGrid1.DataSource   =   myDataSet   ;    
   
    (3).用Visual   C#讀取Excel表格,並用DataGrid顯示出來的程序代碼(Read.cs)和程序運行的界面:  
   
    掌握了上面二點,水到渠成就可以得到以下代碼:  
   
   
  using   System   ;  
  using   System.Drawing   ;  
  using   System.Collections   ;  
  using   System.ComponentModel   ;  
  using   System.Windows.Forms   ;  
  using   System.Data   ;  
  using   System.Data.OleDb   ;  
  public   class   Form1   :   Form  
  {  
  private   Button   button1   ;  
  private   System.Data.DataSet   myDataSet   ;  
  private   DataGrid   DataGrid1   ;  
  private   System.ComponentModel.Container   components   =   null   ;  
   
  public   Form1   (   )  
  {  
  file://初始化窗體中的各個組件  
  InitializeComponent   (   )   ;  
  file://打開數據鏈接,得到數據集  
  GetConnect   (   )   ;  
  }  
  file://清除程序中使用過的資源  
  protected   override   void   Dispose   (   bool   disposing   )  
  {  
  if   (   disposing   )  
  {  
  if   (   components   !=   null   )    
  {  
  components.Dispose   (   )   ;  
  }  
  }  
  base.Dispose   (   disposing   )   ;  
  }  
   
  private   void   GetConnect   (   )  
  {  
  file://創建一個數據鏈接  
  string   strCon   =   "   Provider   =   Microsoft.Jet.OLEDB.4.0   ;   Data   Source   =   c://sample.xls;Extended   Properties=Excel   8.0"   ;  
  OleDbConnection   myConn   =   new   OleDbConnection   (   strCon   )   ;  
  string   strCom   =   "   SELECT   *   FROM   [Sheet1$]   "   ;  
  myConn.Open   (   )   ;  
  file://打開數據鏈接,得到一個數據集  
  OleDbDataAdapter   myCommand   =   new   OleDbDataAdapter   (   strCom   ,   myConn   )   ;  
  file://創建一個   DataSet對象  
  myDataSet   =   new   DataSet   (   )   ;  
  file://得到自己的DataSet對象  
  myCommand.Fill   (   myDataSet   ,   "[Sheet1$]"   )   ;  
  file://關閉此數據鏈接  
  myConn.Close   (   )   ;  
  }  
  private   void   InitializeComponent   (   )  
  {  
  DataGrid1   =   new   DataGrid   (   )   ;  
  button1   =   new   Button   (   )   ;  
  SuspendLayout   (   )   ;  
  DataGrid1.Name   =   "DataGrid1";  
  DataGrid1.Size   =   new   System.Drawing.Size   (   400   ,   200   )   ;  
   
  button1.Location   =   new   System.Drawing.Point   (   124   ,   240   )   ;  
  button1.Name   =   "button1"   ;  
  button1.TabIndex   =   1   ;  
  button1.Text   =   "讀取數據"   ;  
  button1.Size   =   new   System.Drawing.Size   (84   ,   24   )   ;  
  button1.Click   +=   new   System.EventHandler   (   this.button1_Click   )   ;  
   
  this.AutoScaleBaseSize   =   new   System.Drawing.Size   (   6   ,   14   )   ;  
  this.ClientSize   =   new   System.Drawing.Size   (   400   ,   280   )   ;  
  this.Controls.Add   (   button1   )   ;  
  this.Controls.Add   (   DataGrid1   )   ;  
  this.Name   =   "Form1"   ;  
  this.Text   =   "讀取Excle表格中的數據,並用DataGrid顯示出來!"   ;  
  this.ResumeLayout   (   false   )   ;  
   
  }  
  private   void   button1_Click   (   object   sender   ,   System.EventArgs   e   )  
  {  
  DataGrid1.DataMember=   "[Sheet1$]"   ;  
  DataGrid1.DataSource   =   myDataSet   ;  
   
  }  
  static   void   Main   (   )    
  {  
  Application.Run   (   new   Form1   (   )   )   ;  
  }  
  }  
   
   
   
    下圖是程序編譯後,運行結果:  
  http://www.yesky.com/20020313/jt-2002-3-13-image001.jpg  
   
  圖01:用Visual   C#讀取"c:/sample.xls"的運行界面  
    (4).總結:  
   
    以上只是讀取了Excel表格中"Sheet1"中的數據,對於其他"Sheet"中的內容,可以參照讀取"Sheet1"中的程序,只作一點修改就可以了,譬如要讀取"Sheet2"中的內容,只需要把"Read.cs"程序中的"Sheet1$"改成"Sheet2$"就可以了。  
   
    三.Visual   C#調用Excel表格,並在Excel表格中存儲數據:  
   
    在Visual   C#中調用Excel表格,並不像讀取Excel表格中的數據那麼容易了,因爲在Visual   C#中調用Excel表格要使用到Excel的COM組件。如果你安裝Office套件在"C"盤,那麼在"C:/Program   Files/Microsoft   Office/Office"可以找到這個COM組件"EXCEL9.OLB",在《Visual   C#如何使用Active   X組件》一文中,這些COM組件都是非受管代碼的,要在Visual   C#中使用這些非受管代碼的COM組件,就必須把他們轉換成受管代碼的類庫。所以在用Visual   C#調用Excel表格之前,必須完成從COM組件的非受管代碼到受管代碼的類庫的轉換。  
   
    (1).非受管代碼COM組件轉換成受管代碼的類庫:  
   
    首先把COM組件"EXCEL9.OLB"拷貝到C盤的根目錄下,然後輸入下列命令:  
   
   
  tlbimp   excel9.olb    
   
    這樣在C盤的根目錄下面就產生了三個DLL文件:"Excel.dll"、"Office.dll"、"VBIDE.dll"。在產生了上面的三個文件後,這種轉換就成功完成了。在下面的程序中,就可以利用這轉換好的三個類庫編寫和Excel表格相關的各種操作了。  
       
  (2).Visual   C#打開Excel表格:  
   
    在"Excel.dll"中定義了一個命名空間"Excel",在差命名空間中封裝了一個類"Application",這個類和啓動Excel表格有非常重要的關係,在Visual   C#中,只需要下列三行代碼就可以完成打開Excel表格的工作,具體如下:  
   
   
  Excel.Application   excel   =   new   Excel.Application   (   )   ;  
  excel.Application.Workbooks.Add   (   true   )   ;  
   
  excel.Visible   =   true   ;    
   
    但此時的Excel表格是一個空的表格,沒有任何內容,下面就來介紹如何往Excel表格中輸入數據。  
   
    (3).往Excel表格中輸入數據:  
   
    在命名空間"Excel"中,還定義了一個類"Cell",這個類所代表的就是Excel表格中的一個下單元。通過給差"Cell"賦值,從而實現往Excel表格中輸入相應的數據,下列代碼功能是打開Excel表格,並且往表格輸入一些數據。  
   
   
  Excel.Application   excel   =   new   Excel.Application   (   )   ;  
  excel.Application.Workbooks.Add   (   true   )   ;  
  excel.Cells[   1   ,   1   ]   =   "第一行第一列"   ;    
  excel.Cells[   1   ,   2   ]   =   "第一行第二列"   ;    
  excel.Cells[   2   ,   1   ]   =   "第二行第一列"   ;    
  excel.Cells[   2   ,   2   ]   =   "第二行第二列"   ;    
  excel.Cells[   3   ,   1   ]   =   "第三行第一列"   ;    
  excel.Cells[   3   ,   2   ]   =   "第三行第二列"   ;    
  excel.Visible   =   true   ;    
   
    (4).   Visual   C#調用Excel表格,並在Excel表格中存儲數據的程序代碼(Excel.cs):  
   
    瞭解了上面的這些知識,得到完成上述功能的程序代碼就顯得比較容易了,具體如下:  

 

using   System   ;  
  using   System.Drawing   ;  
  using   System.Collections   ;  
  using   System.ComponentModel   ;  
  using   System.Windows.Forms   ;  
  using   System.Data   ;  
  using   System.Data.SqlClient   ;  
  public   class   Form1   :   Form  
  {  
  private   Button   button1   ;  
  private   System.ComponentModel.Container   components   =   null   ;  
  public   Form1   (   )  
  {  
  file://初始化窗體中的各個組件  
  InitializeComponent   (   )   ;  
  }  
  file://清除程序中使用的各個資源  
  protected   override   void   Dispose   (   bool   disposing   )  
  {  
  if   (   disposing   )  
  {  
  if   (   components   !=   null   )    
  {  
  components.Dispose   (   )   ;  
  }  
  }  
  base.Dispose(   disposing   )   ;  
  }  
  private   void   InitializeComponent   (   )  
  {  
  button1   =   new   Button   (   )   ;  
  SuspendLayout   (   )   ;  
  button1.Location   =   new   System.Drawing.Point   (   32   ,   72   )   ;  
  button1.Name   =   "button1"   ;  
  button1.Size   =   new   System.Drawing.Size   (   100   ,   30   )   ;  
  button1.TabIndex   =   0   ;  
  button1.Text   =   "調用Excel文件!"   ;  
  button1.Click   +=   new   System.EventHandler   (   button1_Click   )   ;  
   
  AutoScaleBaseSize   =   new   System.Drawing.Size   (   5   ,   13   )   ;  
   
  this.ClientSize   =   new   System.Drawing.Size   (   292   ,   273   )   ;  
  this.Controls.Add   (   button1   )   ;  
  this.Name   =   "Form1"   ;  
  this.Text   =   "如何用Visual   C#調用Excel表格!"   ;  
  this.ResumeLayout   (   false   )   ;  
   
  }  
  static   void   Main   (   )    
  {  
  Application.Run   (   new   Form1   (   )   )   ;  
  }  
  private   void   button1_Click   (   object   sender   ,   System.EventArgs   e   )  
  {  
  Excel.Application   excel   =   new   Excel.Application   (   )   ;  
  excel.Application.Workbooks.Add   (   true   )   ;  
  excel.Cells[   1   ,   1   ]   =   "第一行第一列"   ;    
  excel.Cells[   1   ,   2   ]   =   "第一行第二列"   ;    
  excel.Cells[   2   ,   1   ]   =   "第二行第一列"   ;    
  excel.Cells[   2   ,   2   ]   =   "第二行第二列"   ;    
  excel.Cells[   3   ,   1   ]   =   "第三行第一列"   ;    
  excel.Cells[   3   ,   2   ]   =   "第三行第二列"   ;    
  excel.Visible   =   true   ;    
  }  
  }  
   
   
    (5).編譯源程序和程序運行界面:  
   
    在經過了下列命令編譯後:  
   
   
  Csc.exe   /r:system.dll   /r:system.windows.forms.dll   /r:system.drawing.dll   /r:excel.dll   /r:office.dll   /r:vbide.dll   excel.cs    
   
    就可以得到"Excel.exe",運行後界面如下  
   
  http://www.yesky.com/20020313/jt-2002-3-13-image003.jpg  
  圖02:Visual   C#調用Excel表格,並存儲數據的程序運行界面    
   
    四.Visual   C#處理Office套件中的其他成員程序:  
   
    本文雖然只介紹了Visual   C#在處理Excel表格中經常遇到的一些問題的解決方法,但其實對Office套件的其他成員也有很強的借鑑意義,譬如Visual   C#來處理Word文檔,在調用Word文檔的時候,必須先完成COM組件從非受管代碼到受管代碼的轉換,Word的COM組件位"MSWORD9.OLB",經過轉換後也會產生三個DLL文件,但分別是"Word.dll"、"Office.dll"、"VBIDE.dll"。其實在Visual   C#中調用Word,也非常容易。只需要把調用Excel表格中的代碼換成調用Word的代碼就可以了,具體如下:  
   
   
  Word.Application   word   =   new   Word.Application   (   )   ;  
  word.Application.Visible   =   true   ;    
   
    不信你試一下,看看是否達到你的要求。對於針對Word的其他的操作,總體來說和對Excel表格的操作相類似。由於針對Word只是一個文檔,程序對Word進行的操作是比較少的,所以就不一一介紹了。  
   
    五.總結:  
   
    本文介紹Visual   C#來處理Excel表格的幾種最常遇到的情況,雖然針對的只是Excel表格,但對其他Office套件中的成員也具有十分的借鑑意義。 

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