【发布时间】:2013-05-17 19:16:56
【问题描述】:
假设我声明了以下 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 - 我一直在做所有细节工作,远离用户的注意力)然后,我有一个按钮 显示 Excel 工作表,当用户单击它时,应该将我的 SheetToCopy 对象复制到 ExcelToShow 应用程序中。
换句话说,原始SheetToCopy 保留在ExcelToKeepHidden 应用程序中以供进一步操作,但ExcelToShow 将在用户单击按钮时显示工作表的副本。
所以,我的挑战是我不能只使用SheetToCopy.Copy() 方法,因为新工作表位于完全不同的 Excel 实例中。此外,由于我正在进行的操作,我不能只复制一系列单元格,因为我已经对其应用了过滤器,因此paste 功能不允许我保留格式等。
基本上,我看到的唯一解决方案是将工作表的副本复制到在同一个 excel 应用程序中的新工作簿中,然后关闭它,然后在第二个 excel 中重新打开它应用程序,但我想知道是否有更好的方法来完成这个?
有什么想法吗?? (VB或C#代码都很好)
谢谢!!!!)
【问题讨论】:
-
将工作表隐藏在当前的 excel 实例中对我来说似乎是一个很好的解决方案。需要激活、过滤等时使用
Application.ScreenUpdating = False隐藏。 -
唯一的挑战是用户可能会在表单仍在运行时关闭可见工作表/excel实例,这可能会导致问题......我认为有两个单独的Excel实例,无论如何用户这样做,它不会影响表单使用的实例。
-
您可以捕捉事件并做任何需要的事情。同样,如果您使用 addIn,您可以捕获文件打开的事件,并确保在后台加载另一个工作表。没有 100% 治愈用户愚蠢的方法,但您可以捕捉到很多预期的操作。
-
无需道歉。如果每个快照都是同一工作簿中的新工作表怎么办?...使用“粘贴特殊...值”,您可以保留“当时的状态”。您可以隐藏工作表,并通过提供您标记为快照工作表的所有隐藏工作表的列表来提供“查看旧快照”选项。
-
您必须对您的解决方案感到满意...我只是给出我的想法和一些可能的替代方案。祝你好运。