在SSRS中导出到Excel时,代码部分未按预期执行

时间:2013-08-02 22:09:59

标签: vba reporting-services ssrs-2008

我在我的代码中所做的是,我有

ID   Value
1    a
1    b
1    c
2    a
2    b

我正在

ID   Value
1    a,b,c
2    a,b

我可以使用STUFF关键字在SQL中执行此操作,但我决定使用此

在我编写的报告的代码部分

Private CurrGroupBy As String = String.Empty
Private ConcatVal As String = String.Empty

Public Function AggConcat(GroupBy as String, ElementVal as String) as String
    If CurrGroupBy = GroupBy Then
        If InStr(ConcatVal, ElementVal,0) = 0 Then
            ConcatVal = Trim(ConcatVal) & ", " & ElementVal 
        End If
    Else
        CurrGroupBy = GroupBy 
        ConcatVal = ElementVal 
    End If
Return ConcatVal 
End Function

并在其中一行中使用此表达式

=RunningValue(Code.AggConcat(Fields!Id.Value, Fields!Theme.Value), Last, "DataSet1")

如果查看报告并将其导出为PDF,则此功能非常有效。但是,当我将它导出到Excel时,我得到的结果是

ID   Value
1    a
1    a,b
1    a,b,c
2    a
2    a,b

我在这里做错了什么?

2 个答案:

答案 0 :(得分:2)

当我尝试重现上面解释的内容时,报表查看器和excel都会产生所描述的意外情况。

虽然为了实现所需的输出,我添加了一个报告组并删除了=(Details)组,这在报告视图和导出到Excel时都有效。

解决方案最终看起来像:

SSRS Group Code Solution

答案 1 :(得分:0)

我不知道。如果起始代码在excel中,您可以修改此代码以执行您想要的操作。很久以前我发现了这个。如果它不是你想要的东西,请忽略它。

Sub ConcatNotesTextV2()
' hiker95, 04/14/2012
' http://www.mrexcel.com/forum/showthread.php?t=628561
Dim r As Long, lr As Long, nr As Long, n As Long
Application.ScreenUpdating = False
lr = Cells(Rows.Count, 1).End(xlUp).Row
For r = 2 To lr
  n = Application.CountIf(Columns(1), Cells(r, 1).Value)
   If n = 1 Then
     'do nothing
  ElseIf n > 1 Then
    Range("B" & r) = Join(Application.Transpose(Range("B" & r & ":B" & (r + n) - 1)), ,)
    Range("A" & r).Offset(1).Resize(n - 1).ClearContents
  End If
  r = r + n - 1
Next r
On Error Resume Next
Range("A1:A" & Cells(Rows.Count, 2).End(xlUp).Row).SpecialCells        (xlCellTypeBlanks).EntireRow.Delete  
On Error GoTo 0
Application.ScreenUpdating = True
End Sub