C 與EXCEL的資料互動(一)

2021-04-21 22:52:52 字數 1495 閱讀 5982

首先說明,我不是程式設計師,也不是科班出身,只是因為工作中需要管理比較多的資料,而 資料又需要留存備查,公司也沒有符合要求的系統,於是萌發了開發乙個資料管理系統的想法。根據自身的愛好,在不需公司投入資金的情況下,選擇了vc# 2005 express作為開發工具,sql server 2005 express作為儲存資料庫。由於是在區域網環境下,使用人員也就是幾個人,系統就做成了c/s的。平常工作最常用的是excel來處理資料,包括資料 的預處理和列印等,與其他部門的聯絡也是使用excel,所以要求管理系統方便與excel互動,最重要的就是datatable (datagridview)與excel之間的匯入匯出,也因此開始研究c#2005如何操作excel。好,廢話少說,下面先說說資料從 datatable匯出到excel中,有不成熟的地方,請各位大俠指點。

本文假設大家已經熟悉c#對excel的呼叫,如果不熟悉,請參考msdn中的《使用excel物件模型實現excel自動化》

一、datatable to excel

先定義一下:

private

private

excel.worksheet excelsheet = (excel.worksheet)excelbook.activesheet;  

1、讓我們看看在網上流傳最多的解決方案:

public

void datatabletoexcel(datatable dt)

}
}
不可否認這段程式會不出錯誤的執行,但是效率就比較低了,會隨著資料行和列的增加而增加,主要的時間都耗在了excel單元格的讀取上。

讓我們改進一下,利用datarow

.itemarray:

public

void datatabletoexcel(datatable dt)

}

這就有了很大進步,效率與資料列的多少已經無關了,對於這個改進我在網上還沒有看到,為此我還曾沾沾自喜,但是這個方法的效率依然不高,尤其是靈活性不夠。

以上效率的損失主要是每匯出一條記錄都要與excel互動一次,如果我們把資料準備好一次性寫入excel是否效率更快?看如下程式:

public

void datatabletoexcel(datatable dt)

}excelsheet.get_range("a1", excelsheet.cells[rowcount, colcount]).value2 = dataarray; }

由於二維陣列是在記憶體中實現,所以速度很快,由於是一次性寫入到excel中,使我們幾乎感覺不到延遲,在excel開啟後資料馬上就出來了,感覺很爽。

另,在上述學習過程中,我曾想能否利用dt.rows[i]

.itemarray

來組建二維陣列,也就是多個相同結構的一維陣列簡單快速的合併成乙個二維陣列,當然不是利用for迴圈。由於我初學,還是個新手,我一直沒有找到相關資料,不知哪位大俠指點一下。

C 與EXCEL的資料互動(一)

c 與excel的資料互動 一 因為工作中需要管理比較多的資料,而資料又需要留存備查,公司也沒有符合要求的系統,於是萌發了開發乙個資料管理系統的想法。根據自身的愛好,在不需公司投入資金的情況下,選擇了vc 2005 express作為開發工具,sql server 2005 express作為儲存資...

C 與EXCEL的資料互動(一)

因為工作中需要管理比較多的資料,而資料又需要留存備查,公司也沒有符合要求的系統,於是萌發了開發乙個資料管理系統的想法。根據自身的愛好,在不需公司投入資金的情況下,選擇了vc 2005 express作為開發工具,sql server 2005 express作為儲存資料庫。由於是在區域網環境下,使用...

C 與EXCEL的資料互動(一)

首先說明,我不是程式設計師,也不是科班出身,只是因為工作中需要管理比較多的資料,而 資料又需要留存備查,公司也沒有符合要求的系統,於是萌發了開發乙個資料管理系統的想法。根據自身的愛好,在不需公司投入資金的情況下,選擇了vc 2005 express作為開發工具,sql server 2005 exp...