Экспорт таблицы Office Excel в CSV с помощью макроса

Экспорт таблицы Office Excel в CSV с помощью макроса

Я использую таблицы Excel в Excel 2010. Мне бы хотелось быстро экспортировать содержимое этих таблиц в *.csv.

Мой текущий рабочий процесс: 1. Выбор таблицы вручную 2. Копирование содержимого в новую книгу 3. Сохранение книги как файла *.csv

Желаемый рабочий процесс: 1. Выберите таблицу вручную. 2. Запустите макрос, который записывает данные в файл с предопределенным именем.

Поскольку таблицы имеют уникальные имена (например, CurrentDataTable), существует ли функция, которая берет имя таблицы, целевой файл и желаемый формат вывода и записывает выходной файл?

решение1

В Excel нет встроенной команды или функции, которая могла бы сделать то, что вам нужно, но вы можете использовать VBA для программирования.

Следующий код может быть близок к тому, что вы ищете:

Sub ExportTable()

    Dim wb As Workbook, wbNew As Workbook
    Dim ws As Worksheet, wsNew As Worksheet
    Dim wbNewName As String


   Set wb = ThisWorkbook
   Set ws = ActiveSheet

   Set wbNew = Workbooks.Add

   With wbNew
       Set wsNew = wbNew.Sheets("Sheet1")
       wbNewName = ws.ListObjects(1).Name
       ws.ListObjects(1).Range.Copy
       wsNew.Range("A1").PasteSpecial Paste:=xlPasteAll
       .SaveAs Filename:=wb.Path & "\" & wbNewName & ".csv", _
             FileFormat:=xlCSVMSDOS, CreateBackup:=False
   End With

End Sub

Код предполагает, что у вас есть одна таблица на каждом рабочем листе. Он создает новую рабочую книгу, копирует таблицу на Лист 1 этой рабочей книги и сохраняет рабочую книгу как файл CSV с тем же именем, что и у таблицы.

решение2

Вот моя версия ответа chuff для Excel 2013. Она также отключает модальные диалоговые окна:

Sub ExportCSV()

   Dim wb As Workbook, wbNew As Workbook
   Dim ws As Worksheet, wsNew As Worksheet

   Set wb = ThisWorkbook
   Set ws = ActiveSheet

   Set wbNew = Workbooks.Add
   Application.DisplayAlerts = False
   With wbNew
       Set wsNew = wbNew.Sheets("Sheet1")
       ws.Rows.Copy
       wsNew.Paste
       .SaveAs Filename:=ws.name & ".csv", FileFormat:=xlCSV, CreateBackup:=True
       wsNew.Delete
   End With
   Windows(ws.name & ".csv").Activate
   ActiveWindow.Close
   Application.DisplayAlerts = True

End Sub

решение3

Мне нужно было сделать то же самое, но нужно было указать, какие таблицы должны были быть экспортированы как файлы CSV. Я создал диапазон с именем 'ExportTables', с помощью VBA следующим образом:

Public Sub Export()
    Dim i       As Integer
    Dim iMax    As Integer
    Dim sTable  As String

    iMax = Range("ExportTables").Rows.Count

    For i = 1 To iMax
        sTable = Range("ExportTables").Cells(i, 1).Value
        Call ExportTable(sTable)
    Next i
End Sub

Public Sub ExportTable(tableName As String)
    Dim wkb         As Workbook
    Dim wkbNew      As Workbook
    Dim wks         As Worksheet
    Dim wksNew      As Worksheet

    Set wkb = ThisWorkbook

    Application.Goto Reference:=tableName
    Set wks = ActiveSheet

    Set wkbNew = Workbooks.Add
    Set wksNew = wkbNew.Sheets(1)

    wks.ListObjects(tableName).Range.Copy
    wksNew.Range("A1").PasteSpecial Paste:=xlPasteValues

    Application.DisplayAlerts = False

    wkbNew.SaveAs Filename:=wkb.Path & "\" & tableName & ".csv", _
        FileFormat:=xlCSV, CreateBackup:=False
    wkbNew.Close SaveChanges:=False

    Application.DisplayAlerts = True

    ' Release object variables.
    Set wkb = Nothing
    Set wkbNew = Nothing
    Set wks = Nothing
    Set wksNew = Nothing
End Sub

решение4

Я получал ошибку 1004 из кода выше. Удалить в коде Торстена. Я объединил его сэтот примери получил это, что мне подходит:

Sub ExportCSV2()

   Dim wb As Workbook, wbNew As Workbook
   Dim ws As Worksheet, wsNew As Worksheet

   Set wb = ThisWorkbook
   Set ws = ActiveSheet

   Application.DisplayAlerts = False

   ws.Copy
   ActiveWorkbook.SaveAs Filename:=ws.Name & ".csv", FileFormat:=xlCSV, CreateBackup:=True
   Windows(ws.Name & ".csv").Activate
   ActiveWorkbook.Close False
   Application.DisplayAlerts = True

End Sub

Обратите внимание, что этот подход (Торстена) экспортирует весь лист, а не только таблицу, поэтому вы получаете МНОГО пустых строк.

Связанный контент