Vb.net 粘贴excel数据时的特殊崩溃
我使用以下代码从几个excel文件中获取数据,并将它们粘贴到一个新文件中:Vb.net 粘贴excel数据时的特殊崩溃,vb.net,visual-studio-2010,excel,Vb.net,Visual Studio 2010,Excel,我使用以下代码从几个excel文件中获取数据,并将它们粘贴到一个新文件中: For i = 0 To amountOfFiles - 1 Dim xlAppSource As New Excel.Application Dim xlAppTarget As New Excel.Application Dim xlWbSource As Excel.Workbook Dim xlWbTarget As Excel.Workb
For i = 0 To amountOfFiles - 1
Dim xlAppSource As New Excel.Application
Dim xlAppTarget As New Excel.Application
Dim xlWbSource As Excel.Workbook
Dim xlWbTarget As Excel.Workbook
Dim xlsheetSource As Excel.Worksheet
Dim xlsheetTarget As Excel.Worksheet
Dim CurrentFile As String = strFileNames(i)
Dim IntAmountOfRows As Integer = amountOfRows(CurrentFile)
Dim intStartOfEmptyRow As Int16 = amountOfRows(SummaryLocation)
'Set current workbook
xlWbSource = xlAppSource.Workbooks.Open(CurrentFile)
xlWbTarget = xlAppTarget.Workbooks.Open(SummaryLocation)
'set current worksheet
xlsheetSource = xlWbSource.ActiveSheet
xlsheetTarget = xlWbTarget.ActiveSheet
'copy range of data from source to target file
xlsheetSource.Range("A2:k" & IntAmountOfRows).Copy()
xlsheetTarget.Range("A2:k" & intStartOfEmptyRow).PasteSpecial(Excel.XlPasteType.xlPasteAll, Excel.XlPasteSpecialOperation.xlPasteSpecialOperationNone, False, False)
'Set focus on Summary ExcelSheet
xlWbTarget = xlAppSource.Workbooks.Open(SummaryLocation)
xlsheetSource = xlWbTarget.ActiveSheet
'close excel
xlWbSource.Close(True)
xlWbTarget.Close(True)
xlAppSource.Quit()
xlAppTarget.Quit()
'Cleanup
xlAppSource = Nothing
xlAppTarget = Nothing
xlWbSource = Nothing
xlWbTarget = Nothing
xlsheetSource = Nothing
xlsheetTarget = Nothing
Next
但是,当我执行代码时,它会抛出以下错误:
“类范围的方法已失败”
Wich指向直线:
xlsheetTarget.Range("A2:k" & intStartOfEmptyRow).PasteSpecial(Excel.XlPasteType.xlPasteAll, Excel.XlPasteSpecialOperation.xlPasteSpecialOperationNone, False, False)
我不知道如何解决这个问题,因为这是一个相当普遍的错误,在谷歌上搜索它几乎没有给我答案。我找到了一种方法来实现我的愿望,但我不知道为什么。所以我不会接受我自己的答案,而是等待有人解释 我现在使用的代码是:
'copy range of data from source to target file
xlsheetSource.Range("A2:k" & IntAmountOfRows).Copy()
xlsheetTarget.Range("A" & intStartOfEmptyRow).PasteSpecial(Excel.XlPasteType.xlPasteValues)
我正要在这些行上写一个答案。为什么会这样?因为它可以工作:)请记住,Interop有许多来自.NET部分的选项/子选项,但在那之后,信息必须传输到Excel。这种协调并不总是太容易。PasteSpecial方法就是一个很好的例子:在所有可用的选项中,只使用能够提供足够性能的选项(=不要崩溃)。互操作看起来很直观,任何人都可以轻松访问,但您必须了解一些细节。你应该承认这个答案是正确的。PS:也许你应该把标题改成与实际问题相关的东西(特别的崩溃)。@varocarbas谢谢!如果我没有得到任何其他(更好的)答案,我将在2天内(当我有能力的时候)接受我的答案。这是您的xlsheetTaget是如何合格的。