C 操作Excel的幾種方法

2022-03-30 19:02:51 字數 2428 閱讀 6478

(1) oledb: 用這種方法讀取excel速度還是非常的快的,但這種方式讀取資料的時候不太靈活,不過可以在 datatable 中對資料進行一些刪減修改

這種方式將excel作為乙個資料來源,直接用sql語句獲取資料了。所以讀取之前要知道此次要讀取的sheet(當然也可以用序號,類似dt.row[0][0]。這樣倒是不需要知道sheet)

if(filetype

==".xls")

connstr

="provider=microsoft.jet.oledb.4.0;"+"data

source="+

filename +";"+";extended

properties=\"excel 8.0;hdr=yes;imex=1\"";

else

connstr

="provider=microsoft.ace.oledb.12.0;"+"data

source="+

filename +";"+";extended

properties=\"excel 12.0;hdr=yes;imex=1\"";

oledbconnection

connnewoledbconnection(connstr);

datatable

dtsheetname = conn.getoledbschematable(oledbschemaguid.tables,newobject

);

以上是讀取excel的sheet名,xls和xlsx的連線字串也不一樣的,可以根據檔案的字尾來區別。這裡需要注意的一點,excel裡面只有乙個sheet,但通過這種方式讀取sheet可能會大於乙個。原因已經有人在別的**說過了,偷一下懶o(∩_∩)o,下面文段來自【cdwolfling】

【在使用過程中發現取出的sheet和實際excel不一致, 會多出不少。目前總結後有兩種情況:

1. 取出的名稱中,包括了xl命名管理器中的名稱(參見xl2007的公式--命名管理器, 快捷鍵crtl+f3);

2. 取出的名稱中,包括了filterdatabase字尾的, 這是xl用來記錄filter範圍的, 參見

對於第一點比較簡單, 刪除已有命名管理器中的內容即可;第二點處理起來比較麻煩, filter刪除後這些名稱依然保留著,簡單的做法是新增sheet然後將原sheet copy進去】

---------------------------------

但實際情況並不能為每個excel做以上檢查,【cdwolfling】也給出了過濾的方案,當時還是有點問題,本來補充了一點。總之先看**吧

for (int i = 0; i < dtsheetname.rows.count; i++)

因為讀取出來無效sheetname一般情況最後乙個字元都不會是$。如果sheetname有一些特殊符號,讀取出來的sheetname會自動加上單引號,比如在excel中將sheetname編輯成:mysheet(1),此時讀取出來的sheetname就為:'mysheet(1)$',所以判斷最後乙個字元是不是$之前最好過濾一下單引號。

優點:讀取方式簡單、讀取速度快

缺點:除了讀取過程不太靈活之外,這種讀取方式還有個弊端就是,當excel資料量很大時。會非常占用記憶體,當記憶體不夠時會丟擲記憶體溢位的異常。

不過一般情況下還是非常不錯的

讀取excel完整**:

+ view code

(2):com元件的方式讀取excel

這種方式需要先引用 microsoft.office.interop.excel 。首選說下這種方式的優缺點

優點:可以非常靈活的讀取excel中的資料

缺點:如果是web站點部署在iis上時,還需要伺服器機子已安裝了excel,有時候還需要為配置iis許可權。最重要的一點因為是基於單元格方式讀取的,所以資料很慢(曾做過試驗,直接讀取千行、200多列的檔案,直接讀取耗時15分鐘。即使採用多執行緒分段讀取來提高cpu的利用率也需要8分鐘。ps:cpu i3)

需要讀取大檔案的的童鞋們慎重。。。

附上單執行緒和多執行緒讀取類:

+ view code

使用ABAP操作Excel的幾種方法

在sapgui裡根據關鍵字ole搜尋,能找到通過abap操作excel的一種辦法 這段文件說的比較清楚,微軟的word和excel這種office應用,提供了一種所謂automation的介面,暴露的公有類的方法和屬性可以被其他應用消費。作為abap應用開發人員,我們通過呼叫ole物件的方法call...

詳解C 讀寫Excel的幾種方法

1 使用office自帶的庫 前提是本機須安裝office才能執行,且不同的office版本之間可能會有相容問題,從nuget microsoft.office.interop.excel 讀寫 如下 using microsoft.office.interop.excel using excel ...

匯出資料到Excel的幾種方法

1.首先宣告,這些方法也都是本人蒐集的資料,然後為已所用,程式中不足之處,還請高手指點.2.網上有好多關於用sql語句匯入匯出的例子,這裡不再重複寫了。方法1 呼叫com元件,匯出access資料到excel,就是直接呼叫access的匯出功能,此方法速度超級快 string filename d ...