在Excel工作表中使用.Net到交错列

时间:2014-05-14 16:31:01

标签: vb.net excel .net-4.0

我正在开发一个小型的VB.Net应用程序,该应用程序将根据数据库中的多个查询生成Excel工作簿。我有一个返回包含日期(Outage_Date),ID(ID)和问题类型(Issue_Type)的数据表的查询。我试图根据ID和问题类型将它们放在交错的列中,但我很难想出这样做的逻辑。

数据表看起来像这样:

Outage_Date  ID    Issue_Type  
1/1/2010     123   Start
2/5/2010     456   Start
3/17/2011    123   Minor
1/2/2012     123   Major
9/25/2012    456   Major
10/5/2012    456   Minor

输出应如下所示:

Date         123     456
1/1/2010     Start   
2/5/2010             Start
3/17/2011    Minor
1/2/2012     Major
9/25/2012            Major
10/5/2012            Minor

如何以编程方式处理此问题?任何帮助表示赞赏。我很乐意接受psuedocode或vb.net。 :)

1 个答案:

答案 0 :(得分:0)

此方法使用LINQ to DataSet来查询DataTable,假设Option Infer On,并且是代码和伪代码的混合!我不知道你用什么来构建Excel电子表格,所以我根据ClosedXML语法编写了这部分内容。它也是未经测试的,所以让我知道它是如何工作的 - 希望它足以指出你正确的方向,虽然可能有更优雅的解决方案!

' Build a list of the IDs
Dim ids = datatable.AsEnumberable() _
    .Select(Function(dr) dr.Field(Of Integer)("ID")) _
    .Distinct() _
    .OrderBy(Function(x) x) _
    .ToList()
' Headings
Dim row = 1, col = 1
worksheet.Cell(row, col).Value = "Date"
For Each id In ids
    col += 1
    worksheet.Cell(row, col).Value = CStr(id)
Next
' Data Values
For Each dr In datatable.Rows
    row += 1
    col = 1
    worksheet.Cell(row, col).Value = dr.Field(Of Date)("Outage_Date")
    col += 1
    ' Work out how many columns to shift the issue type over
    Dim offset = ids.IndexOf(dr.Field(Of Integer)("ID"))
    col += offset
    worksheet.Cell(row, col).Value = dr.Field(Of String)("Issue_Type")
Next