我在VB.NET中有一个数据表,其中包含以下数据:
现在,我想使用VB.NET将数据导出到Excel,但是我需要在最后一列中为每个不同的ID提供一个Excel文件。我尝试这样做,但是我总是得到1个包含所有数据的Excel文件,而不是8个不同的文件。你能帮忙吗?
答案 0 :(得分:1)
您可以使用EPPlus
,甚至可以从DataTable
导出它。 ws.Cells["A1"].LoadFromDataTable(dataTable, true);
您使用LINQ获得表:
Dim allTableList As List(Of DataTable) = yourTable.AsEnumerable().
GroupBy(Function(row) row.Field(Of Int32)("Dossiersort")).
Select(Function(rowGrp) rowGrp.CopyToDataTable()).
ToList()
答案 1 :(得分:1)
您可以遵循的步骤:
答案 2 :(得分:0)
我在为自己构建的“日常琐事”应用程序中执行了类似的操作。我正在写DataTable
来分隔文本文件,但是基本前提应该是相同的。与@NeverHopeless提出的类似,我设置了一个单独的方法来实际生成所需的文件,以便可以遍历DataTable
,并针对每个唯一的ID执行此方法。以下内容显然非常简化,需要进行修改以满足您的要求,但是基本元素都应该存在:
Dim MyData As DataTable = GetMyData()
Dim tempdossier As String = Now.ToString("yyyyMMddHHmmssffffzz")
For Each Row As DataRow In MyData.Rows
If Not IsDBNull(Row("dossiersoort")) AndAlso Not String.IsNullOrEmpty(Row("dossiersoort").ToString) Then
If Row("dossiersoort").ToString <> tempdossier then
Dim dossierrows() As DataRow
dossierrows = MyData.Select("dossiersoort = '" & Row("dossiersoort").ToString & "'")
CreateExcelFile(dossierrows)
End If
tempdossier = Row("dossiersoort").ToString
Else
tempdossier = Now.ToString("yyyyMMddHHmmssffffzz")
End If
Next Row
tempdossier
变量仅用于防止其创建重复文件。我将“时间戳”值(取到十分之一秒)用作在空数据情况下获取唯一值的一种可靠方法。
CreateExcelFile
方法将基本上创建一个空的Excel文件,然后循环遍历数组中的DataRows
(只能是具有相同dossiersoort
值的数组)以填充文件。在您的OP中,听起来您已经知道如何实际创建/填充文件,所以我不再赘述。您可以使用For...Next
值(Integer
或类似值)通过简单的For dossier As Integer = 0 To dossierrows.GetUpperBound(0)
循环轻松遍历数组。
此方法可以是返回Function
值的Boolean
或可以确保正确创建Excel文件的File.IO
对象,也可以是带有{验证发生在将执行返回给调用方法之后。