Как экспортировать каждую отдельную строку Excel в свой отдельный CSV-файл? - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь создать отчет о переменных данных в Adobe Illustrator. Этот отчет будет содержать графики и данные для каждого человека, перечисленные в файле Excel / CSV. Для создания графиков необходим файл .csv, содержащий только данные, относящиеся к этому конкретному человеку.

Так, например, у меня есть три человека: Джон, Джо и Энн.

У каждого человека будет гистограмма, показывающая его рост в общении, и у него также будет график, показывающий их уверенный рост.

Каждому человеку нужен CSV для обоих графиков. Это означает, что мне нужно всего 6 CSV-файлов, чтобы начать создание отчета о переменных данных в Excel.

Очевидно, что все данные будут вместе в одном файле Excel, который мне нужно будет выделить и сохранить в виде отдельных файлов CSV.

Есть ли сценарий, который я могу использовать, который будет экспортировать каждую строку (репрезентативную для индивидуума) как отдельный отдельный файл csv и присвоить ему имя на основе данных в ячейках A2 и B1?

Я провел некоторые исследования и нашел некоторые решения, которые ссылаются только на столбцы или как экспортировать выбранные строки, но мне нужно будет сделать это для 100+ пользователей, и эти решения не будут работать для тома, который мне нужен , Я немного знаком с кодированием VBA, но мне трудно найти что-нибудь, что может помочь с этой проблемой.

Так что, если мои клетки выглядят так:

    A       B               C
1   Name    Communication   Communication End
2   John    20              25
3   Joe     16              18
4   Ann     23              27

Мои имена файлов будут выглядеть так: John_Communication.csv, Joe_Communication.csv, Ann_Communication.csv

И будет ли экспортировать данные только из каждой отдельной строки в виде собственного CSV-файла, чтобы я мог импортировать данные в Adobe Illustrator для создания графиков, которые мне нужны для отчетов отдельных лиц?

1 Ответ

0 голосов
/ 27 марта 2019

Один из способов добиться этого - выписать CSV-файлы из макроса VBA:

Sub SaveRowsToSeparateCsv()

    Dim h As Range       ' header
    Dim d As Range       ' data
    Dim r As Range       ' row
    Dim c As Range       ' cell

    Dim i As Long

    Dim ha2d As Variant  ' header 2d array
    Dim ha1d As Variant  ' header 1d array
    Dim hcsv As String   ' header in csv format

    Dim da2d As Variant  ' data 2d array
    Dim da1d As Variant  ' data 1d array
    Dim dcsv As String   ' data in csv format

    ' init ranges with header and data
    With [a1].CurrentRegion
        Set h = .Rows(1)
        Set d = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count)
    End With

    ' we'll need header multiple times, so lets prepare it
    ha2d = h.Value
    ReDim ha1d(LBound(ha2d, 2) To UBound(ha2d, 2))
    For i = LBound(ha1d) To UBound(ha1d)
        ha1d(i) = ha2d(1, i)
    Next
    hcsv = Join(ha1d, ",") & vbNewLine

    ' now lets go through each row and save it seaprately as a csv
    For Each r In d.Rows
        da2d = r.Value
        ReDim da1d(LBound(da2d, 2) To UBound(da2d, 2))
        For i = LBound(da1d) To UBound(da1d)
            da1d(i) = da2d(1, i)
        Next
        dcsv = hcsv & Join(da1d, ",") & vbNewLine

        saveFile ThisWorkbook.Path & Application.PathSeparator _
                 & r.Cells(1) & "_Communication.csv", dcsv
    Next r

End Sub

Sub saveFile(pathname As String, sText As String)
    Dim fNum As Integer: fNum = FreeFile
    Open pathname For Output As fNum
    Print #fNum, sText;
    Close #fNum
End Sub
...