excel里面的公式大家都很了解,形如 =sum(a1,a3:a8),if(m8<>0,n8/m8,0),a2+a9,sheet1!a5+b7 等等。
现在一项目需求,需要将excel的公式解析能oracle能识别的函数。
excel中,每一个单元格对应着表中的一条记录。
我也在写,同时供大家讨论一下,看是否有好的解决方案。

解决方案 »

  1.   

    如果楼主EXCEL里面的公式都是标准的,可以直接取出来,然后用动态SQL完成.
      

  2.   

    --这里有个SQL SERVER里面相关的东西,自己参考吧.就是我现在有一个表   table1的列如下 
    name   value 
    aa       12 
    bb       13 
    cc       14 
    现在要设置计算公式要保存到起来 
    假如A=aa+bb=cc 
    或A=aa+(bb*cc) 
    等可以设置任意情况 
    我怎样才能根据设置的计算公式的到计算结果 
    保存计算公式的表怎样设计 
    谢谢了!急!! 
    create table test(name varchar(12),value int)
    insert into test values('aa',12)
    insert into test values('bb',13)
    insert into test values('cc',14)create table temp(code varchar(30))
    insert into temp values('aa+bb+cc'  )
    insert into temp values('aa+(bb*cc)')
    go
    declare @code varchar(30),@sql varchar(8000)declare tc cursor for select code from tempopen tcfetch next from tc into @codewhile @@fetch_status=0
    begin
        set @sql=''
        select @sql=@sql+',['+name+']=max(case name when '''+name+''' then value end)' from test
        set @sql='select '+@code+' from (select '+stuff(@sql,1,1,'')+' from test) t' 
        exec(@sql)
        
        fetch next from tc into @code
    endclose tc
    deallocate tc
    go
    /*
    ----------- 
    39警告: 聚合或其它 SET 操作消除了空值。
                
    ----------- 
    194警告: 聚合或其它 SET 操作消除了空值。
    */
    drop table test,temp
    go
      

  3.   

    --这个也是./*
    分解公式
    将公式按运算分解到表中
    */
    declare @str varchar(100)
    declare @i int,@str1 varchar(10),@str2 varchar(10)set @str='3+7+12-13+8-9*123' --要分解的字符串
    declare @tb table(num varchar(20),operation varchar(2)) --定义保存结果的表--公式分拆
    set @i=patindex('%[^0-9]%',@str)
    while @i>0
    begin
    select @str1=left(@str,@i-1)
    ,@str=substring(@str,@i,8000)
    ,@i=patindex('%[0-9]%',@str)
    ,@str2=left(@str,@i-1)
    ,@str=substring(@str,@i,8000)
    ,@i=patindex('%[^0-9]%',@str)
    insert into @tb values(@str1,@str2)
    end
    if @str<>'' insert into @tb values(@str,'')--显示分拆结果
    select * from @tb/*
    num                  operation 
    -------------------- --------- 
    3                    +
    7                    +
    12                   -
    13                   +
    8                    -
    9                    *
    123                  (所影响的行数为 7 行)
    */
      

  4.   

    都是夜猫子啊,哈哈。
    谢谢楼上的几位。如果单单是四则运算还好说,问题是夹杂了诸如sum(d1,d3:d8)这样的函数,给解析带来的难度呈几何级增长。
      

  5.   

    使用EXCEL可以使用每一个单元格生成一条语句,然后注意发挥其优势:拖拽--它能很省事地生成某列,即Oracle整个字段的sql。
      

  6.   


    excel里面公式的内容不能被直接解析吧。
      

  7.   

    excel表中的位置 D,1 D,3是表中的两个列。只作为条件存在。
    结构如:
    --基础表 
    create table e_base (tid number,--主键 
    trow number,--行 
    tcol varchar2(2),--列 
    tempid number,--模板id 
    tformula varchar2(1000) --公式 
    ); insert into e_base values(1,9,'A',101,'YS(103,A,9)'); 
    insert into e_base values(2,8,'B',101,'YS(101,A,9)'); 
    insert into e_base values(3,4,'D',102,'YS(105,E,12)+YS(103,C,9)'); --结果表 create table e_result( 
    pid number,--主键 
    trow number,--行 
    tcol varchar2(2),--列 
    tempid number,--模板id 
    evalue number --值 
    ); 
      

  8.   

    只能把EXCEL中所有的情况列举,然后在来分析!分别解析!
    没有什么好办法!!!!
      

  9.   

    解析Excel公式,看这个问题是蛮难的,看看各位大牛出了什么招?
      

  10.   

    或许思路错了,请见贴
    http://topic.csdn.net/u/20081129/09/a40d6c90-fe46-4fe5-8739-386315e234f1.html
      

  11.   

    本人说的意思为:因excel中的数据直接导入Oracle可能比较困难,
    可采用整体生成语句的方法,使excel中的数据直接用执行sql的方式在Oracle中生成数据。
      

  12.   

    终于知道了楼主的部分意图:XML,透视,组件,OLAP,钻取,维度,Fieldsets......
    的确是个大专题啊!http://www.cnblogs.com/yiriqing/category/60608.html