【问题标题】:Launch Excel from C# and close it on "Save"从 C# 启动 Excel 并在“保存”时将其关闭
【发布时间】:2010-06-17 13:25:04
【问题描述】:

我想使用 C# 和 Microsoft Excel 执行以下操作:

1 - 用户选择一个文件。

2 - 显示 Microsoft Excel 以编辑该文件。

3 - 只要用户单击 Excel 的“保存”按钮,Microsoft Excel 就会关闭。用户不必单击退出。

关于#3 的任何想法?

问候, 塞巴斯蒂安

【问题讨论】:

  • 你问的是如何做基本的 Excel 互操作还是只做 #3?
  • 我不是 100% 确定这是一个很好的工作流程。如果我(作为您的用户)执行 1 和 2 并开始编辑文件会发生什么。我在完全完成编辑之前被召集参加会议,但我认为“我可能会离开一段时间,最好保存一下”。我愿意,巴姆! Excel 关闭 - 这根本不是我想要的。

标签: c# excel process


【解决方案1】:

您可以让 Excel 宏处理 BeforeSave 事件,取消用户发起的保存,将文件保存在宏中,保存后您将在宏中,然后可以关闭 Excel。

所以可能是这样的:

Private Sub myBeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If Not HandlingBeforeSave Then
        HandlingBeforeSave = True
        Cancel = True
        Me.Save
        Application.Quit    
    End If
End Sub

This kb 文章描述了从 C# 向 Excel 添加宏。

【讨论】:

  • 这可能会引发 StackOverflow。
  • @SLaks:为什么和哪一点?我原以为宏代码会没问题,他可以在托管代码启动并插入宏后立即关闭对 Excel 的任何引用,所以我会认为没问题?
  • Me.Save 应该引发BeforeSave 事件。顺便说一句,您也可以在托管代码中执行此操作。 (没有宏)
  • @SLaks:是的,没想到,需要检查方法的递归入口。
【解决方案2】:

您也可以使用 FileSystemWatcher 类来赶上保存时间,并在其上杀死 Excel。当然,如果您知道用户必须保存文件的位置。

【讨论】:

    【解决方案3】:

    我的 Interop 有点生锈,但我认为 Excel 在保存文件时会触发一个事件。

    但是,我认为这是一个非常危险的功能,因为根据我的经验,互操作往往有点不确定:)。想象一下,当用户在您的应用程序之外使用 Excel 时,如果保存处理程序处于活动状态会发生什么 - 他点击保存,Excel 消失!

    【讨论】:

      【解决方案4】:

      您可以将 VSTO 用于 Excel。使您能够针对 Excel 对象模型编写 C# 代码。应该能够做你想做的事。

      不过,SWeko 有一个很好的观点。您将需要弄清楚如何确定它是否应该在保存时关闭。如果不是每次保存都会关闭 Excel。

      【讨论】:

        【解决方案5】:

        您可以处理WorkbookBeforeSave 事件,然后运行一个计时器,每十秒检查一次Saved 属性,如果是true,则关闭Excel。

        关闭 Excel 时应小心谨慎,因为如果您关闭他们正在处理的(不同的)文件,您的用户会非常生气。

        【讨论】:

          【解决方案6】:

          【讨论】:

            【解决方案7】:

            我遇到了类似的问题,但是我等到用户关闭 Excel。在Excel automation: Close event missing 上查看我的“解决方案”。

            我发现当用户点击“保存”时关闭 Excel 有点不直观。如果您坚持“保存”事件,您可能希望在用户保存后立即观察文件元数据的变化(例如,最后修改日期)。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2016-02-26
              • 1970-01-01
              • 1970-01-01
              • 2015-03-04
              • 2020-03-09
              • 1970-01-01
              • 2015-03-28
              • 1970-01-01
              相关资源
              最近更新 更多