
Я использую таблицы 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
Обратите внимание, что этот подход (Торстена) экспортирует весь лист, а не только таблицу, поэтому вы получаете МНОГО пустых строк.