1

テキスト ファイルを Excel に読み込むための非常に単純なパーサーを作成しています。ファイルは Excel 2012 で利用可能な行を超えているため、行ごとのアプローチを採用する必要があります。

Microsoft Scripting Runtime Library、TextStream オブジェクト、および ReadLine メソッドをテストしました。

行末として CRLF を含む Windows ファイルがある限りは正常に動作しますが、LF のみが行末をマークしている場合は失敗します。

VBA 以外の解決策をたくさん見てきましたが、VBA 内で実行可能な解決策はありますか?

前もって感謝します

4

3 に答える 3

0

c:\temp\lfs.txt の行末として LF のみを使用するテスト ファイルを作成することから始めます。

これにより、ファイルが文字列に読み込まれます。

Dim FileNum As Integer
Dim sBuf As String
Dim sTemp As String

 FileNum = FreeFile
 Open "c:\temp\lfs.txt" For Input As FileNum

 While Not EOF(FileNum)
     Line Input #FileNum, sBuf
     sTemp = sTemp & sBuf
 Wend

 Close FileNum

' Now, what do we have?  First the string itself:
Debug.Print sTemp
' Are there any CRs in it?  
Debug.Print Replace(sTemp, vbCr, "CR")
' LFs?
Debug.Print Replace(sTemp, vbLf, "LF")
' Replace the LFs with CRLFs:
Debug.Print Replace(sTemp, vbLf, vbCrLf)

Now if you write it back out to file, you should be able to use it
于 2013-03-23T17:48:36.593 に答える
0

LF で区切られた次の非常に単純なテキスト ファイルを使用しました。次のvbaコードは私にとってはうまくいきます。TextStream.ReadLine メソッドが失敗するテキスト ファイル データの短いサンプルを投稿できますか?

ここに画像の説明を入力

Private Const TEXT_FILE_PATH As String = "C:\Temp\VBA\textFileForUnix.txt"

Public Sub test()
    Dim targetSheet As Worksheet
    Set targetSheet = ThisWorkbook.ActiveSheet
    ReadText sheet:=targetSheet, textFilePath:=TEXT_FILE_PATH
End Sub

Private Sub ReadText(ByRef sheet As Worksheet, ByRef textFilePath As String)
    Dim scriptingFileSystem As Scripting.FileSystemObject
    Dim scriptingFile As Scripting.File
    Dim scriptingStream As Scripting.TextStream

    Set scriptingFileSystem = New Scripting.FileSystemObject
    Set scriptingFile = scriptingFileSystem.GetFile(textFilePath)

    Set scriptingStream = scriptingFile.OpenAsTextStream(ForReading)
    Dim r As Long
    Dim c As Byte
    With scriptingStream
        r = 1
        c = 1
        Do While Not .AtEndOfStream
          sheet.Cells(r, c).Value = .ReadLine
          r = r + 1
        Loop
       .Close
    End With

    Set scriptingFile = Nothing
    Set scriptingFileSystem = Nothing
End Sub
于 2013-03-24T09:06:34.587 に答える