Объединение двух листов.xlsx в отдельных файлах xlsx в один лист в новой книге
Мне нужно сделать это с VBScript (не VBA). Я не могу найти примеры того, как это сделать. У меня есть VBS, который выполняет всю основную обработку нужных мне файлов Excel, но последнее, что мне нужно, - это просто объединить обе таблицы, которые находятся в двух отдельных файлах.xlsx, в одну рабочую таблицу в новую рабочую книгу.
Я нашел примеры слияния 2 файлов в один wb с отдельными листами, используя vba, но мне нужны они на одном листе и через vbscript. Это было бы как союз двух листов. Они оба содержат одинаковое количество столбцов (6 столбцов) с данными одного типа. В основном нужно скопировать заголовки из любой из электронных таблиц и вставить в новую рабочую книгу / рабочий лист, а затем скопировать все данные из каждого в новую рабочую книгу / листы под заголовками. Надеюсь, это имеет смысл. Любая помощь приветствуется.
Я полус близок с этим, это сводит две таблицы данных в одну и ту же НОВУЮ рабочую книгу, которая называется "объединена", но она нужна для объединения листов в одну.
Set objExcel = WScript.CreateObject ("Excel.Application")
objExcel.Visible = false
strFileName = "c:\excel\merged.xlsx"
Set objWbA = objExcel.WorkBooks.open("c:\excel\wb1.xlsx")
Set objWbB = objExcel.WorkBooks.open("c:\excel\wb2.xlsx")
Set objWorkbook = objExcel.Workbooks.Add()
objwba.worksheets(1).copy _
objWorkbook.worksheets(1)
objwbb.worksheets(1).copy _
objWorkbook.worksheets(2)
objWorkbook.SaveAs(strFileName)
objWorkbook.close
objWbA.Close True
objWbB.Close True
objExcel.Quit
Set objExcel = Nothing
==========================
Вот решение, которое я придумал (пошел с выходом CSV):
Option Explicit
Dim objExcel
Dim strFilename
Dim objWbA
Dim objWbB
Dim Lastrow
Dim Lastrow1
Dim objWorkbook
Dim objSheeta
Dim objSheetb
Set objExcel = WScript.CreateObject ("Excel.Application")
objExcel.Visible = false
objExcel.displayalerts = false
strFileName = "c:\excel\merged.csv"
Set objWbA = objExcel.WorkBooks.open("c:\excel\wb1.xlsx")
Set objSheeta = objWbA.Sheets("wb1")
Set objWbB = objExcel.WorkBooks.open("c:\excel\wb2.xlsx")
Set objSheetb = objWbB.Sheets("wb2")
Set objWorkbook = objExcel.Workbooks.Add()
Const xlUp = -4162
Const xlPasteValues = -4163
Const xlPasteFormats = -4122
Const xlPasteValuesAndNumberFormats = 12
with objSheeta
Lastrow = .Cells(objSheeta.Rows.Count, 1).End(xlUp).Row
.Range("B1:F" & Lastrow).Copy
end with
objWorkbook.Worksheets("Sheet1").Range("A1").PasteSpecial xlPasteValuesAndNumberFormats
with objSheetb
Lastrow1 = .Cells(objSheetb.Rows.Count, 1).End(xlUp).Offset(1, 0).Row
.Range("B2:F" & Lastrow1).Copy
end with
objWorkbook.Worksheets("Sheet1").Range("A" & Lastrow1).PasteSpecial xlPasteValuesAndNumberFormats
'===================================
objExcel.CutCopyMode = False
objExcel.ScreenUpdating = True
objWorkbook.SaveAs(strFileName), 6
objWorkbook.close True
objWbA.Close True
objWbB.Close True
objExcel.Quit
Set objExcel = Nothing
1 ответ
Если вы выполнили метод Worksheet.Copy и не указали место назначения, этот лист будет скопирован в новую книгу, которая содержит свойство ActiveWorkbook. Это может быть лучшим способом начать новую книгу.
Set objExcel = WScript.CreateObject ("Excel.Application")
objExcel.Visible = False 'True for testing
strFileName = "c:\tmp\merged" '<~~ no file extension, FileType:=51 (xlOpenXMLWorkbook) will do that
Set objWbA = objExcel.WorkBooks.open("c:\tmp\wb1.xlsx")
Set objWbB = objExcel.WorkBooks.open("c:\tmp\wb2.xlsx")
rws = objWbA.Worksheets(1).Rows.Count '<~~ 65536 or 1048576 (need this below)
objWbA.Worksheets(1).Copy '<~~ copy to a new workbook with one worksheet
objWbB.Worksheets(1).Cells(1, 1).CurrentRegion.Copy _
objExcel.ActiveWorkbook.Worksheets(1).Cells(rws, 1).End(-4162).Offset(1,0) '-4162 is xlUp
objExcel.ActiveWorkbook.SaveAs strFileName, 51 '<~~ 51 is FileType:=xlOpenXMLWorkbook
objExcel.ActiveWorkbook.Close False '<~~ saved on the line immediately above
objWbA.Close False 'don't save if we didn't change anything
objWbB.Close False 'don't save if we didn't change anything
objExcel.Quit
Set objExcel = Nothing
Метод Workbook.SaveAs предоставит правильное расширение файла, если вы укажете правильное значение из перечисления XlFileFormat для FileType. Нет необходимости сохранять оригиналы, так как они не получили изменений.