vb.net 将文本文件导入 excel 以空格分隔
vb.net to import text file into excel delimited by spaces
想知道是否有人有示例代码 vb 将文本文件导入 excel 并以空格分隔 - 不管空格的数量。在文本文件中有例如 100k 行,在每一行中,每个单词可以由一个、两个或三个等空格分隔。
导入excel的结果是文本文件中的每一行都在每一行中,每一行中用空格分隔的每个单词都在该行的每一列中。
我试图通过读取文本文件中的每一行然后为每一行解析每个单词,并将这些放入一个变量然后将其写入 excel 来完成此操作。我认为这种方式需要更长的时间,而且我正在解析每一行。但是我认为如果可以的话,将文本文件导入到由空格分隔的 excel 中会更快。我使用 vb 而不是 vba 的原因是因为 vb 可以创建一个可执行文件,该文件可以由调度程序 运行 执行。谢谢
Dim reader As New System.IO.StreamReader("C:\test.txt")
Dim allLines As List(Of String) = New List(Of String)
Dim stringreader As String
Dim a As String
stringreader = filereader.ReadLine()
Do While Not reader.EndOfStream
allLines.Add(reader.ReadLine())
stringreader = reader.ReadLine()
MsgBox("The first line of the file is " & stringreader)
Loop
在此示例中,首先打开 StreamReader
和 Excel
。然后添加新的Workbook
和新的Worksheet
。最后逐行读取文本文件。每行按空格分隔并写入 Excel Worksheet
。处理完文本文件后,Stream
关闭,而带有结果的 Excel
保持打开状态。 HTH
Install Office Primary Interop Assemblies for your version of Excel.
(Example uses reference to Ecel 2007 PIA: C:\Windows\assembly\GAC\Microsoft.Office.Interop.Excel.0.0.0__71e9bce111e9429c\Microsoft.Office.Interop.Excel.dll)
Imports System.IO
Imports ExcelInterop = Microsoft.Office.Interop.Excel
Module Module2
Sub Main()
Dim reader As StreamReader = New StreamReader("C:\test.txt")
Dim targetWorksheet As ExcelInterop.Worksheet = GetTargetWorksheet("c:\test.xls")
if targetWorksheet Is Nothing Then
Exit Sub
End If
Try
Dim line As String
Dim lineIndex As Long = 1
Do While reader.Peek() >= 0
line = reader.ReadLine()
WriteToExcel(line, targetWorksheet, lineIndex)
lineIndex += 1
Loop
Catch ex As Exception
Debug.WriteLine("The file could not be read:")
Debug.WriteLine(ex.Message)
finally
If Not reader Is Nothing Then
reader.Close()
End If
End Try
End Sub
Private Sub WriteToExcel(line As String, targetWorksheet As ExcelInterop.Worksheet, lineIndex As Long)
Dim column As Integer = 1
For Each part As String In line.Split(" ")
targetWorksheet.Cells(lineIndex, column).Value =part
column += 1
Next
End Sub
Private Function GetTargetWorksheet(targetPath As String) As ExcelInterop.Worksheet
Try
Dim excelApplication = New ExcelInterop.Application
excelApplication.Visible = True
Dim excelWorkbook As ExcelInterop.Workbook
excelWorkbook = excelApplication.Workbooks.Add()
excelWorkbook.SaveAs(targetPath)
Dim excelWorksheet As ExcelInterop.Worksheet = excelWorkbook.Worksheets.Add()
excelWorksheet.Name = "Import"
return excelWorksheet
Catch ex As Exception
Debug.WriteLine("The excel worksheet could not be created:")
Debug.WriteLine(ex.Message)
End Try
Return Nothing
End Function
End Module
编辑:
可以使用 Excel
的 QueryTables
来导入文本数据。有一些设置需要考虑,例如 TextFileColumnDataTypes
。在此示例中,所有列都设置为 xlColumnDataType.xlTextFormat
.
Sub Main()
Dim targetWorksheet As Worksheet = GetTargetWorksheet("c:\test.xls")
if targetWorksheet Is Nothing Then
Debug.WriteLine("Target sheet is Nothing.")
Exit Sub
End If
Try
Dim qt As QueryTable
qt = targetWorksheet.QueryTables.Add( _
Connection:="TEXT;C:\test.txt", _
Destination:=targetWorksheet.Range("$A"))
With qt
.Name = "Import"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = XlCellInsertionMode.xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 1252
.TextFileStartRow = 1
.TextFileParseType = XlTextParsingType.xlDelimited
.TextFileTextQualifier = XlTextQualifier.xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = True
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = True
.TextFileColumnDataTypes = GetColumnDataTypes(targetWorksheet.Columns.Count)
.TextFileTrailingMinusNumbers = True
.Refresh(BackgroundQuery := False)
End With
Catch ex As Exception
Debug.WriteLine("The file could not be read:")
Debug.WriteLine(ex.Message)
End Try
End Sub
Private Function GetColumnDataTypes(queryTableColumnsCount As long) As Object
Dim textDataTypes As xlColumnDataType()
textDataTypes = Enumerable.Repeat(xlColumnDataType.xlTextFormat, queryTableColumnsCount).ToArray()
Return textDataTypes
End Function
想知道是否有人有示例代码 vb 将文本文件导入 excel 并以空格分隔 - 不管空格的数量。在文本文件中有例如 100k 行,在每一行中,每个单词可以由一个、两个或三个等空格分隔。
导入excel的结果是文本文件中的每一行都在每一行中,每一行中用空格分隔的每个单词都在该行的每一列中。
我试图通过读取文本文件中的每一行然后为每一行解析每个单词,并将这些放入一个变量然后将其写入 excel 来完成此操作。我认为这种方式需要更长的时间,而且我正在解析每一行。但是我认为如果可以的话,将文本文件导入到由空格分隔的 excel 中会更快。我使用 vb 而不是 vba 的原因是因为 vb 可以创建一个可执行文件,该文件可以由调度程序 运行 执行。谢谢
Dim reader As New System.IO.StreamReader("C:\test.txt")
Dim allLines As List(Of String) = New List(Of String)
Dim stringreader As String
Dim a As String
stringreader = filereader.ReadLine()
Do While Not reader.EndOfStream
allLines.Add(reader.ReadLine())
stringreader = reader.ReadLine()
MsgBox("The first line of the file is " & stringreader)
Loop
在此示例中,首先打开 StreamReader
和 Excel
。然后添加新的Workbook
和新的Worksheet
。最后逐行读取文本文件。每行按空格分隔并写入 Excel Worksheet
。处理完文本文件后,Stream
关闭,而带有结果的 Excel
保持打开状态。 HTH
Install Office Primary Interop Assemblies for your version of Excel.
(Example uses reference to Ecel 2007 PIA: C:\Windows\assembly\GAC\Microsoft.Office.Interop.Excel.0.0.0__71e9bce111e9429c\Microsoft.Office.Interop.Excel.dll)
Imports System.IO
Imports ExcelInterop = Microsoft.Office.Interop.Excel
Module Module2
Sub Main()
Dim reader As StreamReader = New StreamReader("C:\test.txt")
Dim targetWorksheet As ExcelInterop.Worksheet = GetTargetWorksheet("c:\test.xls")
if targetWorksheet Is Nothing Then
Exit Sub
End If
Try
Dim line As String
Dim lineIndex As Long = 1
Do While reader.Peek() >= 0
line = reader.ReadLine()
WriteToExcel(line, targetWorksheet, lineIndex)
lineIndex += 1
Loop
Catch ex As Exception
Debug.WriteLine("The file could not be read:")
Debug.WriteLine(ex.Message)
finally
If Not reader Is Nothing Then
reader.Close()
End If
End Try
End Sub
Private Sub WriteToExcel(line As String, targetWorksheet As ExcelInterop.Worksheet, lineIndex As Long)
Dim column As Integer = 1
For Each part As String In line.Split(" ")
targetWorksheet.Cells(lineIndex, column).Value =part
column += 1
Next
End Sub
Private Function GetTargetWorksheet(targetPath As String) As ExcelInterop.Worksheet
Try
Dim excelApplication = New ExcelInterop.Application
excelApplication.Visible = True
Dim excelWorkbook As ExcelInterop.Workbook
excelWorkbook = excelApplication.Workbooks.Add()
excelWorkbook.SaveAs(targetPath)
Dim excelWorksheet As ExcelInterop.Worksheet = excelWorkbook.Worksheets.Add()
excelWorksheet.Name = "Import"
return excelWorksheet
Catch ex As Exception
Debug.WriteLine("The excel worksheet could not be created:")
Debug.WriteLine(ex.Message)
End Try
Return Nothing
End Function
End Module
编辑:
可以使用 Excel
的 QueryTables
来导入文本数据。有一些设置需要考虑,例如 TextFileColumnDataTypes
。在此示例中,所有列都设置为 xlColumnDataType.xlTextFormat
.
Sub Main()
Dim targetWorksheet As Worksheet = GetTargetWorksheet("c:\test.xls")
if targetWorksheet Is Nothing Then
Debug.WriteLine("Target sheet is Nothing.")
Exit Sub
End If
Try
Dim qt As QueryTable
qt = targetWorksheet.QueryTables.Add( _
Connection:="TEXT;C:\test.txt", _
Destination:=targetWorksheet.Range("$A"))
With qt
.Name = "Import"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = XlCellInsertionMode.xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 1252
.TextFileStartRow = 1
.TextFileParseType = XlTextParsingType.xlDelimited
.TextFileTextQualifier = XlTextQualifier.xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = True
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = True
.TextFileColumnDataTypes = GetColumnDataTypes(targetWorksheet.Columns.Count)
.TextFileTrailingMinusNumbers = True
.Refresh(BackgroundQuery := False)
End With
Catch ex As Exception
Debug.WriteLine("The file could not be read:")
Debug.WriteLine(ex.Message)
End Try
End Sub
Private Function GetColumnDataTypes(queryTableColumnsCount As long) As Object
Dim textDataTypes As xlColumnDataType()
textDataTypes = Enumerable.Repeat(xlColumnDataType.xlTextFormat, queryTableColumnsCount).ToArray()
Return textDataTypes
End Function