programing

VBA를 사용하여 Linux 텍스트 파일을 Excel로 로드

lovejava 2023. 6. 28. 21:13

VBA를 사용하여 Linux 텍스트 파일을 Excel로 로드

리눅스에서 만든 텍스트 파일이 있는데 워드패드에서 열면 파일이 정상적으로 나타납니다.그러나 메모장에서 열 때 아래 코드를 사용하여 엑셀에 로드하려고 하면 한 줄로 표시됩니다.

' Open the file
Open Filename For Input As #1

' Look for the Table Title
Do While Not (EOF(1) Or InStr(TextLine, TableTitle) > 0)
    Line Input #1, TextLine
Loop

원래 줄로 어떻게 나눌 수 있나요?vba가 사용할 수 있는 End of line separator가 있습니까?

리눅스는 라인피드(\n) 캐리지 리턴+라인피드가 아닌 새 라인을 나타냅니다.\r\nWindows에서 사용하는 것처럼 사용할 수 없습니다.Line input대신:

Open Filename For Input As #1
'//load all
buff = Input$(LOF(1), #1)
Close #1

'//*either* replace all lf -> crlf
buff = replace$(buff, vbLf, vbCrLf)
msgbox buff

'//*or* line by line
dim lines() As String: lines = split(buff, vbLf)
for i = 0 To UBound(lines)
   msgbox lines(i)
next

더 펑션

Public Function GetLines(fpath$) As Variant
    'REFERENCES:
    'Microsoft Scripting Runtime // Scripting.FileSystemObject
    'Microsoft VBScript Regular Expressions 5.5 // VBScript_RegExp_55.RegExp
    Dim fso As New Scripting.FileSystemObject, RE As New VBScript_RegExp_55.RegExp
    If fso.FileExists(fpath) = True Then
        Dim mts As MatchCollection, mt As Match
        Dim lines() As String
        Dim content$: content = fso.OpenTextFile(fpath).ReadAll()
        With RE
            .Global = True
            .Pattern = "[^\r\n]+" 'catch all characters except NewLines/Carraige Returns
            If .test(content) = True Then
                Set mts = .Execute(content)
                ReDim lines(mts.Count - 1)
                Dim pos&
                For Each mt In mts
                    lines(pos) = mt.Value
                    pos = pos + 1
                Next mt
            Else
                MsgBox "'" & Dir(fpath) & "' contains zero bytes!", vbExclamation
            End If
        End With
        GetLines = lines
    Else
        MsgBox "File not found at:" & vbCrLf & Dir(fpath), vbCritical
    End If
End Function

그리고 (에서)에 의해 호출될 수 있습니다.immediate window)

?GetLines("C:\BOOT.INI")(2)

및 산출물

default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS

위의 예를 사용하여 모든 OS에서 발생한 텍스트 파일의 모든 행을 가져올 수 있습니다.


이게 도움이 되길 바랍니다.

Windows "WordPad"를 사용하여 Linux 텍스트 파일을 엽니다.파일을 저장합니다.WordPad는 파일을 저장할 때 Linux 라인피드(\n)를 캐리지 리턴+라인피드(\r\n)로 변환합니다.코딩은 필요하지 않습니다.

언급URL : https://stackoverflow.com/questions/10945779/loading-linux-text-file-into-excel-using-vba