vb.net - 当“列”是基于行的,需要旋转时,在 Windows 窗体应用程序中使用 vb.net 将 .csv 文件合并到 datagridview
问题描述
我在一个目录中有一个 .csv 文件列表(大约 120 个),我需要将其合并并导出到单个 csv 文件中以及放入 sql 服务器中。为此,我将有一个按钮,它将所有 csv 文件信息放入 datagridview 中,然后将 datagridview 导出到 csv 文件并导入到 sql 表中。除了处理 csv 文件的格式之外,我可以完成所有这些工作。csv 文件以一种奇怪的方式保存,其中列标题在 A 列下,数据在 B 列中。我基本上需要旋转表,然后上传到 datagridview。我不知道该怎么做:
.csv 文件示例:
编辑:我将所有 133 个列标题手动添加到 Datagridview。
Column A Column B
Column Header 1 Data for Column Header 1
Column Header 2 Data for column Header 2
...... .........
Column Header 133 Data for column Header 133
我需要列标题和信息不在这样的 2 列中。我可以使用 excel 手动更改 csv 文件,但这将用于 100 个文件。
到目前为止,这是我的代码
Try
Dim thereader As New StreamReader("Y:\Public\Sanmina Production\3-Projector MTF Test\MTFTest_LJ902A180412AT00022_2019-04-10_17-14-11.csv", Encoding.Default)
Dim sline As String = ""
Dim colsexpected As Integer = 133
Do
sline = thereader.ReadLine
If sline Is Nothing Then Exit Do
'Dim words() As String = sline.Split(",")
Dim keptwords As New List(Of String)
Dim dataentry() As String = sline.Split(",")
'DataGridView1.Rows.Add("")
For ix As Integer = 0 To 132
'DataGridView1.Rows(DataGridView1.Rows.Count - 1).Cells(ix).Value = dataentry
'keptwords.Add(dataentry(1))
kkeptwords.
Next
Dim sResult As String = ""
For Each elem As String In keptwords
sResult &= elem & " "
Next
MsgBox(sResult)
Loop
thereader.Close()
Catch ex As Exception
MsgBox(ex.ToString)
End Try
'strFileName = Dir()
'Loop
Catch ex As Exception
MsgBox(ex.ToString)
End Try
添加空白行后,我停止了编码,因为我意识到我的结果会是什么。
解决方案
我现在已经使这个工作处于最佳状态。我有目录循环工作,发现大部分错误来自没有将正确的空白行添加到正确的位置。此代码现在可以完全正常工作。但是,我最终使用了一种迂回的方法,通过查找字母 MTF 或 csv 文件中没有数据来跳过不需要的数据。这是有效的更新代码。
Try
DataGridView1.Rows.Add("")
lblFile.Text = "Working"
Dim i As Integer = 0
Dim RowEdit As Integer = 0
Dim Files() As String = Directory.GetFiles("Y:\Public\test\", "*.csv", SearchOption.TopDirectoryOnly)
Dim ArrLength As Integer = Files.Length
Dim ProgressBarStep As Decimal = 100 / ArrLength
Dim ProgressBarTotal As Decimal = Nothing
Dim sResult As String = ""
For Each element As String In Files
sResult &= element & " "
Next
'MsgBox(sResult)
For Each element As String In Files
'lblFile.Text = element
PB1.Value = ProgressBarTotal
Try
i = 0
Using myReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(element)
myReader.TextFieldType = FileIO.FieldType.Delimited
myReader.SetDelimiters(",")
Dim currentRow As String()
While Not myReader.EndOfData
Try
currentRow = myReader.ReadFields()
Dim currentField As String
For Each currentField In currentRow
If currentField = "" Then
'Must be value
DataGridView1.Rows(0).Cells(i).Value = currentField
i = i + 1
Else
If currentField.Substring(0, 1) = "M" Then
If currentField.Substring(1, 1) = "T" Then
If currentField.Substring(2, 1) = "F" Then
'Skip this one
' MsgBox("Skip")
Else
DataGridView1.Rows(0).Cells(i).Value = currentField
i = i + 1
End If
Else
DataGridView1.Rows(0).Cells(i).Value = currentField
i = i + 1
End If
Else
DataGridView1.Rows(0).Cells(i).Value = currentField
i = i + 1
End If
End If
Next
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End While
End Using
DataGridView1.Rows.Add("")
'RowEdit = RowEdit + 1
'Select bottom row
Dim nRowIndexLast As Integer = DataGridView1.Rows.Count - 1
DataGridView1.Rows(nRowIndexLast).Selected = True
Dim CurrentRow1 As DataGridViewRow = DataGridView1.CurrentRow
Dim results As DataGridViewRow = CType(CurrentRow1.Clone(), DataGridViewRow)
Dim currentindex As Int32 = DataGridView1.CurrentRow.Index
DataGridView1.Rows.RemoveAt(currentindex)
Dim newindex As Int32 = 0
DataGridView1.Rows.Insert(0, results)
ProgressBarTotal = ProgressBarTotal + ProgressBarStep
i = 0
Catch ex As Exception
MsgBox(ex.ToString)
End Try
Next
DataGridView1.Rows.RemoveAt(DataGridView1.Rows.Count - 1)
Catch ex As Exception
MsgBox(ex.ToString)
End Try
DataGridView1.Rows.RemoveAt(0)
lblFile.Text = "Complete"
推荐阅读
- javascript - django 管理列表自定义按钮的点击事件
- azure - 是否可以使用部分电子邮件地址在 Azure AD 中搜索用户
- typescript - 打字稿函数/回调类型:分配具有“错误”返回值的函数时没有错误
- linux - 如何在终端上将二进制文本转换为 ASCII?
- java - 带有 GUI 的 Java 中的计时器
- python - 使用 python 从 Firebase 存储下载文件链接
- asp.net - 在 ASP.Net 应用程序中使用多个表单标签时会发生什么?
- javascript - 在没有console.log的情况下登录vuejs
- ibm-watson - IBM Watson Visual Recognition Text Prebuilt 模型
- distributed - StreamSets 中的分布式执行