Research and Implementation of Excel Importing Technology Based on C#
WANG Sen
(Department of Computer Science, Tianjin University of Technology Zhonghuan College of Information, Tianjin 300380, China)
Abstract: With the popularity of paperless office, Excel files are widely used in the modern office environment. There is great demand in importing excel data to the program. This paper introduces the principle of importing COM component and implements in Visual C#, which laid a good foundation of further data processing. Therefore, it is very practical.
Key words: C#;Excel;importing
1 概述
Excel以其功能强大,界面友好等受到了许多用户的欢迎。在办公的时候,正是由于Excel的这么多的优点,许多重要的数据,往往以Excel电子表格的形式存储起来[1]。这样就给程序员带来了一个问题,虽然Excel功能比较强大,但毕竟不是数据库,如何把Excel中的数据读取到程序以便进一步的加工和处理,就是本文要进一步探讨的问题。
2 基本原理
2.1 程序设计前期准备
1)安装Office程序集。
在本系统开发中,由于要对Word文档对象进行编程,所以必须运用Office的程序集,它属于office 2003的可选组件,如有office 2003安装程序或者光盘,可再次运行安装程序,选择“添加或删除组件”,在应用程序的安装列表中展开Microsoft Office Excel节点,并选择安装“.Net Programmability Support(.Net可编程支持)”项目,这是在.Net上实现对Excel文档操作的基本环节。
2)制作Excel模板。
为确保导入成功和导入的数据完整、准确,一般都会规定Excel表格数据的填写格式和必填栏目,并制作为Excel 模板让用户填写。这样可以按照定义好的格式来导入Excel 中的数据。
3)开发语言选择。
由于需要操作的是Excel文档,于是我们选择了C#作为开发语言。在Visual Studio环境下的C#的可视化开发非常的迅速,便捷且相关文献充足,使得开发过程更加顺畅[2-3]。
2.2 COM组件操作Excel原理
一般来说,Excel的操作方法有两种:把Excel文档作为数据源和调用COM组件操作Excel[4]。在Visual C#中可以直接以数据源的方式操作Excel,具体的操作方法和操作数据库类似,很多文章对于这个问题有比较多的研究,这里就不详细讨论了。调用COM组件操作Excel的核心是使用Office 2003程序集中的命名空间Excel,在这个命名空间中定义了四个类:
1) Application类。Application类处于Excel对象层次结构的顶层,表示Excel自身的运行环境。
2) Workbook类。Workbook类直接地处于Application类的下层,表示一个Excel工作薄文件。
3) Worksheet类。Worksheet类包含于Workbook类,表示一个Excel工作表。
4) Range类。Range类包含于Worksheet类,表示Excel工作表中的一个或多个单元格。
3 功能实现
3.1 实现
任何操作Excel的动作首先肯定要用Excel应用程序,因此要new一个Applications实例,即Microsoft.Office.Interop.Excel.ApplicationClass app=new ApplicationClass(),并在最后将此实例释放。然后使用app.Workbooks对象的open方法打开相应的Excel文件,访问相应的工作表得到工作表的行数与列数,并把数据读取到程序中以便做进一步的处理。其数据导入的流程图如图1所示。
3.2 部分核心代码
ApplicationClass app=new ApplicationClass();
app.Visible = false;
WorkbookClass w = (WorkbookClass)app.Workbooks.Open(@"E:\模板.xls", missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);
Sheets sheets = w.Worksheets;
foreach (Worksheet sheet in sheets)
{if (sheet.Name.Equals("1")){
//得到Excel文件中工作表1的行数与列数
rowcount =sheet.UsedRange.CurrentRegion.Rows.Count;
colcount = sheet.UsedRange.CurrentRegion.Columns.Count;
//获得Excel工作表中的单元格区域
range=sheet.get_Range(sheet.Cells[2,1],sheet.Cells[rowcount, colcount]);
System.Array value = (System.Array)range.Formula;
len1 = value.GetLength(0);
len2 = value.GetLength(1);
dataGridView1.ColumnCount = len2;
for (j = 1; j <= len2; j++)
{dataGridView1.Columns[j-1].Name=value.GetValue(1,j).ToString();
}}
按照上述的方法设计的Excel数据导入模块在Visual C# 2005中经β测试通过,具体效果如图2所示。
4 结束语
本文是在C#下使用了COM组件完成了Excel文件的导入,虽然COM组件在结构上和.Net Framework SDK存在很大的不同,但是利用COM组件可以很容易的实现Excel数据的导入。另外,由于现代化的办公环境中Excel文件的广泛使用,对于Excel的数据导入进行统一处理具有很大的需求,因此具有很强的实用性。
参考文献:
[1] 刘万军.利用ASP.NET操作Excel文档[J].电脑知识与技术,2009(5).
[2] 杨晓强.Visual C#.NET程序设计[M].北京:清华大学出版社,2006.
[3] Libery J,Macdonald B.C#3.0学习指南[M].北京:人民邮电出版社,2010.
[4] 黄伟.基于C#的Word文档自动生成技术的研究与应用[J].南通职业大学学报,2008,22(2):11-16.