随笔 - 225  文章 - 98  trackbacks - 0
<2012年9月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

随笔分类

相册

报表工具厂商们

搜索

  •  

最新评论

阅读排行榜


使用FineReport经常会遇到在设计中要取两个字符之间的数据或者文本的问题。在此贡献一些公式给大家。

写过代码的都知道想到的是用substr或者split函数来做,但是仔细研究一下就会发现substr只能解决取从第几个字符开始的n个字符,而split是返回的用分隔符分割的字符串,没有选择性的截取,后来找了一下,发现原来有这种算法,例子中说的是在excel中的方法,fr兼容excel所以这一点不用担心。

有时需要从包含分隔符号的字符串中提取子字符串,例如Excel工作表的某列中包含类似“200-GH11301-11TB5”的文本字符串,该字符串被两个相同的分隔符号“-”分成三部分,且每部分的字符数不固定,现在需要提取其中的第2部分内容“GH11301"。这时可以使用下面的公式,假如原字符串位于A1单元格中,在B1单元格中输入如下公式:

=MID(LEFT(A1,FIND("`",SUBSTITUTE(A1,"-","`",2))-1),FIND("`",SUBSTITUTE(A1,"-","`",1))+1,LEN(A1))

公式说明:本例用SUBSTITUTE函数将两个分隔符号“-”替换为“`”,“`”符号位于数字“1”键的左侧,也可改为字符串中没有出现的其他特殊符号。然后用FIND函数查找第二个“`”出现的位置并用LEFT函数去掉第二个“`”后面的部分,最后用MID函数提取所需内容。由于MID函数的第三个参数“LEN(A1)”大于所提取文本的字符数,因而本公式适用于各部分长度不固定的字符串。

      也可使用下面的公式:

=TRIM(MID(SUBSTITUTE(A1,"-",REPT(" ",LEN(A1))),LEN(A1),LEN(A1)))

公式说明:REPT(" ",LEN(A1))产生一个与原字符串长度相同的空格字符串,用SUBSTITUTE函数将其替换各分隔符号,这样所需提取文本的前后就都包含了与原字符串长度相同的空格字符串,再用MID函数进行截取,截取后的字符串前后都包含一些空格,最后用TRIM函数去掉这些空格即得到所需文本。

本例原字符串中有2个分隔符号,第一部分有3个字符,第二部分有7个字符,第三部分有5个字符,字符串总长度LEN(A1)=17,MID函数截取后“GH11301”的前面就有4(3+17-17+1)个空格,后面就有6(17-4-7)个空格。
    
    如果字符串中包含更多的分隔符号,如“1130-80-F030305-5TB1-T(40)”,要提取各部分内容,可以将公式改为:

提取第一部分:

=TRIM(MID(SUBSTITUTE(A1,"-",REPT(" ",LEN(A1))),1,LEN(A1)))

或者直接用公式:

=LEFT(A1,FIND("-",A1)-1)

提取其他部分,如第3部分“F030305”:

=TRIM(MID(SUBSTITUTE(A1,"-",REPT(" ",LEN(A1))),2*LEN(A1),LEN(A1)))

本例中提取字符串中的第3部分,公式中用红色标识的数字为“2”,如果是第N部分,则为N-1。



了解Java报表工具就从这里开始
posted on 2012-09-06 23:46 season 阅读(889) 评论(0)  编辑  收藏 所属分类: Java报表—技术知识

只有注册用户登录后才能发表评论。


网站导航: