SSRS 表达式 - 值中逗号后的第 break/new 行
SSRS Expression - Line break/new line after coma in value
其中一个文本框包含一组以逗号分隔的值,如下所示,
1234,1234,1234,1234,1234,1234,1234,1234,1234,1234,1234,1234,1234,1234,1234
现有输出:
1234,1234,1234,1234,1234,1234,1234,1234,1234,1234,123
4,1234,1234,1234,1234
预期输出:
1234,1234,1234,1234,1234,1234,1234,1234,1234,1234,
1234,1234,1234,1234,1234
线应该只在逗号值之后断开而不是断开值 1234
我正在寻找一种表达方式来实现这一点。
更改文本框大小不在范围内。
我相当有信心,如果不假设逗号之间的值始终是相同的长度,那么您想要的是不可能的。
您的文本在值的 'middle' 处中断,因为 SSRS 不知道您的逗号应该被视为中断字符,就像 space
.
因此,您的选择是有限的,并且取决于此文本框的用途。如果您只想显示数据,那么您不必担心中断是如何定义的,但如果您需要在其他地方使用此数据,您 do 需要担心。
如果您需要通过复制和粘贴在别处使用数据,而您绝对不能拥有 spaces,那您就太不走运了。如果您不必在任何地方复制数据,您有两个选择,您可以在逗号后简单地添加 spaces 以在报告中获得您想要的中断:
选项 1 - 可见 Space 字符
使用 replace
将所有逗号字符替换为逗号和 space,这将显示在报告中。虽然这在美学上可能并不理想,但至少报告中发生的事情很明显,与选项 2 不同...
=replace(Fields!YourCol.Value, ",", ", ")
选项 2 - Non-Visible Space 字符
再次使用 replace
,但将逗号替换为一个逗号和一个 Zero-Width Space 字符。虽然在报告设计中这很明显,但任何试图复制数据的人都可能会遇到问题,因为存在无法看到的字符。您可以通过选择文本 he re 来查看。当您按住 shift 并使用箭头键左右移动时,您会注意到您需要额外按下才能在 he
和 re
之间移动。
你需要的unicode字符数是8203
,你可以使用ChrW
ssrs函数:
=replace(Fields!YourCol.Value, ",", "," & chrw(8203))
另一种方法是通过一个函数将行拆分为单词数组,然后
重新排列预定义大小的行中的单词。
此函数接受两个参数,要拆分的行和最大大小以及 returns 新行断开以不超过
最大尺寸且不破坏文字。
Public 函数 splitlineaftercomma(byval line as string, linesize as integer) as string
dim words() as string=line.split(",")
dim newlines() as string={""}
dim i as integer=0
dim j as integer=0
for i=0 to words.length - 1
if len(newline(j)+words(i)+",")>linesize then 'if the line is overflown create new line
array.resize(newlines, newlines.length+1)
j+=1
end if
newlines(j)+=words(i)+"," 'add word plus comma to current line
next i
newlines(j)=newlines(j).trimend(",") ' remove last comma
return string.join(vbcrlf,newlines)
结束函数
假设您的盒子大小为 30 个字符,那么您可以将函数调用为:
=Code.splitlineaftercomma(linetosplit,30)
其中一个文本框包含一组以逗号分隔的值,如下所示,
1234,1234,1234,1234,1234,1234,1234,1234,1234,1234,1234,1234,1234,1234,1234
现有输出:
1234,1234,1234,1234,1234,1234,1234,1234,1234,1234,123
4,1234,1234,1234,1234
预期输出:
1234,1234,1234,1234,1234,1234,1234,1234,1234,1234,
1234,1234,1234,1234,1234
线应该只在逗号值之后断开而不是断开值 1234
我正在寻找一种表达方式来实现这一点。 更改文本框大小不在范围内。
我相当有信心,如果不假设逗号之间的值始终是相同的长度,那么您想要的是不可能的。
您的文本在值的 'middle' 处中断,因为 SSRS 不知道您的逗号应该被视为中断字符,就像 space
.
因此,您的选择是有限的,并且取决于此文本框的用途。如果您只想显示数据,那么您不必担心中断是如何定义的,但如果您需要在其他地方使用此数据,您 do 需要担心。
如果您需要通过复制和粘贴在别处使用数据,而您绝对不能拥有 spaces,那您就太不走运了。如果您不必在任何地方复制数据,您有两个选择,您可以在逗号后简单地添加 spaces 以在报告中获得您想要的中断:
选项 1 - 可见 Space 字符
使用 replace
将所有逗号字符替换为逗号和 space,这将显示在报告中。虽然这在美学上可能并不理想,但至少报告中发生的事情很明显,与选项 2 不同...
=replace(Fields!YourCol.Value, ",", ", ")
选项 2 - Non-Visible Space 字符
再次使用 replace
,但将逗号替换为一个逗号和一个 Zero-Width Space 字符。虽然在报告设计中这很明显,但任何试图复制数据的人都可能会遇到问题,因为存在无法看到的字符。您可以通过选择文本 he re 来查看。当您按住 shift 并使用箭头键左右移动时,您会注意到您需要额外按下才能在 he
和 re
之间移动。
你需要的unicode字符数是8203
,你可以使用ChrW
ssrs函数:
=replace(Fields!YourCol.Value, ",", "," & chrw(8203))
另一种方法是通过一个函数将行拆分为单词数组,然后 重新排列预定义大小的行中的单词。
此函数接受两个参数,要拆分的行和最大大小以及 returns 新行断开以不超过 最大尺寸且不破坏文字。
Public 函数 splitlineaftercomma(byval line as string, linesize as integer) as string
dim words() as string=line.split(",")
dim newlines() as string={""}
dim i as integer=0
dim j as integer=0
for i=0 to words.length - 1
if len(newline(j)+words(i)+",")>linesize then 'if the line is overflown create new line
array.resize(newlines, newlines.length+1)
j+=1
end if
newlines(j)+=words(i)+"," 'add word plus comma to current line
next i
newlines(j)=newlines(j).trimend(",") ' remove last comma
return string.join(vbcrlf,newlines)
结束函数
假设您的盒子大小为 30 个字符,那么您可以将函数调用为:
=Code.splitlineaftercomma(linetosplit,30)