公共内容


  Supcan TreeList和Supcan Report有一些公共的内容,例如表达式,Report中的单元格与单元格之间的逻辑关系、TreeList的列与列之间的逻辑关系都可以用表达式来描述。
  Supcan具有完备的表达式高速解析功能、并内置了六十多个常用的计算函数。



  1.表达式
  Supcan的表达式分二种:关系表达式和格式掩码.
  所谓“关系表达式”就是如前所述的单元格与单元格之间的计算关系、列与列之间的计算关系、小计/合计运算逻辑;而“格式掩码”则是单元格用于描述自身显示的特殊的表达式.

  Supcan Report的表达式在单元格内直接输入,举例如下:
 //支持函数的多层嵌套
 =sum(203.12, 200.1, min(20, 22) * 20)
 
 //A3、B4、 B5表示单元格
 =average(A3, B4, if(B5>2, 3, 4))
 
 //A3至C4的矩形区域内所有单元格
 =sum(A3:C4)

  Supcan Treelist的表达式可以在其XML描述文件中直接定义,举例如下:
  //表示p2列与price列的关系
 <express>p2=if(price!=100, price-100, price)</express>
 
 //total、price、num列的关系
 <express>total=round(price * num, 4)</express>
 
 //num@origin表示num列的原始数据(和修改后内容无关)
 <express>total2=round(price * num@origin, 4)</express>

  格式掩码和关系表达式相比,没有什么大的差别,它还可以包含"textColor="的文字颜色分句,如果是Treelist,还可以有左侧图片、右侧图片分句,举例如下:
 //数字以人民币显示
 =RMB(data)
 
 //日期型数据以中国银行格式显示
 =ChineseBankDate(data)
 
 //日期型数据以指定格式显示
 =FormatDate(data, 'DD/MM/YYYY')
 
 //布尔型数据以“是”/“否”显示
 =if(data, '是', '否')
 
 //数据乘以1000,然后在后面跟随“吨”(数据本身未变)
 =data *1000 + '吨'
 
 //textColor=...是文字颜色
 ='$'+data; textColor=if(data>100,'#0000ff', red)
 
 //Treelist的右侧图片: rightImage,图片URL根据当前行的productID列内容算出:
 ='产品:'+data+ ',图样:'; rightImage=if(productID=1, 'fruit.jpg', if(product=2, '../meta/office.ico', 'ele.png'))

  表达式书写规则及说明如下:
1.加、减、乘、除分别以+、-、*、/表示;
2.支持 “>”、 “<”、 “=”(或 “==”)、 “>=”、 “<=”、 “!=”(或 “<>”)比较逻辑运算;
3.支持 “and”(或 “&&”)、 “or”(或 “||”)、 “not”(或 “!”) 这些所谓 "与或非" 的逻辑运算;
4.运算优先级:括号 > 乘除 > 加减 > 比较逻辑运算 > 与或非逻辑运算;
5.与或非运算优先级:非 > 与 > 或;
6.允许数字和串混合计算;
7.支持串的大小比较运算;
8.不支持位运算;
9.纯数字不支持嵌入千位符(,逗号);
10.支持任意级次的函数嵌套, 例如 if(3!=2, if(A1=if(K2<0, 1-K2, K2), 33, abs(K1)), 40);
11.被零除时,返回字符 "∞", 表示无穷大;