Excel Interop - 将筛选的工作表复制到其他Excel实例

时间:2013-05-17 19:16:56

标签: c# vb.net excel interop

假设我声明了以下Excel Interop对象:

    Dim ExcelToKeepHidden As New Microsoft.Office.Interop.Excel.Application
    Dim SheetToCopy As Microsoft.Office.Interop.Excel.Workbook
    ...
    Dim ExcelToShow As New Microsoft.Office.Interop.Excel.Application

基本上,我在后台保留一个隐藏的Excel实例(其中包含工作表SheetToCopy - 我一直在做的所有细节工作远离用户的注意)然后,我有一个按钮显示Excel工作表,当用户点击它时,应该使用我的SheetToCopy对象并将其复制到ExcelToShow应用程序中。

换句话说,原始SheetToCopy会停留在ExcelToKeepHidden应用程序中以进行进一步操作,但ExcelToShow会在用户点击按钮时显示该工作表的副本。

所以,我的挑战是我不能只使用SheetToCopy.Copy()方法,因为新工作表位于完全不同的Excel实例中。此外,由于我正在进行的操作,我不能只复制一系列单元格,因为我已经应用了过滤器,因此paste功能不允许我保持格式化,等

基本上,我看到的唯一解决方案是将工作表的副本复制到同一个Excel应用程序中的新工作簿 ,然后关闭它,然后在第二个excel中重新打开它应用程序,但我想知道是否有更好的方法来实现这个?

有什么想法? (VB或C#代码非常好)

感谢!!!!)

1 个答案:

答案 0 :(得分:1)

作为我自己问题的答案(如果其他人面临类似的问题)。

虽然您无法使用以下内容将数据粘贴到两个应用程序中:

RangeWeWant.Copy()
NewSheet.Range(RangeWeWant.Address).PasteSpecial(Microsoft.Office.Interop.Excel.XlPasteType.xlPasteFormats)
NewSheet.Range(RangeWeWant.Address).Value = RangeWeWant.Value

由于Range.PasteSpecial模块会抛出错误,Sheet.PasteSpecial没有!

所以这段代码对我有用:

RangeWeWant.Copy()
NewSheet.Range(RangeWeWant.Address).Range("A1").Select()
NewSheet.PasteSpecial(Format:="Microsoft Excel 8.0 Format")
NewSheet.Range(RangeWeWant.Address).Value = RangeWeWant.Value

我知道这是一个简单的解决方案,但它完美地完成了这个技巧!

希望这也有助于其他人!!