2016-12-23 4 views
1

задавался вопросом, есть ли у кого-нибудь пример кода vb для импорта текстового файла в excel, ограниченном пробелами - независимо от количества пробелов. В текстовом файле есть, например, строки 100k, и в каждой строке каждое слово может быть разделено одним, двумя или тремя и т. Д.vb.net для импорта текстового файла в excel, ограниченном пробелами

результат импорта в 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 

ответ

1

В этом примере StreamReader и Excel открыты первые. Затем добавляются новые Workbook и новые Worksheet. Наконец, текстовый файл читается по строкам. Каждая строка разделяется на пробелы и записывается в Excel Worksheet. После обработки текстового файла Stream закрыт и Excel с результатами остается открытым. HTH

Установите Office Primary Interop Assemblies для вашей версии Excel.

(пример использует ссылку на ECEL 2007 PIA: C: \ Windows \ сборки \ GAC \ Microsoft.Office.Interop.Excel \ 12.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 

EDIT:

можно использовать QueryTables из Excel для импорта текстовых данных. Есть некоторые настройки, которые следует учитывать, например, 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$1")) 

     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 
+0

привет, спасибо за пример кода. Он выглядит очень хорошо и отлично работает. Только в том, что в строке из строки в текстовом файле пробелы между каждыми словами могут быть непредсказуемыми, у них может быть 1, 2, 3 или много больше пробелов. Поэтому я сделал поиск в Интернете, чтобы найти код, который удаляет лишние пробелы и добавляется в вашу функцию writetoexcel, и он работает как шарм. поэтому теперь пробелы не записываются в excel-столбец, если есть дополнительные пробелы. – Johnseito

+0

В любом случае, если код отличный и все благодаря вам, мне было интересно, есть ли возможность в vb импортировать текстовый файл в excel и не читать каждую строку за строкой и писать каждую строку за строкой, чтобы преуспеть. Импорт, я думаю, намного быстрее, если, например, для большого файла с 500k строк, если vb не может этого сделать, это тоже хорошо. Еще раз спасибо за отличный код! :) – Johnseito

+0

Добро пожаловать, я рад, что это помогло! :). См. Отредактированный ответ для других возможностей excel для импорта текстовых данных. – dee

Смежные вопросы