Объединение двух листов.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. Нет необходимости сохранять оригиналы, так как они не получили изменений.

Другие вопросы по тегам