1
使用C#操作MS-Excel表格
2
3
最近用C#写了一个有限元的计算程序,其中涉及到大量数据的输入输出问题。由于其中数据不仅量大,而且数据项比较杂,使用一般的txt和dat文件操作起来比较麻烦,不直观,不便于手动修改,而且不数据文件页不具有通用性,于是想到使用界面友好的Excel电子表格来编写数据文件,通过查阅相关文档,尝试了一下,发现效果还不错。其使用方法如下:
4
5
1.添加引用
6
使用Visual Studio .net 添加两个COM组件:
7
Microsoft Excel 12.0 Object Library
8
Microsoft Office 12.0 Object Library
9
10
2.添加命名空间:
11
using Microsoft.Office.Interop.Excel ;
12
using Microsoft.Office.Core;
13
14
3.用到的一些基本对象和方法,属性:
15
//创建Excel应用程序对象
16
Application xlApp = new Application();
17
18
//获取工作簿集合
19
Workbooks xlWorkbooks = xlApp.Workbooks;
20
21
Workbook xlBook, xlResBook;
22
Worksheet xlSheet, xlResSheet;
23
//打开已有的数据文件
24
xlBook = ExcelTools.OpenWorkbook(xlWorkbooks, dataFileDir,true );
25
xlSheet = (Worksheet)xlBook.Sheets["sheet1"];
26
27
//新建一个工作簿
28
xlResBook = xlWorkbooks.Add(XlWBATemplate.xlWBATWorksheet);
29
xlResSheet =(Worksheet)xlResBook.Sheets["sheet1"];
30
31
//从Excel表格中读取数据值,其中ExcelTools为自己手动编写的Excel工具箱类,见后文
32
int number = ExcelTools.ReadInt(xlSheet, RowIndex, 4);
33
double x = ExcelTools.ReadDouble(xlSheet, RowIndex, 5);
34
35
//获取单元格(区域)对象
36
Range rng = xlResSheet.get_Range(xlResSheet.Cells[2, 1], xlResSheet.Cells[2, 3]);
37
rng.Merge(Type.Missing); //合并单元格
38
rng.Value2 = "节点位移";
39
rng.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
40
//为单元格赋值
41
ExcelTools.WriteToCell(xlResSheet, 3, 1, "节点编号");
42
ExcelTools.WriteToCell(xlResSheet, 3, 2, "x-Disp");
43
ExcelTools.WriteToCell(xlResSheet, 3, 3, "y-Disp");
44
45
rng.Columns.AutoFit(); //列宽自动调整
46
47
//清理应用程序对象
48
xlSheet = null;
49
ExcelTools.CloseWorkbook(xlBook, false);
50
xlBook = null;
51
xlResSheet = null;
52
ExcelTools.SaveWorkbookAs(xlResBook, currentDir+"\\ResultData");
53
ExcelTools.CloseWorkbook(xlResBook, true);
54
xlResBook = null;
55
xlApp.Quit(); //关闭Excel程序
56
xlApp = null;
57
Console.WriteLine("\n按任意键结束本程序,从ResultData.xls数据文件中察看计算结果。");
58
Console.ReadKey();
59
60
4.Excel工具类:
61
由于MS-Office对象模型是为VBA设计的,其中的很多方法要使用缺省参数,并且有些方法的缺省参数有十多个,而C#不支持缺省参数,只能使用System.Type.Missing来代替,当遇到那些缺省参数很多的方法时,代码写起来比较罗嗦。为简化这些方法的使用,最好是自己手动为一些常用方法编写自己的简化的包装方法:
62
63
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63