Excel Interop – 将过滤的工作表复制到不同的Excel实例

假设我有以下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表单的button,当用户点击它时,应该把我的SheetToCopy对象,并将其复制到ExcelToShow应用程序。

换句话说,原始的SheetToCopy保留在ExcelToKeepHidden应用程序中以进行进一步的操作,但ExcelToShow将在用户单击该button时显示该表的副本。

所以,我的挑战是我不能只使用SheetToCopy.Copy()方法,因为新的工作表是在一个完全不同的Excel实例中。 另外,由于我正在操作的操作,我不能复制一个单元格的范围,因为我已经应用了filter,所以pastefunction不允许我保持格式化等。

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

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

谢谢!!!!)

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

虽然您不能使用以下方式将数据粘贴到两个应用程序中:

 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 

我知道这是一个简单的解决scheme,但它完全做到了!

希望这可以帮助别人!