带有来自其他数据集的标头的多个csv [英] Multiple csv with header from other dataset
问题描述
我有以下代码;我可以从数据库导出数据,但我想为每行数据创建多个csv文件。
私有函数SetProperties(ByVal名称,ByVal值)作为对象
Dim objServiceManager As Object
Dim objStruct As Object
objServiceManager = CreateObject(com.sun.star.ServiceManager)
objStruct = objServiceManager.Bridge_GetStruct(com.sun.star.beans.PropertyValue)
objStruct.Name = Name
objStruct.Value = Value
SetProperties = objStruct
结束功能
Public Sub ExportCSV()
Dim counter As Integer = 1
while counter< = frmExtract.DataGridView1.RowCount
Dim strFilename As String =test&counter&.csv
Dim Csv As New Exporter()
使用CsvWriter作为新的StreamWriter(C:\Documents and Settings \frgits9 \\Desktop \harold_files\test_folder \&strFilename)
CsvWriter.Write(Csv.CsvFromDatatable(GetSampleData()))
结束使用
柜台+ = 1
cn.Close()
结束时
End Sub
- ------------------
公共函数GetSampleData()As DataTable
conn()
Dim da As New SqlDataAdapter(spOutBoundProoflist,cn)
Dim ProoflistData As New DataSet()
da.Fill(ProoflistData,Prooflist)
返回ProoflistData.Tables(0)
cn.Close()
结束功能
------- --------
公共函数GetSampleData2()As DataTable
conn()
Dim da As New SqlDataAdapter(spgetheader ,cn)
Dim Prooflistheader作为新数据集()
da.Fill(Prooflistheader,Prooflistheader)
返回Prooflistheader.Tables(0)
cn.Close()
结束功能
------- -----------------
公共类出口商
Public Sub New()
TextDelimiter =|c
HasColumnHeaders = True
结束子
公共财产TextDelimiter()作为Char
获取
返回_TextDelimiter
结束获取
设置(ByVal值为Char)
_TextDelimiter = value
结束集
结束财产
公共财产HasColumnHeaders()作为布尔值
获取
返回_HasColumnHeaders
结束获取
设置(ByVal值为布尔值)
_HasColumnHeaders = value
结束集
结束物业
公共函数CsvFromDatatable(ByVal InputTable As DataTable)As String
Dim CsvBuilder As New StringBuilder()
If HasColumnHeaders Then
CreateHeader(InputTable,CsvBuilder) )
结束如果
CreateRows(InputTable,CsvBuilder)
返回CsvBuilder.ToString()
结束函数
Private Sub CreateRows(ByVal InputTable As DataTable,ByVal CsvBuilder As StringBuilder)
For Each ExportRow As DataRow In InputTable.Rows
For Each ExportColumn As InputTable.Columns中的DataColumn
Dim ColumnText As String = ExportRow(ExportColumn.ColumnName).ToString()
CsvBuilder.Append(ColumnText)
CsvBuilder.Append(TextDelimiter)
下一页
CsvBuilder.AppendLi ne()
下一页
End Sub
Private Sub CreateHeader(ByVal InputTable As DataTable,ByVal CsvBuilder As StringBuilder)
$ b每个ExportColumn的$ b作为InputTable.Columns中的DataColumn
Dim ColumnText As String = ExportColumn.ColumnName.ToString()
CsvBuilder.Append(ExportColumn.ColumnName)
CsvBuilder.Append(TextDelimiter)
下一页
CsvBuilder.AppendLine()
结束子
结束类
I have the following codes; I can export data from database but i want to create multiple csv file per Row of data.
Private Function SetProperties(ByVal Name, ByVal Value) As Object
Dim objServiceManager As Object
Dim objStruct As Object
objServiceManager = CreateObject("com.sun.star.ServiceManager")
objStruct = objServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
objStruct.Name = Name
objStruct.Value = Value
SetProperties = objStruct
End Function
Public Sub ExportCSV()
Dim counter As Integer = 1
While counter <= frmExtract.DataGridView1.RowCount
Dim strFilename As String = "test" & counter & ".csv"
Dim Csv As New Exporter()
Using CsvWriter As New StreamWriter("C:\Documents and Settings\frgits9\Desktop\harold_files\test_folder\" & strFilename)
CsvWriter.Write(Csv.CsvFromDatatable(GetSampleData()))
End Using
counter += 1
cn.Close()
End While
End Sub
--------------------
Public Function GetSampleData() As DataTable
conn()
Dim da As New SqlDataAdapter("spOutBoundProoflist", cn)
Dim ProoflistData As New DataSet()
da.Fill(ProoflistData, "Prooflist")
Return ProoflistData.Tables(0)
cn.Close()
End Function
---------------
Public Function GetSampleData2() As DataTable
conn()
Dim da As New SqlDataAdapter("spgetheader", cn)
Dim Prooflistheader As New DataSet()
da.Fill(Prooflistheader,"Prooflistheader")
Return Prooflistheader.Tables(0)
cn.Close()
End Function
------------------------
Public Class Exporter
Public Sub New()
TextDelimiter = "|"c
HasColumnHeaders = True
End Sub
Public Property TextDelimiter() As Char
Get
Return _TextDelimiter
End Get
Set(ByVal value As Char)
_TextDelimiter = value
End Set
End Property
Public Property HasColumnHeaders() As Boolean
Get
Return _HasColumnHeaders
End Get
Set(ByVal value As Boolean)
_HasColumnHeaders = value
End Set
End Property
Public Function CsvFromDatatable(ByVal InputTable As DataTable) As String
Dim CsvBuilder As New StringBuilder()
If HasColumnHeaders Then
CreateHeader(InputTable, CsvBuilder)
End If
CreateRows(InputTable, CsvBuilder)
Return CsvBuilder.ToString()
End Function
Private Sub CreateRows(ByVal InputTable As DataTable, ByVal CsvBuilder As StringBuilder)
For Each ExportRow As DataRow In InputTable.Rows
For Each ExportColumn As DataColumn In InputTable.Columns
Dim ColumnText As String = ExportRow(ExportColumn.ColumnName).ToString()
CsvBuilder.Append(ColumnText)
CsvBuilder.Append(TextDelimiter)
Next
CsvBuilder.AppendLine()
Next
End Sub
Private Sub CreateHeader(ByVal InputTable As DataTable, ByVal CsvBuilder As StringBuilder)
For Each ExportColumn As DataColumn In InputTable.Columns
Dim ColumnText As String = ExportColumn.ColumnName.ToString()
CsvBuilder.Append(ExportColumn.ColumnName)
CsvBuilder.Append(TextDelimiter)
Next
CsvBuilder.AppendLine()
End Sub
End Class
推荐答案
这是代码 -
Here is the code -
foreach (DataTable table in Ds.Tables)
{
foreach (DataRow row in table.Rows)
{
ID_Queue=ID_Queue+1;
CSVData=String.Concat("Field1,Field2,Field3,Field4,Field5",Environment.NewLine);
CSVData=String.Concat(CSVData, row[0].ToString(),",", row[1].ToString(),",", row[2].ToString(),",", row[3].ToString(),",", row[4].ToString());
System.IO.StreamWriter file = new System.IO.StreamWriter(String.Concat("CSV",ID_Queue.ToString(),".csv"));
file.WriteLine(CSVData);
file.Close();
}
}
这篇关于带有来自其他数据集的标头的多个csv的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!