【问题标题】:Extracting Excel workbook name before it actually opens在实际打开之前提取 Excel 工作簿名称
【发布时间】:2013-12-07 18:15:33
【问题描述】:

我试图在工作簿实际打开之前获取它的名称。

((Excel.AppEvents_Event)this.Application).WorkbookOpen += new Excel.AppEvents_WorkbookOpenEventHandler(App_WorkBookOpen);



private void App_WorkBookOpen(Excel.Workbook Wb)
            {
                System.Windows.Forms.MessageBox.Show("Shakti " + " " + Wb.Name);

            }

使用如上所示的处理程序,Excel 应用程序在完全打开时显示工作簿名称。我的目的是在实际打开工作簿并向用户显示数据之前进行一些正式检查。

在内容加载到 Excel 并显示给用户之前,是否有任何方法或机制来提取文件名?非常感谢任何形式的帮助。谢谢。

【问题讨论】:

  • 您可以隐藏工作簿,读取名称,然后根据需要关闭/取消隐藏它吗?
  • @SiddharthRout Rout:我们如何隐藏工作簿?有什么直接的方法吗?你能提供一个代码sn-p吗?
  • 我的目的是在实际打开之前获取工作簿名称。它没有帮助。
  • 当你执行上面的代码时,你得到"Shakti " + " " + Wb.Name消息框了吗?

标签: c# vba excel vsto shared-addin


【解决方案1】:

AFAIK 你不能那样做。但是就像我在评论中提到的那样,您可以在工作簿可见时将其隐藏。因此,用户将看到工作簿打开一瞬间,然后变得不可见。在那一瞬间,您可以阅读工作簿的名称,然后隐藏工作簿。

根据您的计算/结论,您可以根据需要关闭/取消隐藏工作簿。

您可以使用隐藏工作簿

Wb.Windows[1].Visible = false;

【讨论】:

  • 我会将其标记为答案,因为它在一定程度上帮助了我,但并不完全。仍然包含工作簿的窗口是可见的,当它打开时我拦截它然后隐藏它。我找不到任何使其不可见的规定,然后提示用户是否真的喜欢打开它。有没有办法让我延迟加载工作簿窗口??
  • Is there a way out that I can have late loading of workbook window?? 我不知道...
【解决方案2】:

不,你不能。

无论如何,您都可以在带有 Open 类标签的 WorkBook 模块上创建一个宏,如下所示:

Private Sub Workbook_Open()

Dim ws As Workbooks

For Each ws In ActiveWorkbook.Worksheets

MsgBox ws.Name

Next

ActiveWorkbook.Worksheets.Close

End Sub

然后在打开文件时通过 c# 调用此子程序,此子程序在加载工作簿之前运行,然后将其关闭。它没有那种意义,因为您将永远无法再次访问 wb... 也许在这里和那里进行一些调整,您就可以完成您的任务,但这取决于您。

希望对你有帮助...

【讨论】:

  • 这是 vsto :) 而不仅仅是 c# :)
  • @Mark:从技术上讲,我很想知道在它真正打开之前到底发生了什么?
【解决方案3】:

Wb.name 和文件名不一样吗?在这种情况下,由于您必须知道文件名/位置才能打开它,您可以事先检查它吗?

【讨论】:

    猜你喜欢
    • 2014-09-12
    • 2011-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多