最近遇到一个项目,要求对下属单位的EXCEL报表进行统一处理并存入数据库.
现在遇到的主要问题是,下属单位的报表格式并不完全规范.比如,有的公司前三行是公司信息,有些公司报表中前四行是公司信息;另外,在基本数据中,他们会自行增加字段(这到没太大关系,因为我们关心的基本数据列差不多);最严重的问题是,这些报表中,有些报表存在合并单元格(原本应该标准excel,每个单元格一个数据,他们会把相同值且相邻的单元格合并,比如原本A1~A5都是江苏,有人会为了美观自己把A1~A5合并成一个大格子,大格子居中写江苏两个字.)更有甚者,有人会把某一行整个合并单元格,写上一段话作为备注!
当然,还有问题,比如他们会在一个EXCEL中做几个表格,比如,苏州一个报表,空几行,然后是无锡的报表~~我现在的主要问题是,.NET中如何对EXCEL处理?从这些表中取我想要的数据
现在遇到的主要问题是,下属单位的报表格式并不完全规范.比如,有的公司前三行是公司信息,有些公司报表中前四行是公司信息;另外,在基本数据中,他们会自行增加字段(这到没太大关系,因为我们关心的基本数据列差不多);最严重的问题是,这些报表中,有些报表存在合并单元格(原本应该标准excel,每个单元格一个数据,他们会把相同值且相邻的单元格合并,比如原本A1~A5都是江苏,有人会为了美观自己把A1~A5合并成一个大格子,大格子居中写江苏两个字.)更有甚者,有人会把某一行整个合并单元格,写上一段话作为备注!
当然,还有问题,比如他们会在一个EXCEL中做几个表格,比如,苏州一个报表,空几行,然后是无锡的报表~~我现在的主要问题是,.NET中如何对EXCEL处理?从这些表中取我想要的数据
各位大虾米,多帮我想想办法呢~~
对excel的操作的话网上找一找应该不少(不过格式不统一的话,当数据库来操作可能就不方便了,先看看别的方法)
对于格式不统一的问题,可以考虑先找到一个标志(比如某一个标题,最好是第一列的,比较好找)来确定数据起始行
然后逐列对比标题来找到所需的列,并逐行取值
有合并行的话,找到一行后记录此行文本,下一行如果读到空白的话就认为是与上一个记录相同
找到整个空的行则认为一个表格结束,继续向下找是否有起始标志
找到一行只有一格有文本的话,就代表备注当然,实际操作还要看具体情况最后,格式的问题还是要规范呐……不然以后还会有变化的……
所以必须格式规范化。至于C#操作excel.搜搜吧,一搜一大堆。
比如A1到A5合并,读取到DataTable后,只有A1对应的有值,其他几个都是空的
------------------------------------------------------------------------------------
至于从Excel中读取,可以看看http://blog.csdn.net/lsj_zrp/archive/2009/07/30/4394359.aspx
最好是做一个BS框架的小网站,让他们直接往你的表单里填充数据,类似最普通的网站的发贴等功能,
这个办法完全抛弃了EXCEL了不同意,那么提供统一标准的EXCEL模板,必须按照模板来写数据
这样也能解决问题,如果这个也执行不下去,那么我想不是程序能解决的问题了,只能靠人力解决了,
他/她们还有可能今天用这个格式明天用那个格式(同一家公司),这样更不好处理了
我至少知道是可行的,只不过比较麻烦而已,正如几位哥们说的,针对不同单位设计不同的代码,毕竟一个单位每次的报表格式都是不变的。既然可行,我就放心了:)
至于不少朋友提到规范的问题,这个问题以后肯定要做的,我所说的下属单位,其实是指我们业务流上的下属单位,并不是完全意义的上下级、总部与分部的关系,我在想是不是可以模块化处理,每个单位一个DLL或者一个格式文件,这样可能比较好。
========================
非常谢谢楼上的朋友们,也欢迎下面还有朋友继续一起讨论,过两天结贴:)