刘超
(南充广播电视大学,四川 南充 637000)
基于C#语言直接读取大量表格文件实践操作的探讨
刘超
(南充广播电视大学,四川 南充 637000)
本文讨论了如何对大量结构相似的excel文件进行同时读写,并转为另一种格式的常用方法.详细的探讨了如何使用com组件来对excel进行读写,避开文件中的隐藏行列,所见即所得,从而保证工作中的数据得到较好的保存与转换.
c#;Excel;读取;转换
很多企事业机构的日常工作中,由于各种企业应用系统无法完全覆盖所有功能需要,或新老系统不同步,出现大量相同格式的表格重复出现,对这类表格中的数据进行收集整理时,常常会遇到很多困难,比如不是标准格式无法导入数据库,或者无法与其他的数据表格进行比对等等,严重降低了工作效率.这个问题的解决最好通过某种简便的方式来进行转化,读取其中的数据,转化成另一种格式,来进行处理.本次的讨论中避开了将表格导入数据库中使用,因为在日常办公中,对数据库的使用进行推广到一般员工还有很大的困难.本文只讨论格式的转化.
对于处理对于日常行政工作,涉及的面广点多,选取开发语言就要能适应多种应用,比如WINDOWS窗体应用,WINDOWS应用程序,WEB应用程序,数据库应用,表格文档应用等等,需用语言有较为均衡的开发能力.C#恰恰应时而生.C#是微软开发基于.net框架的一个面向对象的编程语言.和java同属于C/C++家族,有很多相似性,易于学习.其源码会编译成msil在运行,与com是直接集成的,效率高,有很好的通用性.
编辑环境使用Microsoft Visual Studio2013版,它提供了高级开发工具,调试功能,数据库功能,易于在各种平台快速的开发应用程序.可以方便用于开发高性能的Windows应用程序,移动应用程序,网络应用/服务程序,智能设备的应用程序等等.
在本项目中,C#读写的文件是文件夹中大量具有相同格式的表格.读取文件后将读出的内容放入按要求格式生成的文件中.程序流程图如图3-1.
3.1 系统的架构分析
本项目为一个windows桌面应用程序,由顶层向下逐步开发.过程中使用多个button控件,来控制文件的读取过程,详细流程如下图:
图3-1
图3-2
3.2 读取中的问题一
读取表格中文件,个别文件中会有多个sheet文件,由于做表中对文件归类的习惯,许多工作人员会把多个文件合成到一个文件中,以多个sheet表的形式存储.这样文件夹中的文件既有只含一个可用sheet的文件,也有含多个sheet的文件.首先
3.3 读取中的问题二
Excel文件中会有隐藏行列.一般情况下,表格制作人并不希望将表格中隐藏的项目读出,但隐藏的行列代表以后会用,但现在不会用,所以不能删除,且不能读出来.
解决这个问题的方法就是对行列添加标记flag,在flag为真的情况下,读取该行列,否则不读取.设置判断if (flagShowRow[t]==0)continue;
读取文件之前首先对文件进行一遍预读取,对隐藏的列进行标记
对待隐藏的行也是采取同样的方式.
3.4 读取中的问题三
因为一次读取的文件比较多,兼顾效率的情况下使用是数组为二维数组.由于excel中的文件是人为操作的,所以不可避免里面会有各种无意间添加进去的内容,比如空格.这种情况下,我们收集对比表格中的数据时采用截取其中的部分内容,读掉了空格的内容.
在对多个文件,多个sheet,隐藏行列进行过分析标注后,文件内容的读取就相对简单一些.在判断是否为需要的数据之后,调用读入程序,将需要的数据用大数组进行存储resultOfExtract(Flag, resultOfColumnExtr, numOfColumn, classInfo, OleDsExcle.Tables[i].Rows[t][1].ToString(),OleDsExcle.Tables[i].Rows[t][0].ToString() ,
3.5 写入固定格式的表格
所有需要读取得内容全部放在数组中,将数组直接写入的文件即可,使用定义类:System.IO.StreamWriter sw= new System.IO.StreamWriter("d:/sheet1.xls",true,System.Text.Encoding.Default);
以字符串的方式写入文件
3.6 程序读取过程的显示
程序读取的过程在屏幕上显示出来,细心的员工会在这个过程简单的发现一些问题,所以读取的过程使用了DataGridViewRowPostPaintEventArgs类来进行显示控制.
图3-3 程序运行效果图
3.7 读取结果
读取完成后,自定义生成的文件名,格式一般为.exl,为一般的wps和office可以打开的文件.输出结果正确.本文将具有复杂表头,三维数据表格转化成二维数据表格,方便了下一步的比对或者输入数据库的工作.
计算机技术的应用和发展不光是发展出新的应用或者算法,更主要的是用来解决实际工作的复杂问题,提高工作效率,从吸引眼球专项解决人们日常工作中遇到的复杂问题.由于需求分析的复杂,常常只有深入这个工作的员工才能更好的做出需求分析,如果基层员工能有较高的技术水平解决这些问题,那就是最好的方案.
该项目的从立项到完成大概花费了五个月的时间,其中感慨最大的是数据来源的不确定性和统一化的处理.在相互的退让中,程序进行了相当大的修改与完善,肯定在以后的使用过程还会有跟多的完善与值得思考的地方.
微软给我们提供一个很好的语言,一个很好的平台,在这个平台上我们可以解决实际工作中的很多问题.希望早日有国产的语言和平台来满足我们的日常开发需要.
〔1〕龙马高新教育.c#从入门到精通[M].北京:人民邮电出版社,2015.
〔2〕ScoRAllen,Syad Fahad Gilani.c#数据库入门经典[M].北京:清华大学出版社,2003.
〔3〕Simon Robinson,K ScoRAllen.中高级编程[M].北京:清华大学出版社,2007.
TP312
A
1673-260X(2016)12-0017-02
2016-10-21
本文系四川广播电视大学教改项目(XMKYC2016011Y)研究成果