【问题标题】:Excel Interop - Copy a filtered worksheet to a different Excel instanceExcel 互操作 - 将筛选的工作表复制到不同的 Excel 实例
【发布时间】: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% 治愈用户愚蠢的方法,但您可以捕捉到很多预期的操作。
  • 无需道歉。如果每个快照都是同一工作簿中的新工作表怎么办?...使用“粘贴特殊...值”,您可以保留“当时的状态”。您可以隐藏工作表,并通过提供您标记为快照工作表的所有隐藏工作表的列表来提供“查看旧快照”选项。
  • 您必须对您的解决方案感到满意...我只是给出我的想法和一些可能的替代方案。祝你好运。

标签: c# vb.net excel interop


【解决方案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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    • 1970-01-01
    • 2015-01-16
    • 1970-01-01
    相关资源
    最近更新 更多