Как преобразовать два разных файла CSV в два листа в одной книге Excel? - PullRequest
0 голосов
/ 31 марта 2019

У меня есть решение, которое копирует данные CSV в лист Excel, но оно работает только для 1 файла CSV на 1 лист Excel.Как перенести несколько файлов CSV на несколько листов в Excel?

Вот мой код:

Dim oExcel  
Set oExcel = CreateObject("Excel.Application")  
With oExcel  
    .DefaultSaveFormat=51  
    .Workbooks.Open sourceFile  
    .Sheets(1).Columns("A").TextToColumns .Range("A1"), , , , , True  
    .Sheets.add
    .ActiveWorkbook.SaveAs outputFile, 51  
    .Quit  
End With    

1 Ответ

0 голосов
/ 01 апреля 2019

Вам на самом деле не нужно использовать TextToColumns. Для первого файла CSV лист уже существует, а для второго вы можете открыть файл как другую книгу, а затем использовать метод Worksheet.Copy, чтобы скопировать лист после первого.

Вот, пожалуйста:

Const xlWorkbookDefault = 51

Dim sourceFile1, sourceFile2, outputFile
Dim xlApp, xlWorkbook1, xlWorkbook2

sourceFile1 = "...\CSV1.csv"
sourceFile2 = "...\CSV2.csv"
outputFile = "...\output.xlsx"

Set xlApp = CreateObject("Excel.Application")
With xlApp
    Set xlWorkbook1 = .Workbooks.Open(sourceFile1)
    Set xlWorkbook2 = .Workbooks.Open(sourceFile2)
    xlWorkbook2.Sheets(1).Copy , xlWorkbook1.Sheets(1)
    xlWorkbook2.Close
    .xlWorkbook1.SaveAs outputFile, xlWorkbookDefault
    .Quit  
End With

Чтобы сделать его более общим, вы можете настроить предыдущий код для работы с любым количеством CSV-файлов:

Const xlWorkbookDefault = 51

Dim sourceFiles(5)
Dim outputFile
Dim xlApp, xlWorkbook1, xlWorkbook2

sourceFiles(0) = "...\CSV1.csv"
sourceFiles(1) = "...\CSV2.csv"
sourceFiles(2) = '...
' TODO: Add more files.
outputFile = "...\output.xlsx"

Set xlApp = CreateObject("Excel.Application")
With xlApp
    Set xlWorkbook1 = .Workbooks.Open(sourceFiles(0))
    For i = 1 To UBound(sourceFiles)
        Set xlWorkbook2 = .Workbooks.Open(sourceFiles(i))
        xlWorkbook2.Sheets(1).Copy , xlWorkbook1.Sheets(i)
        xlWorkbook2.Close
    Next
    .xlWorkbook1.SaveAs outputFile, xlWorkbookDefault
    .Quit  
End With
...