Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将数据表导出到多个Excel文件?_Excel_Vb.net_Datatable - Fatal编程技术网

如何将数据表导出到多个Excel文件?

如何将数据表导出到多个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

我在VB.NET中有一个数据表,其中包含以下数据:

现在我想使用VB.NET将数据导出到Excel,但我需要一个Excel文件,用于最后一列中的每个不同id。我试图这样做,但我总是得到一个Excel文件中的所有数据,而不是8个不同的文件。您能帮忙吗?

您可以使用,它甚至有一种方法可以从
数据表中导出它<代码>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