1

假设我声明了以下 Excel 互操作对象:

    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- 我一直在做所有细节工作,远离用户的注意力),然后,我有一个按钮Show Excel Sheet,当用户单击它,应该将我的SheetToCopy对象复制到ExcelToShow应用程序中。

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

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

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

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

谢谢!!!!)

4

1 回答 1

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

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

希望这对其他人也有帮助!

于 2013-05-21T15:55:24.573 回答