需要建议阅读大型XLs验证数据

时间:2011-06-13 17:48:40

标签: java apache-poi

我要求客户上传包含数千行的电子表格。 一行中不同的列具有不同的数据类型,并且数据必须符合某些验证规则。例如。

下面的

是一个示例文件结构:

(Header - Colume_name,Variable_type,field_size,i/p mask,required_field,validation_Text) 
(P/N,String,20,none,yes,none)           
(qty,Integer,10,none,yes,none)
(Ship_From,String,20,none,yes,none)
(Request_Date,Date,MM/DD/YY ,yes,none)  
(Status,String,10,none,yes,Failed OR Qualified)

在阅读xl表时,我需要根据上述约束验证数据,如果数据有任何错误, 我需要存储错误并通知客户。

请让我知道保持系统性能的最佳方法。

非常感谢任何早期回复。

谢谢, Ashish Gupta

4 个答案:

答案 0 :(得分:2)

如果我理解您的问题,您希望阅读验证规则文件,例如上面的示例。您想编译规则,以便他们读取大型Excel电子表格(或者它是CSV文件?),并且可能为每行被视为无效的行打印出一条消息。

这似乎是一个两遍过程: 1)验证和编译验证文件和2)编译第1版的输出并将其应用于Excel文件。

您可以通过多种方式进行现场验证,具体取决于您的技能和倾向。

  • 开发VBA代码以读取验证文件。然后编写一个单独的宏来验证每一行
  • 使用您喜欢的语言编写解析器,读取验证文件。将一些列添加到读入Excel电子表格中,其中包括列名称(例如,数量),类型(例如,整数),所需字段(例如,真)。然后让Excel或OpenOffice突出显示无效行
  • 让lex和yacc生成Java或C ++解析器以扫描验证文件并输出BNF。然后在上一步的输出中读取另一个lex和yacc文件,并让它验证Excel文件。

您在代码上标明了POI,因此我认为您需要生成Java代码。

当然,您也可以编写一次性程序来完成所有这些元编译和编译,但这将是一个脆弱的过程。

如果您可以自由指定验证文件,则可能需要将其设置为.XSD文件,因为有自动化工具可以使其扫描更加简单。有一些工具可以确定XML文件是否有效,以及可以将其转换为Java的编译器。

(当我阅读你的验证文件时,我想到了一个想法。你将如何将一个部分与另一个部分分开?例如,如果你在P/N, Qty, Request_Date, Ship_From, Status, P/N中读到,那是一部分有两个P / N还是一个完整的零件和一个缺少几个必要零件?)

答案 1 :(得分:1)

我的第一个想法是让Excel做这个验证,因为Rajah似乎也在暗示。内置功能和/或VBA应该能够满足这些要求。 如果你需要在Java中处理这个问题,我会选择XML方法。

干杯, 维姆

答案 2 :(得分:0)

我听说有一位朋友使用JBOSS DROOLS验证他的电子表格:http://www.jboss.org/drools

答案 3 :(得分:0)

我有一个基于POI的基于XML的excel验证器。 您只需要在excel中指定需要验证的数据,java api就会进行验证&如果无效,则返回错误消息。

例如:

< data rowNumber =“2”columnNumber =“2”dataType =“string”>     < mandatory errorMessage =“缺少名称标签”> Y.     < value ignoreCase =“true”errorMessage =“名称标签值不匹配。”>名称< / value>

以上是对纯文本字段的简单验证,它还有其他验证,如果您有兴趣请告诉我?