gpt4 book ai didi

.net - 无法打开另一个 Excel 文件(当通过 .net 打开一个 Excel 时)

转载 作者:行者123 更新时间:2023-12-01 18:56:44 26 4
gpt4 key购买 nike

我设计了一个 .net 应用程序,它将在登录时打开 Excel 文件并用它来打印报告。当用户注销时它将被关闭。我将Excel文件的visible设置为false,这样用户就不会知道后台进程。

但是,如果任何人在此期间打开任何其他 Excel 文件,我的报告 Excel 文件将变得可见,并且 Excel 对象将折叠。我必须转到任务管理器并终止所有打开的 Excel 实例才能解决此问题。

代码:

 Private Sub OK_Click(sender As Object, e As EventArgs) Handles OK.Click
Try
Dim dt As New DataTable()
Dim Adapter As New SqlDataAdapter()
ConnectMe()
Dim SQLCmd As New SqlCommand("uspLogin", Con)
SQLCmd.CommandType = CommandType.StoredProcedure
SQLCmd.Parameters.AddWithValue("@pLoginName", UsernameTextBox.Text.Trim())
SQLCmd.Parameters.AddWithValue("@pPassword", PasswordTextBox.Text.Trim())
Adapter.SelectCommand = SQLCmd
Adapter.Fill(dt)
SQLCmd.Dispose()
If dt.Rows.Count > 0 Then
Me.Cursor = Cursors.WaitCursor
Loading.Show()
OpenAllTempaltes()
Me.Hide()
Con.Close()
Me.Cursor = Cursors.Arrow
Else
MsgBox("Your Credential is Wrong !!!", MsgBoxStyle.OkOnly + MsgBoxStyle.Critical, "Login")
UsernameTextBox.Text = ""
PasswordTextBox.Text = ""
UsernameTextBox.Focus()
End If
Catch ex As Exception
Application.Exit()
End Try
End Sub

Public Sub OpenAllTempaltes()
Try
xlWorkBook = xlApp.Workbooks.Open(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Templates", "Excel_Templates_GST.xlsm"), Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, True)
Catch ex As Exception
Throw
End Try
End Sub

Public Sub CloseAllTempaltes()
Try
CleanUp(xlApp, xlWorkBook, xlWorkSheet)
Catch ex As Exception
ExceptionLog("PrintPage", "CloseAllTempaltes", ex.ToString(), DateTime.Now.ToString("dd-MMM-yyyy"))
Finally
GC.Collect()
End Try
End Sub

如何防止这种情况发生?

最佳答案

使用 Excel 应用程序对象的 IgnoreRemoteRequests 属性:

xlApp.IgnoreRemoteRequests = True

这相当于在
处检查 Excel UI 选项文件 |选项|高级|一般|忽略使用动态数据交换 (DDE) 的其他应用程序。
(请参阅 super 用户上的 related answer。)

我无法方便地使用 .NET 应用程序重现您的场景,但通过后期绑定(bind) Word VBA 中的 Excel.Application 对象来运行一些测试,并且它按预期工作。我创建了一个隐藏的 Excel 应用程序,并且能够通过在文件资源管理器中双击打开文件之前和之后对其执行操作。

在我的测试中,下次正常打开 Excel 时,该设置仍不会切换,但您可能希望在退出应用程序对象之前捕获其值并恢复它,以防该行为不通用。

编辑:这种行为至少从 Excel 2003 起就已经存在,我使用 Excel 2016(32 位)进行了验证。

在 Excel 2013 或更高版本中,Excel 切换到单个文档界面:每个工作簿在其自己的窗口中打开。

至少到 2016 年,Visual Basic 编辑器仍然是一个多文档界面,您可以通过查看 VBE 中的“项目资源管理器” Pane 轻松查看应用程序 session 中打开了哪些文件。

关于.net - 无法打开另一个 Excel 文件(当通过 .net 打开一个 Excel 时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45010084/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com