要不就是思路错了--解析excel公式续

jdsnhan 2008-11-29 09:59:59
已经发了一个帖子,如何解析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的内部公式也解析出来。
不是什么好办法,各位帮想想,还有没有什么其他好办法实现数据连动的功能,而不解析公式。
...全文
254 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
jdsnhan 2008-11-30
  • 打赏
  • 举报
回复
呵呵,没点难度洗漱怎么搞劳驾各位呢。
sleepzzzzz 2008-11-29
  • 打赏
  • 举报
回复
我觉得更多应该基于excel相关解释技术进行实现,没看见过pl/sql有能解释excel文档的功能.

比如,java就有针对处理excel文档的API,
能不能这样,在数据库里先创建java 存贮过程,然后调用它去处理excel,这要是有一定可行性的,但就理不知道能不能满足你的要求。


[Quote=引用楼主 jdsnhan 的帖子:]
已经发了一个帖子,如何解析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

[/Quote]
BlueskyWide 2008-11-29
  • 打赏
  • 举报
回复

--本文摘自美国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
----------
7

SQL> select * from tab2;

COL2
----------
10

SQL> select * from tab3;

COL3
----------
13

SQL>
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 created

SQL>
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 created

SQL>
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 created

SQL> update tab1 set col1=8;

1 row updated

SQL> 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
----------
8

SQL> select * from tab2;

COL2
----------
10
7

SQL> select * from tab3;

COL3
----------
7
27

SQL>
dawugui 2008-11-29
  • 打赏
  • 举报
回复
这下更看不懂了,帮顶.
BlueskyWide 2008-11-29
  • 打赏
  • 举报
回复
要实现数据连动的功能,采用联级触发(Trigger中的表通过DML操作关键字实现联动)可以实现。
jdsnhan 2008-11-29
  • 打赏
  • 举报
回复
少说了一点,对于每个模板,都被按单元格拆分了,有对应的:
配置表(tid:模板id,col:列位置,row:行位置,formula:对应公式),
数据表(tid:模板id,col:列位置,row:行位置,value:对应值)
BlueskyWide 2008-11-29
  • 打赏
  • 举报
回复
以前没做过,太复杂了。

http://www.cnblogs.com/yiriqing/category/60608.html
jdsnhan 2008-11-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 codearts 的回复:]
你的项目是:用户使用excel编辑一些计算公式,你到oracle读取这个excel,然后进行计算?

还是: 做一个类似于excel那样的,可以进行公式计算的?

前面的那种情况太复杂,如果不使第三方的库或控件,自已写也太难了吧(工作量大,技术难度高)
[/Quote]

系统引用的owc,和excel差不多
jdsnhan 2008-11-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sleepzzzzz 的回复:]
我觉得更多应该基于excel相关解释技术进行实现,没看见过pl/sql有能解释excel文档的功能.

比如,java就有针对处理excel文档的API,
能不能这样,在数据库里先创建java 存贮过程,然后调用它去处理excel,这要是有一定可行性的,但就理不知道能不能满足你的要求。


引用楼主 jdsnhan 的帖子:
已经发了一个帖子,如何解析excel公式,见 http://topic.csdn.net/u/20081128/23/fdc43c7e-9d20-4447-8d1b-368062317ff9.html…
[/Quote]

这里有一个障碍,excel本身的公式只有在打开的时候才生效。
jdsnhan 2008-11-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 BlueskyWide 的回复:]
SQL code
--本文摘自美国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
----------…
[/Quote]

老兄,你没看清楚我的主要需求是啥
codearts 2008-11-29
  • 打赏
  • 举报
回复
你的项目是:用户使用excel编辑一些计算公式,你到oracle读取这个excel,然后进行计算?

还是: 做一个类似于excel那样的,可以进行公式计算的?

前面的那种情况太复杂,如果不使第三方的库或控件,自已写也太难了吧(工作量大,技术难度高)

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧