C#的Excel基本操作


由於項目的需要,從一開始接觸C#就在操作Excel。從網上查看的資料上,個人知道3種操作Excel數據庫的方法。

1、SQL操作數據庫。通過SQL語言操作Excel數據庫。之前一直用這個辦法。但是問題就是Excel版本不同,OleDbConnection使用的連接字符命令是不同的。為了保證通用性,其實項目中一直都在使用office2003的.xls格式。SQL語句常用的多看看就知道怎么用了。(有空整理下自己設計的一些函數吧。)

2、Excel對象庫的引用。移植性有問題,要是被移植的對象裝的office版本不一樣會有問題的。沒有細看。

3、采用第三方提供的動態鏈接庫。如NPOI,myexcel。這些動態鏈接庫可移植性強,沒有被移植對象的環境限制。雖然NPOI只適用於office2003版本的,但是這就足夠了,Excel僅僅是我們使用的數據庫罷了,移植程序的時候不出問題就好了,沒有其他要求。目前在用NPOI實現項目需要的一些基本內容:讀、寫。設計了三個函數。

另外,可以去看看大神寫的關於操作Excel的東東

http://www.yongfa365.com/item/DataGridViewToExcel.html

以下是我自己寫的操作函數,功能比較單一。。

讀函數,將指定位置、表名的數據存為二維數組返回。 

 

 1         /*
 2          * 本函數正常運行有一些必要的限制。必須從第一行開始連續有數據,而且每一行數據列數還是一樣的。
 3          * 不過沒問題,因為數據本來就是我們寫的,按此格式寫就好了。
 4          * **********************************************************************************
 5          * 如果要實現更通用的讀,就需要更多的判斷sheet.TopRow、sheet.LastRowNum、
 6          * sheet.PhysicalNumberOfRows聯合判斷對應row、cell是否null
 7          */
 8         public static void ReadExcel(string FilePath, string SheetName, out double[,] Matrix)
 9         {
10             using (FileStream file = File.OpenRead(FilePath))
11             {
12 
13                 NPOI.HSSF.UserModel.HSSFWorkbook wk = new NPOI.HSSF.UserModel.HSSFWorkbook(file);
14                 NPOI.SS.UserModel.ISheet sheet = wk.GetSheet(SheetName);
15                 if (sheet.PhysicalNumberOfRows != 0)
16                 {
17                     //由於sheet.PhysicalNumberOfRows的值會隨時的變動,故先存起來
18                     int RowNum = sheet.PhysicalNumberOfRows;
19                     NPOI.SS.UserModel.IRow row = sheet.GetRow(0);
20                     Matrix = new double[sheet.PhysicalNumberOfRows, row.LastCellNum];
21 
22                     for (int j = 0; j < RowNum; j++)
23                     {
24                         row = sheet.GetRow(j);
25                         for (int k = 0; k < row.LastCellNum; k++)
26                         {
27                             NPOI.SS.UserModel.ICell cell = row.GetCell(k);
28                             Matrix[j, k] = Convert.ToDouble(cell.ToString());
29                         }
30                     }
31                 }
32                 else
33                 {
34                     Matrix = null;
35                 }
36             }
37         }

 

 

 

 寫函數。將二維數組中的數據寫到指定目錄、表名的Excel中。寫之前先將原數據刪除了。

 1         /*
 2          * 先刪除表內的數據然后在寫入新的數據
 3          * * **********************************************************************************
 4          * 從第一行連續的寫入數據,每一行數據列數一樣。
 5          */
 6         public static void WriteExcel(string FilePath, string SheetName, double[,] Matrix)
 7         {
 8             using(FileStream file = File.OpenRead(FilePath))
 9             {
10                 NPOI.HSSF.UserModel.HSSFWorkbook workbook = new NPOI.HSSF.UserModel.HSSFWorkbook(file);
11                 NPOI.SS.UserModel.ISheet sheet =  workbook.GetSheet(SheetName);
12                 //由於sheet.PhysicalNumberOfRows的值會隨時的變動,故先存起來
13                 int RowNum = sheet.PhysicalNumberOfRows;
14                 for (int i = 0; i < RowNum; i++)
15                 {
16                     sheet.RemoveRow(sheet.GetRow(i));
17                 }
18 
19                 NPOI.SS.UserModel.IRow row;
20                 for (int j = 0; j < Matrix.GetLength(0); j++)
21                 {
22                     row = sheet.CreateRow(j);
23                     for (int k = 0; k < Matrix.GetLength(1); k++)
24                     {
25                         //如果用數字類型存,數字太小的會轉為科學計數法形式,這樣就讀的時候讀不出來。
26                         row.CreateCell(k).SetCellValue(Matrix[j, k].ToString());
27                     }
28                 }
29                 //寫之后,需要調用Write函數,才算成功。
30                 FileStream fileSave = File.OpenWrite(FilePath);
31                 workbook.Write(fileSave);
32                 fileSave.Close();
33             }
34         }

 將二維數組插入到指定表格的尾部。

 1         /*
 2          * 向Excel中添加數據。需保證Excel中的從第一條開始連續有數據。
 3          */
 4         public static void AppendExcel(string FilePath, string SheetName, double[,] Matrix)
 5         {
 6             using (FileStream file = File.OpenRead(FilePath))
 7             {
 8                 NPOI.HSSF.UserModel.HSSFWorkbook workbook = new NPOI.HSSF.UserModel.HSSFWorkbook(file);
 9 
10                 NPOI.SS.UserModel.ISheet sheet = workbook.GetSheet(SheetName);
11                 NPOI.SS.UserModel.IRow row;
12 
13                 for (int i = 0; i < Matrix.GetLength(0); i++)
14                 {
15                     row = sheet.CreateRow(sheet.PhysicalNumberOfRows);
16                     for (int j = 0; j < Matrix.GetLength(1); j++)
17                     {
18                         row.CreateCell(j).SetCellValue(Matrix[i, j].Tostring());
19                     }
20                 }
21 
22                 FileStream fileSave = File.OpenWrite(FilePath);
23                 workbook.Write(fileSave);
24                 fileSave.Close();
25             }
26         }

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM