Excel 文件在使用后保持锁定状态以供编辑

标签 excel vb.net winforms openfiledialog excelpackage

我有一个带有 OpenFileDialog 的 Windows 窗体应用程序。用户单击“处理”按钮,应用程序将浏览该文件(Excel 电子表格)并处理其中的数据。所有这些都按预期工作,但有一个警告。

应用程序处理完成后,文件仍处于锁定状态以进行编辑,因此当我打开文件进行更改时,我会收到以下消息:

locked for editing

如果我完全关闭应用程序,文件将被解锁,因此我假设应用程序保留文件的时间比应有的时间长。我猜应该有某种 Close() 方法或可以释放资源的方法,但我无法弄清楚我到底需要什么。我尝试使用 Dispose() 并将我的代码包装在 Using block 中,我认为它会自动销毁所有内容,但没有运气。

这是我的代码:

Using excel = New ExcelPackage(OpenFileDialog1.OpenFile)
    Dim ws = excel.Workbook.Worksheets.First()

    'Process data in ws...

    OpenFileDialog1.Dispose() 'Doesn't seem to release the file
    excel.Dispose() 'Doesn't seem to release the file
End Using

最佳答案

OpenFileDialog.OpenFile Method返回 Stream ExcelPackage 可能未关闭的对象。

要确保流被释放,请使用以下模式。

Using strm As IO.Stream = OpenFileDialog1.OpenFile
  Using excel = New ExcelPackage(strm)
      ' ...
  End Using
End Using

关于Excel 文件在使用后保持锁定状态以供编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60510154/

相关文章:

VBA - 自动化错误 - Excel 2013

c# - .NET 配置 (app.config/web.config/settings.settings)

c# - 两个 WinForms 之间传递的 XPTable 数据

c# - 如何在 C# winform 应用程序中将子窗口置于最前面?

vb.net - 检测已安装的 Excel 版本(和 Service Pack)

C#:我想像控制台应用程序一样将文件路径等消息传递到我的表单应用程序,我该怎么做?

html - 需要从 excel 导出中去除 HTML 字符,但保留效果

Excel 计算由逗号分隔的数字数量,范围从 x 到 y

Excel 索引匹配公式上次更改

javascript - 响应对象未在更新面板中返回 Excel 流?