Конвертировать строку Excel в один текстовый файл - PullRequest
0 голосов
/ 25 сентября 2019

Мне нужно создать текстовый файл для электронной таблицы Excel.Однако количество столбцов и строк заранее неизвестно, и формат должен быть достаточно конкретным.Например, с учетом следующего формата Excel:

ID1 | ID2 |ID3
97  | 12  | 47
08  | 09  | 54
17  | 46  | 07

Выходной текстовый файл (текстовый файл) будет выглядеть следующим образом:

97,ID2:12;ID3:47
08,ID2:09;ID3:54
17,ID2:46;ID3:07

Существует ли простой способ сделать это, используяVBA?

В настоящее время я пробовал ниже макроса:

Sub WriteToTextFile()
    Dim iLastRow As Long
    Dim iLastCol As Long
    iLastRow = Range("A" & Rows.Count).End(xlUp).Row
    iLastCol = Cells(1, Columns.Count).End(xlToLeft).Column
    Open "C:\Users\Admin\Desktop\123.txt" For Output As #1
    For i = 1 To iLastRow
        For j = 1 To iLastCol
            If j <> iLastCol Then
                Print #1, "ID1: "; Cells(i, j),
            Else
                Print #1, "ID2: "; Cells(i, j)
            End If
        Next j
    Next i
    Close #1
    Shell "notepad.exe ""C:\Users\Admin\Desktop\123.txt", vbNormalFocus
End Sub

Используя вышеупомянутый макрос, я получу вывод, как указано ниже:

ID1: Col1     ID1: Col2     ID1: Col3     ID4: Col4
ID1:  1234567890            ID1: AJAY     ID1:  70      ID4:  72 
ID1:  1234567890            ID1: AJAY     ID1:  71      ID4:  73 
ID1:  1234567890            ID1: AJAY     ID1:  72      ID4:  74 

Но янужен вывод, как указано ниже:

Col1,Col2,Col3,Col4
1234567890,ID2: AJAY,ID3: 70,ID4: 72 
1234567890,ID2: AJAY,ID3: 71,ID4: 73

Пожалуйста, помогите мне!

1 Ответ

0 голосов
/ 26 сентября 2019

Вам просто нужно немного отрегулировать выходную часть, как вы генерируете каждую строку:

Option Explicit

Public Sub WriteToTextFile()
    Dim ws As Worksheet
    Set ws = ActiveSheet 'better by its name: ThisWorkbook.Worksheets("Sheet1")

    Dim LastRow As Long
    LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    Dim LastCol As Long
    LastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column

    Open "C:\Users\Admin\Desktop\123.txt" For Output As #1

    Dim iRow As Long
    For iRow = 2 To LastRow
        Dim OutputLine As String

        Dim iCol As Long
        For iCol = 1 To LastCol
            If iCol = 1 Then 'first column (is different)
                OutputLine = ws.Cells(iRow, iCol).Text
            Else 'append other columns
                OutputLine = OutputLine & "," & ws.Cells(1, iCol).Text & ": " & ws.Cells(iRow, iCol).Text
            End If
        Next iCol
        'Debug.Print OutputLine
        Print #1, OutputLine 'output the full line to the text file
    Next iRow

    Close #1
    Shell "notepad.exe ""C:\Users\Admin\Desktop\123.txt""", vbNormalFocus
End Sub

Это выдаст

97,ID2: 12,ID3: 47
08,ID2: 09,ID3: 54
17,ID2: 46,ID3: 07

, если исходные данные были enter image description here

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