已经发了一个帖子,如何解析excel公式,见 http://topic.csdn.net/u/20081128/23/fdc43c7e-9d20-4447-8d1b-368062317ff9.html
这个帖子解释一下为何有此需求,或许是思路错了。一个项目中,用到owc(微软关于电子表格的插件),使用思路,将电子表格以clob格式存进数据库,每一个文件称为一个模板。
假设现在有4个模板:ta,tb,tc,td
模板间存在单元格值的引用关系,
ta
a1
tb
b2 引用a1
tc
c3 引用b2
td
d4 引用c3
要在数据层做处理,于是自定义公式以便引用值,YS(ta,a1),YS(tb,b2),YS(tc,c3),取值一切正常。
现客户提出需求,更改a1单元格的值,td模板中d4的值要连动更新,根据递归,也能解决。现在问题:tc模板c3处可能不直接引用b2,而是引用了b4,而b4=b2+b3(为excel的内部公式),大家都知道,excel内部公式只有在打开后才生效,在数据层无法实现预期目标,我才想到把excel的内部公式也解析出来。
不是什么好办法,各位帮想想,还有没有什么其他好办法实现数据连动的功能,而不解析公式。
这个帖子解释一下为何有此需求,或许是思路错了。一个项目中,用到owc(微软关于电子表格的插件),使用思路,将电子表格以clob格式存进数据库,每一个文件称为一个模板。
假设现在有4个模板:ta,tb,tc,td
模板间存在单元格值的引用关系,
ta
a1
tb
b2 引用a1
tc
c3 引用b2
td
d4 引用c3
要在数据层做处理,于是自定义公式以便引用值,YS(ta,a1),YS(tb,b2),YS(tc,c3),取值一切正常。
现客户提出需求,更改a1单元格的值,td模板中d4的值要连动更新,根据递归,也能解决。现在问题:tc模板c3处可能不直接引用b2,而是引用了b4,而b4=b2+b3(为excel的内部公式),大家都知道,excel内部公式只有在打开后才生效,在数据层无法实现预期目标,我才想到把excel的内部公式也解析出来。
不是什么好办法,各位帮想想,还有没有什么其他好办法实现数据连动的功能,而不解析公式。
配置表(tid:模板id,col:列位置,row:行位置,formula:对应公式),
数据表(tid:模板id,col:列位置,row:行位置,value:对应值)
--本文摘自美国David Lockman著的《轻松掌握Oracle8数据库开发》,供LZ作个参考:--表tab1建立了一个行级before update触发器,它可将tab1中的col1列的旧值插入到tab2中;
--表tab2建立了行级的before update触发器,它可更新tab3,并用col2的新值给col3赋值;
--最后对于表tab3,建立语句级after update触发器,它可在col3的值等于27时,在表tab3中插入行。SQL> select * from tab1; COL1
----------
7SQL> select * from tab2; COL2
----------
10SQL> select * from tab3; COL3
----------
13SQL>
SQL> create or replace trigger tab1_update_before before update on tab1 for each row
2 declare
3 begin
4 insert into tab2(col2) values(:old.col1);
5 end;
6 /Trigger createdSQL>
SQL> create or replace trigger tab2_insert_before before insert on tab2 for each row
2 declare
3 begin
4 update tab3 set col3=:new.col2;
5 end;
6 /Trigger createdSQL>
SQL> create or replace trigger tab3_update_after after update on tab3
2 declare
3 begin
4 insert into tab3(col3) values(27);
5 end;
6 /Trigger createdSQL> update tab1 set col1=8;1 row updatedSQL> commit;Commit complete--如下看到:
--在tab1中,col1的值被更新为8;
--在tab2中,触发器tab1_update_before用col1:7的旧值插入一行新数据;
--在tab3中,当在tab2中插入新行时,使触发器tab2_insert_before触发,并设置col3的值,使其与在tab2插入的值7相同。
--当tab3被更新后,触发器tab3_update_before在tab3中用值27插入另一行。SQL> select * from tab1; COL1
----------
8SQL> select * from tab2; COL2
----------
10
7SQL> select * from tab3; COL3
----------
7
27SQL>
能不能这样,在数据库里先创建java 存贮过程,然后调用它去处理excel,这要是有一定可行性的,但就理不知道能不能满足你的要求。
这里有一个障碍,excel本身的公式只有在打开的时候才生效。
系统引用的owc,和excel差不多