国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

C# Operate Excel File

2024-07-21 02:27:01
字體:
來源:轉載
供稿:網友
  • 網站運營seo文章大全
  • 提供全面的站長運營經驗及seo技術!
  • 引言

    excel是微軟公司辦公自動化套件中的一個軟件,他主要是用來處理電子表格。excel以其功能強大,界面友好等受到了許多用戶的歡迎。在設計應用系 統時,對于不同的用戶,他們對于打印的需求是不一樣的,如果要使得程序中的打印功能適用于每一個用戶,可以想象程序設計是十分復雜的。由于excel表格 的功能強大,又由于幾乎每一臺機器都安裝了它,如果把程序處理的結果放到excel表格中,這樣每一個用戶就可以根據自己的需要在excel中定制自己的 打印。這樣不僅使得程序設計簡單,而且又滿足了諸多用戶的要求,更加實用了。那么用visual c#如何調用excel,如何又把數據存放到excel表格中?本文就來探討上述問題的解決辦法。

      excel對象

      微軟的excel對象模型包括了128個不同的對象,從矩形,文本框等簡單的對象到透視表,圖表等復雜的對象.下面我們簡單介紹一下其中最重要,也是用得最多的四個對象。

      (1) application對象。application對象處于excel對象層次結構的頂層,表示excel自身的運行環境。

      (2) workbook對象。workbook對象直接地處于application對象的下層,表示一個excel工作薄文件。

      (3) worksheet對象。worksheet對象包含于workbook對象,表示一個excel工作表。

      (4) range對象。range對象包含于worksheet對象,表示excel工作表中的一個或多個單元格。
    c#中的受管代碼和非受管代碼

      在.net公用語言框架內運行的程序為受管代碼。受管代碼在程序中所有類型都受到嚴格檢查,沒有指針,對內存的管理完全由運行系統控制。
    受 控狀態下,編寫程序更為容易,且更少出錯,我們可以花更多的時間在解決實際問題上而不是在計算機語言問題上。相對而言,那些在.net框架外運行的程序為 非受管代碼。比如:com組件、activex組件、win32 api函數、指針運算等。c#編程中在某些特定情況下,需要運用非受管代碼,例如,要利用一個成熟的com組件,或者調用一個api函數,或者用指針去編 寫實時/高效程序等。

      visual c#中調用excel的com組件

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

      1、將excel的com組件轉換為.net組件

      在項目中打開add reference對話框,選擇com欄,之后在com列表中找到"microsoft excel 9.0 object library"(office 2000),然后將其加入到項目的references中即可。visual c#.net會自動產生相應的.net組件文件,以后即可正常使用。

      這個轉換形成.net組件不能單獨使用,它不過是以前的com組件的一個外層包裝,在.net中可以通過這個外層包裝去發現原來的com組件并調用其相應的界面函數。所以它必須與原來的com組件一起起作用。

      2、visual c#打開excel表格

      事實上,在c#中使用一個經轉換的com組件和使用任何一個其它.net組件完全一樣。可以用new關鍵字創建一個經轉換的com組件,然后再像使用任何一個其它c#對象一樣使用這個組件對象。

      在轉換后的.net組件中定義了一個命名空間excel,在此命名空間中封裝了一個類application,這個類和啟動excel表格有非常重要的關系,在visual c#中,只需要下列三行代碼就可以完成打開excel表格的工作,具體如下:

    excel.application excel = new excel.application ();//引用excel對象
    excel.application.workbooks.add ( true );//引用excel工作簿
    excel.visible = true ;//使excel可視

      但此時的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 ] = "first row first column" ;
    excel.cells[ 1 , 2 ] = "first row second column" ;
    excel.cells[ 2 , 1 ] = "second row first column" ;
    excel.cells[ 2 , 2 ] = "second row second column" ;
    excel.visible = true ;

    4、實例

      下面實例在c#中連接oracle數據庫(name),從表(tablename)中讀取數據,并寫入excel。

    string cnstring="provider=msdaora.1;data source=name; ";
    cnstring=cnstring+"user id=username;password=password";
    try
    {
     oledbconnection cn=new oledbconnection (cnstring);
     cn.open ();
     try
     {
      string s="select * from name.tablename";
      oledbcommand cmd=new oledbcommand (s,cn);
      oledbdatareader dr=cmd.executereader ();
      excel.application xlapp = new excel.application();
      if(xlapp==null){messagebox.show ("can't open excel!");return;}
      xlapp.application .workbooks .add (true);
      int row=2,fieldcount;
      fieldcount=dr.fieldcount ;
      for(int col=0;col<fieldcount;col++) xlapp.cells [1,col+1]=dr.getname(col);
      while (dr.read ())
      {
       for(int col=0;col<fieldcount;col++)
        xlapp.cells [row,col+1]=dr.getvalue(col).tostring();
        row++;
      }
      xlapp.visible =true;
      xlapp=null;
     }
     catch(exception ex ){messagebox.show (ex.message );}
     finally {cn.close();}
    }
    catch(exception ex){messagebox.show (ex.message );}
    }
    }

      5、安裝一個使用com組件的.net程序

      如果要將這樣的程序安裝運行在另一臺機器上,那么除了安裝運行程序外,還做三件事。

      首先,是安裝.net運行系統。因為任何一個.net程序都不能離開.net運行系統去獨立運行。

      其次,所調用的com組件必須要安裝在目標機器上。本例中大多數目標機器上都裝有microsoft office的excel,一般不會有這個問題。但如果是另一個用戶自定義的com組件,那么這個com組件在運行.net程序之前必須先安裝好。

       最后,轉換后的.net組件dll文件要安裝在目標機器上。因為.net組件不需要在windows registry中注冊,所以最簡單的方法是將.net組件dll文件拷貝到運行程序目錄下。如果此.net組件被多個.net程序共享,可以將其安裝 在.net公用組件區中,從而可被任何一個.net組件使用。只有當一個.net組件參與了事務處理時,才需要將它注冊為一個com+組件。因為.net 仍然用傳統的com+機制來處理事務的提交、回滾等。

      小結

      通過以上討論,我們知道了在c#中,如何使用excel的com組件。需要注意的是,excel對象包含的許多內容我們沒有介紹,在使用過程中需要我們不斷學習。也使我們了解了在c#中如何使用com組件。

     
    發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 四子王旗| 德庆县| 靖边县| 三河市| 鹤山市| 专栏| 武汉市| 时尚| 通化市| 怀宁县| 乐安县| 湘潭市| 安平县| 赣榆县| 塘沽区| 象州县| 上思县| 精河县| 庄河市| 曲靖市| 崇明县| 湾仔区| 鹰潭市| 云浮市| 巴彦县| 五寨县| 桂林市| 府谷县| 内丘县| 启东市| 高青县| 屏南县| 乌拉特前旗| 茶陵县| 普兰店市| 兴文县| 新竹县| 教育| 教育| 邛崃市| 施秉县|