将单独 xlsx 文件中的两个 .xlsx 工作表合并到新工作簿中的单个工作表中
Combining two .xlsx worksheets in separate xlsx files into a single worksheet in a new workbook
我需要使用 vbscript(而不是 vba)来完成此操作。我找不到任何有关如何执行此操作的示例。我有 vbs 可以对我需要的 Excel 文件进行所有主要处理,但我需要的最后一块只是将驻留在 2 个单独的 .xlsx 文件中的两个工作 sheet 合并到将单个作品sheet 放入新工作簿。
我找到了使用 vba 将 2 个文件合并到一个带有单独 sheet 的单个 wb 的示例,但我需要它们在同一个 sheet 上并通过 vbscript。它基本上就像两个 sheet 的联合。它们都包含相同数量的列(6 列)和相同类型的数据。基本上需要从任一 spreadsheet 复制 headers 并粘贴到新的 workbook/worksheet,然后将每个数据的所有数据复制到 workbook/sheets 下面的新 workbook/sheets =26=]。希望这是有道理的。任何帮助表示赞赏。
我与此半接近,这将两个数据 sheet 带入同一个名为 "merged" 的新工作簿,但需要它将 sheet 合并为一个.
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
如果你执行Worksheet.Copy method and neglect to supply a destination, the worksheet will be copied to a new workbook which holds the ActiveWorkbook property。这可能是开始新工作簿的最佳方式。
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 method will supply the correct file extension if you provide the correct value from the XlFileFormat Enumeration 为 FileType。没有必要保存原件,因为它们没有收到任何更改。
我需要使用 vbscript(而不是 vba)来完成此操作。我找不到任何有关如何执行此操作的示例。我有 vbs 可以对我需要的 Excel 文件进行所有主要处理,但我需要的最后一块只是将驻留在 2 个单独的 .xlsx 文件中的两个工作 sheet 合并到将单个作品sheet 放入新工作簿。
我找到了使用 vba 将 2 个文件合并到一个带有单独 sheet 的单个 wb 的示例,但我需要它们在同一个 sheet 上并通过 vbscript。它基本上就像两个 sheet 的联合。它们都包含相同数量的列(6 列)和相同类型的数据。基本上需要从任一 spreadsheet 复制 headers 并粘贴到新的 workbook/worksheet,然后将每个数据的所有数据复制到 workbook/sheets 下面的新 workbook/sheets =26=]。希望这是有道理的。任何帮助表示赞赏。
我与此半接近,这将两个数据 sheet 带入同一个名为 "merged" 的新工作簿,但需要它将 sheet 合并为一个.
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
如果你执行Worksheet.Copy method and neglect to supply a destination, the worksheet will be copied to a new workbook which holds the ActiveWorkbook property。这可能是开始新工作簿的最佳方式。
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 method will supply the correct file extension if you provide the correct value from the XlFileFormat Enumeration 为 FileType。没有必要保存原件,因为它们没有收到任何更改。