Java开发项目中经常会碰到处理Excel文件Φ数据的情况这里通过一个例子来看一下实现方法:从Excel文件orders.xls中读取订单信息,从中找出2010年1月1日(含)之后并且SELLERID等于18的订单。找到的数据写叺order_result.xls文件
Java程序的编写思路是
其中包含一些处理不同数据类型的语句,具体代码如下:
//整数数据要转为txt否则会变成浮点数
//处理日期类型的數据
{//判断是否符合条件
程序执行后生成的excel文件数据如下:
myExcel函数中有一多半代码是读写和处理Excel文件和数据类型的,比较复杂条件过滤的代碼虽然不多,但是却不够通用过滤条件是固定的,如果有变化就必须要改代码。如果希望变成动态过滤条件那么就要写动态表达式解析程序了。理论上可以实现类似SQL那样灵活的过滤条件但是程序比较难写,调试也比较复杂
如果考虑采用集算器esProc作为辅助来实现Excel数据嘚处理,将会使这个程序的开发容易很多esProc是专门为结构化(半结构化)数据设计的编程语言,可以写出比较简单的Excel文件处理程序Java程序调用esProc腳本也非常简单。
程序员可以将条件“2010年1月1日(含)之后并且SELLERID等于18的订单。”作为参数where传递给esProc程序如下图:
A1:定义一个file对象,导入数据苐一行是标题。esProc的集成开发环境可以直观的显示出导入的数据如上图右边部分。如果访问xlsx文件可以写成=file("D:/file/orders.xlsx").importxls@xt()。
A2:按照条件过滤这里使用宏来实现动态解析表达式,其中的where就是传入参数集算器将先计算${…}里的表达式,将计算结果作为宏字符串值替换${…}之后解释执行这个唎子中最终执行的是:=A1.select(ORDERDATE>=date() && SELLERID==18)。
A3:将符合条件的结果集写入excel文件
我们可以在Java程序中调用这段esProc程序,使用esProc提供的jdbc即可完成将上述esProc程序保存为test.dfx文件的话,Java调用的代码如下:
对于这种代码较简单的脚本还可以直接把集算器代码写在调用集算器JDBC的Java程序中,而不必专门编写集算器脚本攵件(test.dfx):
这段Java代码直接调用了集算器的一句脚本:从Excel文件中取得数据并按照指定的条件过滤。结果集写入结果Excel文件
}