Как получить все элементы, упорядоченные в текстовый файл с листа EXCEL, используя VBA? - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть блок данных (ниже) в листе Excel, и я хочу поместить его в простой текстовый файл .txt, структурированный и разделенный запятыми, как стиль формата CSV.Вот данные:

dn: uid = 7097202

carLicense: 113363427

cn: Жан Арнофски

title: LBM356226

st: 16777212

  • Следующий блок, отделенный пустой строкой / строкой *

dn: uid = 8178194

carLicense: 154052876

cn: Marie Gaulimerg

title: LBM356227

st: 16777219

etc ...

Я использую следующий код:

Option Explicit

Sub LDIFParaCSV()
  Dim i, x, intHandle As Integer
  Dim lngNrLinhs As Long
  Dim rgnAlcance As Range
  Dim objFolhaExcel As Worksheet
  Dim strFich, strPChar As String
  Dim arrItemsSep

  Const cntEscrvFich = "csv_ldif.txt"

  intHandle = FreeFile
  Range("A2").Select

  Set objFolhaExcel = ThisWorkbook.Sheets("Sheet1")
  Set rgnAlcance = objFolhaExcel.UsedRange

  lngNrLinhs = rgnAlcance.Rows.Count + rgnAlcance.Row

  strFich = "d:\" & cntEscrvFich
  Open strFich For Output Access Write As #intHandle

  For i = 2 To lngNrLinhs + 1
    If Not IsEmpty(Cells(i, 1)) Then
       arrItemsSep = Split(Cells(i, 1), ":")
       Print #intHandle, arrItemsSep(1)
       ActiveCell.Offset(1, 0).Select
    End If
  Next

  Close #intHandle
End Sub

То, чего я пытаюсь добиться, - это поместить каждый блок данных по горизонтали в текстовый файл в одну строку (например: uid = 7097202, 113363427, Жан Арнофски, LBM356226, 16777212), а затем следующий блок вТо же самое в следующем параграфе и так далее, и так далее ...

У меня большие трудности в достижении этого ... извините, я думаю, не столько программист.Спасибо

1 Ответ

1 голос
/ 27 сентября 2019

Я только что добавил несколько строк в ваш код:

Option Explicit

Sub LDIFParaCSV()
  Dim i, x, intHandle As Integer
  Dim lngNrLinhs As Long
  Dim rgnAlcance As Range
  Dim objFolhaExcel As Worksheet
  Dim strFich, strPChar As String
  Dim arrItemsSep
  Dim printStr As String

    Const csvSeperator = ","
    Const cntEscrvFich = "csv_ldif.txt"

    printStr = ""

    intHandle = FreeFile
    Range("A2").Select

    Set objFolhaExcel = ThisWorkbook.Sheets("Tabelle1")
    Set rgnAlcance = objFolhaExcel.UsedRange

    lngNrLinhs = rgnAlcance.Rows.Count + rgnAlcance.Row

    strFich = "D:\" & cntEscrvFich
    Open strFich For Output Access Write As #intHandle

    For i = 2 To lngNrLinhs + 1
        If Not IsEmpty(Cells(i, 1)) Then
            arrItemsSep = Split(Cells(i, 1), ":")
            'collect string elements
            printStr = printStr & arrItemsSep(1) & csvSeperator
            ActiveCell.Offset(1, 0).Select
        Else
            If printStr <> "" Then                           ' empty lines at end of range?
                printStr = Left(printStr, Len(printStr) - 2) ' remove trailing seperator
                Print #intHandle, Trim(printStr)             ' trim necessary?
                printStr = ""
            End If
        End If
    Next

  Close #intHandle
End Sub
...