2014-09-03 73 views
1

我一直在關注以下模式以使用Excel InterOp創建多個工作表和多個工作簿。現在,我需要創建一個讓我們稱之爲主工作簿的工作簿,其中包含我在原始工作簿中創建的工作表中的一些工作表。舉個例子,比如說WorkBook1有Sheet1和Sheet2,而Workbook2有Sheet3和Sheet4。我希望Master工作簿具有Sheet1和Sheet3。我正在尋找一種方法來創建我爲WorkBook1和WorkBook2創建的工作表(工作表1,工作表2,工作表3,工作表4),而且只需最少量的代碼重複將工作表1和工作表3添加到主工作簿。任何幫助將不勝感激。如何創建Excel工作表並將其添加到Excel中的多個工作簿InterOp

For i = 1 To 10 
    Dim xlApp As Application = New Application 
    Dim xlWorkBook As Workbook 
    xlWorkBook = xlApp.Workbooks.Add 
    Dim xlWorkSheet As Worksheet 
    Dim xlSheets As Sheets = xlWorkBook.Sheets 
    Dim xlNewSheet As Worksheet 
    Dim sheetCount As Integer = 1 

    ' So I repeat the following block to add multiple sheets with different content to a WorkBook 
    xlNewSheet = xlSheets.Add(xlSheets(sheetCount), Type.Missing, Type.Missing, Type.Missing) 
    sheetCount += 1 
    xlNewSheet.Name = SomeName 
    xlWorkSheet = xlWorkBook.Sheets(SomeName) 
    AddContentToSheet(xlNewSheet) ' A Sub that adds real content to the sheet 
    . 
    . 
    . 
    . 

    xlWorkBook.SaveAs(...) 
    xlWorkBook.Close() 
    xlApp.Quit() 
Next i 

所以,現在,我的問題是,如果我有我的主簿:

Dim MasterWorkBook As Workbook 
MasterWorkBook = xlApp.Workbooks.Add 

一個重複10次創造10點不同的工作簿循環之前定義。如何以最少量的代碼重複將選擇的表格添加到MasterWorkBook中。

+0

不要忘了[釋放你的COM對象](http://stackoverflow.com/questions/158706/how-to-properly-clean-up-excel-interop-objects)! – 2014-09-03 16:13:15

回答

1
Dim xlApp As Application = New Application 
    Dim masterWb As Workbook 
    masterWb = xlApp.Workbooks.Add 

    For i = 1 To 3 
     Dim xlWorkBook As Workbook 
     xlWorkBook = xlApp.Workbooks.Add 
     Dim ws As Worksheet 
     'Dim xlSheets As Sheets = xlWorkBook.Sheets 
     'Dim xlNewSheet As Worksheet 
     For j = 1 To 2 
      Try 
       ws = xlWorkBook.Sheets.Add(, xlWorkBook.Sheets(xlWorkBook.Sheets.Count)) 
       ws.Name = i + j 
       AddContentToSheet(ws) 
       If j = 1 Then 
        ws.Copy(, masterWb.Sheets(masterWb.Sheets.Count)) 
       End If 
      Catch 
       ws = Nothing 
       xlWorkBook.Close() 
       xlWorkBook = Nothing 
       xlApp.Quit() 
       xlApp = Nothing 
       Console.WriteLine("error") 
       Exit Sub 
      End Try 
     Next j 

     'AddContentToSheet(xlNewSheet) ' A Sub that adds real content to the sheet 
     ws = Nothing 
     xlWorkBook.SaveAs("C:\Users\Documents\Visual Studio 2008\Project\" + Str(i) + ".xlsx") 
     xlWorkBook.Close() 
     xlWorkBook = Nothing 
    Next i 

    masterWb.Sheets("Sheet1").Delete() 
    masterWb.Sheets("Sheet2").Delete() 
    masterWb.Sheets("Sheet3").Delete() 
    masterWb.SaveAs("C:\Users\Documents\Visual Studio 2008\Project\master.xlsx") 
    masterWb.Close() 
    masterWb = Nothing 
    xlApp.Quit() 
    xlApp = Nothing 
End Sub 

Sub AddContentToSheet(ByVal a As Worksheet) 
    a.Cells(1, 1) = "abc" 
    a.Cells(1, 2) = "abc" 
End Sub 

該代碼創建3個簿,並在每個工作簿的末尾添加2個工作表。它將每個工作簿中第一個添加的工作表複製到主工作簿。並且請記住在使用後釋放對象引用。希望它有助於:)

相關問題