Как заставить Excel открыть файл журнала в виде текста? - PullRequest
0 голосов
/ 12 марта 2020

Я пытаюсь загрузить файл журнала в Excel, поскольку у него есть метки времени в мс, и мне нужно использовать Excel, чтобы преобразовать их во что-то читаемое.

Однако у него также есть тег xml рядом с top <?xml version='1.0' encoding='UTF-8'?>, поэтому Excel считает, что это файл xml, пытается открыть его с помощью XML, затем происходит сбой таблиц, поскольку он недействителен xml.

Я хочу открыть его как разделитель текстовый файл.

Однако даже с таким макросом он все равно пытается открыть его как XML

Workbooks.OpenText Filename:=fullpath, _
                            StartRow:=1, _
                            DataType:=xlDelimited, _
                            TextQualifier:=xlDoubleQuote, _
                            ConsecutiveDelimiter:=False, _
                            Tab:=True, _
                            Semicolon:=False, _
                            Comma:=False, _
                            Space:=False, _
                            Other:=True, _
                            OtherChar:="|"

Как заставить Excel игнорировать теги XML и открыть это как текстовый файл с разделителями?

1 Ответ

3 голосов
/ 12 марта 2020

Logi c:

  1. Считать файл
  2. Заменить "<?xml version='1.0' encoding='UTF-8'?>" на ""
  3. Записать данные в временный файл. Если у вас все в порядке с заменой исходного файла, вы также можете это сделать. Измените код соответствующим образом.
  4. Откройте текстовый файл в Excel

Это то, что вы пытаетесь? ( НЕПРОВЕРЕНО )

Код :

Option Explicit

Sub Sample()
    Dim MyData As String
    Dim FlName As String, tmpFlName As String

    '~~> I am hardcoding the paths. Please change accordingly
    FlName = "C:\Sample.xml"
    tmpFlName = "C:\Sample.txt"

    '~~> Kill tempfile name if it exists
    On Error Resume Next
    Kill tmpFlName
    On Error GoTo 0

    '~~> Open the xml file and read the data
    Open FlName For Binary As #1
    MyData = Space$(LOF(1))
    Get #1, , MyData
    '~~> Replace the relevant tag
    MyData = Replace(MyData, "<?xml version='1.0' encoding='UTF-8'?>", "")
    Close #1

    '~~> Write to a temp text file
    Open tmpFlName For Output As #1
    Print #1, MyData
    Close #1

    Workbooks.OpenText Filename:=tmpFlName, _
                                StartRow:=1, _
                                DataType:=xlDelimited, _
                                TextQualifier:=xlDoubleQuote, _
                                ConsecutiveDelimiter:=False, _
                                Tab:=True, _
                                Semicolon:=False, _
                                Comma:=False, _
                                Space:=False, _
                                Other:=True, _
                                OtherChar:="|"
End Sub

Альтернативный способ:

После

'~~> Open the xml file and read the data
Open FlName For Binary As #1
MyData = Space$(LOF(1))
Get #1, , MyData
'~~> Replace the relevant tag
MyData = Replace(MyData, "<?xml version='1.0' encoding='UTF-8'?>", "")
Close #1

используйте

strData() = Split(MyData, vbCrLf)

, а затем запишите этот массив в Excel и используйте .TextToColumns

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...