Процедура экспорта текстового файла с разделителями цитат в строке 1 - Excel - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть код ниже с сайта поддержки Microsoft LINK

Проблема в том, что он работает слишком хорошо. Мне нужна только первая строка столбцов (в основном заголовков таблиц) с квалификатором "". Код ниже применил "" ко всем ячейкам.

Я не знаю, как сделать это изменение. Любая помощь будет принята с благодарностью!

Большое спасибо, OM

Sub QuoteCommaExport()
   Dim DestFile As String
   Dim FileNum As Integer
   Dim ColumnCount As Integer
   Dim RowCount As Integer

DestFile = "C:\Users\Documents\Data\test.txt"

FileNum = FreeFile()


   On Error Resume Next

   Open DestFile For Output As #FileNum

   If Err <> 0 Then
  MsgBox "Cannot open filename " & DestFile
  End
  End If

  On Error GoTo 0

   For RowCount = 1 To Selection.Rows.Count

  For ColumnCount = 1 To Selection.Columns.Count

     Print #FileNum, """" & Selection.Cells(RowCount, _
        ColumnCount).Text & """";

     If ColumnCount = Selection.Columns.Count Then
        Print #FileNum,
     Else
        Print #FileNum, ",";
     End If
  Next ColumnCount

 Next RowCount
Close #FileNum
End Sub

Данные, которые выбираются в электронной таблице, выглядят следующим образом:

Date    Close   Open    High    Low
24/04/2008  0.9399  0.9472  0.9484  0.9372
25/04/2008  0.9338  0.9394  0.9423  0.9289
28/04/2008  0.9382  0.9339  0.9405  0.9332

И вывод, который мне нужен, выглядит следующим образом:

"Date","Close","Open","High","Low"
22/06/2015,21,20.698,21.019,20.575
23/06/2015,20.508,20.96,21.052,20.318
24/06/2015,20.679,20.475,20.709,20.287

Вывод на основе кода @ DisplayName

"Date","Open","High","Low","Close","Volume"
7/08/2015 , 3.84145514 , 4.80521243 , 3.4206597 , 3.76001086 , 164329 
8/08/2015 , 3.78715895 , 3.800733 , 0.97017103 , 1.02256685 , 674188
9/08/2015 , 0.95851228 , 1.19425818 , 0.85406678 , 0.95275825 , 532170 

Можно ли убрать пробелы между запятыми?

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Более простым способом может быть создание строковой переменной с использованием vbCrLf, где требуется начать новую строку, а затем выполнить однократную печать в конце? Я думаю, что это решает проблему форматирования:

Sub QuoteCommaExport()
    Dim DestFile As String
    Dim FileNum As Integer
    Dim ColumnCount As Integer
    Dim RowCount As Integer

    DestFile = "C:\Users\Documents\Data\test.txt"
    FileNum = FreeFile()

    On Error Resume Next

    Open DestFile For Output As #FileNum

    If Err <> 0 Then
        MsgBox "Cannot open filename " & DestFile
        Goto CleanExit
    End If

    On Error GoTo 0

    Dim PrintString As String

    For ColumnCount = 1 To Selection.Columns.Count
        PrintString = PrintString & """" & Selection.Cells(1, ColumnCount).Text & """" & IIf(ColumnCount = Selection.Columns.Count, vbCrLf, ",")
    Next
    For RowCount = 2 To Selection.Rows.Count
        For ColumnCount = 1 To Selection.Columns.Count
            PrintString = PrintString & Selection.Cells(RowCount, ColumnCount) & IIf(ColumnCount = Selection.Columns.Count, vbCrLf, ",")
        Next ColumnCount
    Next RowCount
    Print #FileNum, PrintString;

CleanExit:
    Close #FileNum
End Sub
0 голосов
/ 30 апреля 2018

попробуйте это:

Sub QuoteCommaExport()
    Dim DestFile As String
    Dim FileNum As Integer
    Dim ColumnCount As Integer
    Dim RowCount As Integer

    DestFile = "C:\Users\Documents\Data\test.txt"
    FileNum = FreeFile()

    On Error Resume Next

    Open DestFile For Output As #FileNum

    If Err <> 0 Then
        MsgBox "Cannot open filename " & DestFile
        Goto CleanExit
    End If

    On Error GoTo 0

    For ColumnCount = 1 To Selection.Columns.Count
        Print #FileNum, """" & Selection.Cells(1, _
           ColumnCount).Text & """";
        If ColumnCount = Selection.Columns.Count Then
           Print #FileNum,
        Else
           Print #FileNum, ",";
        End If
    Next

    For RowCount = 2 To Selection.Rows.Count
        For ColumnCount = 1 To Selection.Columns.Count

            If ColumnCount = Selection.Columns.Count Then
               Print #FileNum, Selection.Cells(RowCount, ColumnCount)
            Else
               Print #FileNum, Selection.Cells(RowCount, ColumnCount); ",";
            End If
        Next ColumnCount

    Next RowCount

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