Я хотел бы дать ответ на этот вопрос, даже если прошло больше года с тех пор, как его спросили.У меня была та же проблема с проектом, который я разрабатываю, и мне потребовалось некоторое время, чтобы найти ответ.Я буду публиковать с использованием кода VB.NET вместо C #, так как я не знаком с последним.
Вот предложение, чтобы копировать листы между книгами Excel, абсолютно необходимо использовать только ОДИН объект приложения Excel, а затем открыть обе книги с помощью этого единственного приложения, тогда мы можем использовать известный метод Worksheet.Copy.и просто укажите, что лист копируется после или перед листом в этой другой книге.
Private Sub ThisWorkbook_Startup() Handles Me.Startup
Me.Application.Workbooks.Open(filePath)
Me.Application.Workbooks(2).Worksheets("Reporte"). _
Copy(After:=Me.Application.Workbooks(1).Worksheets("Hoja1"))
Me.Application.Workbooks(2).Close()
Me.Application.DisplayAlerts = False
Globals.Hoja1.Delete()
Me.Application.DisplayAlerts = True
End Sub
В этом случае я использую приложение Excel, которое запускает мой проект книги Excel, но этотакже работают:
Dim xlApp As New Excel.Application
Dim book1 As Excel.Workbook
Dim book2 As Excel.Workbook
book1 = xlApp.Workbooks.Open(filePath1)
book2 = xlApp.Workbooks.Open(filePath2)
book1.Worksheets("Sheet to be copied").Copy(After:=book2.Worksheets(1))
Конечно, приложение Excel покажет обе книги, поэтому после завершения копирования вы должны закрыть исходную книгу, если вы не хотите ее отображать (или, по крайней мере, не долго).достаточно для того, чтобы пользователь что-нибудь сделал).
xlApp.Workbooks(1).Close()
Это способ, которым я мог бы это сделать, пользователь увидит всплывающую и закрывающуюся новую рабочую книгу, которая не совсем аккуратна, но покаЯ понятия не имею, как еще это сделать (или сделать этот процесс копирования невидимым способом)
Я надеюсь, что это все ещеУ меня есть какая-то ценность.С наилучшими пожеланиями.