VB.NET将CellSet转为DataTable

  1.     ''' <summary>
  2.     ''' 将CellSet转为DataTable.
  3.     ''' </summary>
  4.     ''' <param name="CellSet">CellSet对象.</param>
  5.     ''' <returns>DataTable</returns>
  6.     ''' <remarks></remarks>
  7.     Private Function AdoMdCellSetToDataTable(ByVal CellSet As Microsoft.AnalysisServices.AdomdClient.CellSet) As DataTable
  8.         Dim Dt As New DataTable
  9.         Dim Dc As New DataColumn
  10.         Dim Dr As DataRow = Nothing
  11.         Dim I As Int32
  12.         Dim ColName As String = ""
  13.         Dim sC As Int32
  14.         Dim sR As Int32 = 0
  15.         Dim RowID As Int32 = 0
  16.         Dim SDr As DataRow = Nothing
  17.         sC = 1
  18.         For Each M As Microsoft.AnalysisServices.AdomdClient.Member In CellSet.Axes(1).Positions(0).Members
  19.             sC += 1
  20.             Dc = New DataColumn()
  21.             Dc.ColumnName = Microsoft.VisualBasic.Space(sC) '//以空填充空白部分.
  22.             Dt.Columns.Add(Dc)
  23.         Next
  24.         '//生成数据列对象
  25.         sR = 0
  26.         Dim R, C As Int32
  27.         Dim ColID As Int16 = 0
  28.         Dim AxexCount_0 As Int32 = CellSet.Axes(0).Positions.Count
  29.         Dim AxexCount_1 As Int32 = CellSet.Axes(1).Positions.Count
  30.         Dim CName As String
  31.         R = 0 : C = 0
  32.         For Each P As Microsoft.AnalysisServices.AdomdClient.Position In CellSet.Axes(0).Positions '//分解0轴,Mdx中的 ON Columns 轴.
  33.             CName = ""
  34.             R = 0 : ColID += 1
  35.             For Each M As Microsoft.AnalysisServices.AdomdClient.Member In P.Members
  36.                 If R = 0 Then
  37.                     CName = CName & "[" & Trim$(M.Caption) & "]"
  38.                 Else
  39.                     CName = CName & ".[" & Trim$(M.Caption) & "]"
  40.                 End If
  41.                 R += 1
  42.             Next
  43.             Dc = New DataColumn()
  44.             Dc.ColumnName = CName
  45.             Dt.Columns.Add(Dc)
  46.             C += 1
  47.         Next
  48.         '//添加行数据
  49.         Dim CellVal As String
  50.         Dim Pos As Int32 = 0
  51.         Dim Ts As String
  52.         Dim Cid As Int32
  53.         For Each py As Microsoft.AnalysisServices.AdomdClient.Position In CellSet.Axes(1).Positions  '//分解1轴,Mdx中的 ON Rows 轴
  54.             Dr = Dt.NewRow()
  55.             RowID += 1
  56.             I = 0
  57.             '//行方向的名称列.
  58.             For Each m As Microsoft.AnalysisServices.AdomdClient.Member In py.Members
  59.                 Ts = m.Caption
  60.                 Cid = I
  61.                 Dr(Cid) = Ts
  62.                 I += 1
  63.             Next
  64.             '//行数据
  65.             For X As Int32 = 1 To AxexCount_0
  66.                 CellVal = "" & CellSet(Pos).FormattedValue
  67.                 If CellVal = "1.#INF" OrElse CellVal = "-1.#IND" OrElse CellVal = "1#I.NF0" OrElse CellVal = "1#I.NF0%" Then CellVal = "" 
  68.                 Dr(Cid+X) = CellVal
  69.                 Pos += 1
  70.             Next
  71.             Dt.Rows.Add(Dr)
  72.         Next
  73.         Return Dt
  74.     End Function
 
发布了25 篇原创文章 · 获赞 4 · 访问量 6万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览