如何将数据表导出到多个Excel文件?
我在VB.NET中有一个数据表,其中包含以下数据: 现在我想使用VB.NET将数据导出到Excel,但我需要一个Excel文件,用于最后一列中的每个不同id。我试图这样做,但我总是得到一个Excel文件中的所有数据,而不是8个不同的文件。您能帮忙吗?您可以使用,它甚至有一种方法可以从如何将数据表导出到多个Excel文件?,excel,vb.net,datatable,Excel,Vb.net,Datatable,我在VB.NET中有一个数据表,其中包含以下数据: 现在我想使用VB.NET将数据导出到Excel,但我需要一个Excel文件,用于最后一列中的每个不同id。我试图这样做,但我总是得到一个Excel文件中的所有数据,而不是8个不同的文件。您能帮忙吗?您可以使用,它甚至有一种方法可以从数据表中导出它ws.Cells[“A1”].LoadFromDataTable(dataTable,true) 您可以使用LINQ获得表格: Dim allTableList As List(Of DataTabl
数据表中导出它<代码>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()
您可以使用,它甚至有一个从数据表导出它的方法<代码>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()
您可以遵循的步骤:
- 获取数据表中所需的数据李>
- 找到不同的ID并将其添加到数组中李>
- 遍历此数组
- 在每次迭代中,要么在工作簿中添加一张工作表,要么在某个位置创建一个全新的工作簿并使用第一张工作表。(根据您的要求)
- 使用迭代期间找到的id筛选数据表
- 将过滤后的数据写入工作表
- 对所有不同的ID重复此操作
您可以遵循的步骤:
- 获取数据表中所需的数据李>
- 找到不同的ID并将其添加到数组中李>
- 遍历此数组
- 在每次迭代中,要么在工作簿中添加一张工作表,要么在某个位置创建一个全新的工作簿并使用第一张工作表。(根据您的要求)
- 使用迭代期间找到的id筛选数据表
- 将过滤后的数据写入工作表
- 对所有不同的ID重复此操作
我在为自己构建的“日常琐事”应用程序中也做了类似的事情。我正在编写DataTable
来分隔文本文件,但基本前提应该是相同的。与@NeverHopeless所建议的类似,我已经设置了一个单独的方法来实际生成我需要的文件,这样我就可以循环通过数据表
,并且对于每个唯一的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
Dim MyData As DataTable=GetMyData()
Dim TEMPDOSIER As String=Now.ToString(“yyyyymmddhhmmssfffzz”)
对于MyData.Rows中作为DataRow的每一行
如果不是IsDBNull(行(“dossiersoort”)、也不是String.IsNullOrEmpty(行(“dossiersoort”).ToString),则
如果是行(“档案室”)。则为字符串临时档案室
Dim dossierrows()作为数据行
dossierrows=MyData。选择(“dossiersoort=”&行(“dossiersoort”)。ToString&“”)
CreateExcelFile(档案箭头)
如果结束
tempdossier=行(“dossiersoort”)。ToString
其他的
tempdosier=Now.ToString(“yyyymmddhhmmssfffzz”)
如果结束
下一排
tempdosier
变量正好帮助防止它创建重复的文件。我使用“timestamp”值(取到万分之一秒)作为在空数据情况下获得唯一值的可靠方法
CreateExcelFile
方法基本上会创建一个空的Excel文件,然后在数组中的DataRows
中循环(应该只有那些具有相同dossiersoort
值的数据行)以填充该文件。从您的操作中,听起来您已经知道如何实际创建/填充该文件,因此我将不深入讨论。您可以使用Integer
值(For dossier As Integer=0 To dossierrows.GetUpperBound(0)
或其他内容)通过一个简单的For…Next
循环轻松地遍历数组
此方法可以是一个返回布尔值的函数
,也可以是一个File.IO
对象,以确保Excel文件确实正确创建,或者是一个简单的子对象,在它将执行返回到调用方法后进行验证。我在“日常琐事”中做了类似的事情我为自己构建的应用程序。我正在编写DataTable
来分隔文本文件,但基本前提应该是相同的。与@NeverHopeless所建议的类似,我已经设置了一个单独的方法来实际生成我需要的文件,这样我就可以循环通过数据表
,并且对于每个唯一的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
Dim MyData As DataTable=GetMyData()
Dim TEMPDOSIER As String=Now.ToString(“yyyyymmddhhmmssfffzz”)
对于MyData.Rows中作为DataRow的每一行
如果不是IsDBNull(行(“dossiersoort”)、也不是String.IsNullOrEmpty(行(“dossiersoort”).ToString),则
如果是行(“档案室”)。则为字符串临时档案室
Dim dossierrows()作为数据行
dossierrows=MyData。选择(“dossiersoort=”&行(“dossiersoort”)。ToString&“”)
CreateExcelFile(档案箭头)
如果结束
tempdossier=行(“dossiersoort”)。ToString
其他的
tempdosier=Now.ToString(“yyyymmddhhmmssfffzz”)
如果结束
下一排
tempdosier
变量正好帮助防止它创建重复的文件。我使用“timestamp”值(取到万分之一秒)作为在空数据情况下获得唯一值的可靠方法
CreateExcelFile
方法基本上会创建一个空的Excel文件,然后在数组中的DataRows
中循环(应该只有那些具有相同dossiersoort
值的数据行)以填充该文件。从您的OP中,听起来您已经知道如何实际创建/填充fi