最近遇到一个项目,要求对下属单位的EXCEL报表进行统一处理并存入数据库.
现在遇到的主要问题是,下属单位的报表格式并不完全规范.比如,有的公司前三行是公司信息,有些公司报表中前四行是公司信息;另外,在基本数据中,他们会自行增加字段(这到没太大关系,因为我们关心的基本数据列差不多);最严重的问题是,这些报表中,有些报表存在合并单元格(原本应该标准excel,每个单元格一个数据,他们会把相同值且相邻的单元格合并,比如原本A1~A5都是江苏,有人会为了美观自己把A1~A5合并成一个大格子,大格子居中写江苏两个字.)更有甚者,有人会把某一行整个合并单元格,写上一段话作为备注!
当然,还有问题,比如他们会在一个EXCEL中做几个表格,比如,苏州一个报表,空几行,然后是无锡的报表~~我现在的主要问题是,.NET中如何对EXCEL处理?从这些表中取我想要的数据

解决方案 »

  1.   

    太不给面子了,人家说这么一大堆你就来个“VBA吧”
      

  2.   

    VBA是嵌入在EXCEL里面的吧,现在问题是下属单位不可能重新按照我们预设了VBA的EXCEL往里面录入呀:(我手头有好多以往的这种表格要处理哦:(
    各位大虾米,多帮我想想办法呢~~
      

  3.   

    一两个月是肯定用不到的,十来家下属单位,每家单独编写应该也不至于这么久(当然,兼职的另说了)
    对excel的操作的话网上找一找应该不少(不过格式不统一的话,当数据库来操作可能就不方便了,先看看别的方法)
    对于格式不统一的问题,可以考虑先找到一个标志(比如某一个标题,最好是第一列的,比较好找)来确定数据起始行
    然后逐列对比标题来找到所需的列,并逐行取值
    有合并行的话,找到一行后记录此行文本,下一行如果读到空白的话就认为是与上一个记录相同
    找到整个空的行则认为一个表格结束,继续向下找是否有起始标志
    找到一行只有一格有文本的话,就代表备注当然,实际操作还要看具体情况最后,格式的问题还是要规范呐……不然以后还会有变化的……
      

  4.   

    EXCEL不规范是不能处理的,因为没有规范,你永远不知道客户会发生什么问题。
    所以必须格式规范化。至于C#操作excel.搜搜吧,一搜一大堆。
      

  5.   

    从Excel中读取数据,如果是合并单元格的,读取后,第一个内容是合并里面的内容,余下的都是空。
    比如A1到A5合并,读取到DataTable后,只有A1对应的有值,其他几个都是空的
    ------------------------------------------------------------------------------------
    至于从Excel中读取,可以看看http://blog.csdn.net/lsj_zrp/archive/2009/07/30/4394359.aspx
      

  6.   

    没有规范就不好办了
    最好是做一个BS框架的小网站,让他们直接往你的表单里填充数据,类似最普通的网站的发贴等功能,
    这个办法完全抛弃了EXCEL了不同意,那么提供统一标准的EXCEL模板,必须按照模板来写数据
    这样也能解决问题,如果这个也执行不下去,那么我想不是程序能解决的问题了,只能靠人力解决了,
    他/她们还有可能今天用这个格式明天用那个格式(同一家公司),这样更不好处理了
      

  7.   

    跟他们谈输入约定。就是谈excel的格式。。
      

  8.   

    excel格式没有问题,格式必须统一。既然是下属单位,上级同意模版很简单。而且统一了对他们有害无利,这个都搞不定,是你们的业务水平太欠。有些东西,他们领导一句话顶你折腾一二个月。引导客户规范化,是软件成功的前提。如果以为迁就客户,完全去适应他们随意的工作模式,这个软件很难成功;成功了,对客户的提高也不是最大的。
      

  9.   

    谢谢楼上的几位兄弟,受益匪浅;
    我至少知道是可行的,只不过比较麻烦而已,正如几位哥们说的,针对不同单位设计不同的代码,毕竟一个单位每次的报表格式都是不变的。既然可行,我就放心了:)
    至于不少朋友提到规范的问题,这个问题以后肯定要做的,我所说的下属单位,其实是指我们业务流上的下属单位,并不是完全意义的上下级、总部与分部的关系,我在想是不是可以模块化处理,每个单位一个DLL或者一个格式文件,这样可能比较好。
    ========================
    非常谢谢楼上的朋友们,也欢迎下面还有朋友继续一起讨论,过两天结贴:)