excel - Excel 文件在使用后仍处于锁定状态以供编辑
问题描述
我有一个带有OpenFileDialog
. 用户单击“处理”按钮,应用程序将浏览文件 - Excel 电子表格 - 并处理其中的数据。所有这些都按预期工作,但需要注意一点。
应用程序完成处理后,文件仍处于锁定状态以进行编辑,因此当我打开文件进行更改时,我收到以下消息:
如果我完全关闭应用程序,则文件将被解锁,因此我假设应用程序仅保留文件的时间超过了应有的时间。我猜应该有某种Close()
方法或可以释放资源的东西,但我无法弄清楚我到底需要什么。我尝试使用Dispose()
并将我的代码包装在一个Using
我认为会自动破坏所有内容但没有运气的块中。
这是我的代码:
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 方法返回一个可能未被 ExcelPackage 关闭的Stream对象。
要确保释放流,请使用以下模式。
Using strm As IO.Stream = OpenFileDialog1.OpenFile
Using excel = New ExcelPackage(strm)
' ...
End Using
End Using
推荐阅读
- amazon-web-services - 如何模拟 s3Client 以便可以在 Golang 测试中运行 GetObject()?
- python - 从具有“值到一维数组”功能的 ND 数组中初始化一个 (N+1)-D 数组
- python - 计算复杂数据帧的平均值
- node.js - lambda 重试逻辑是否适用于标准 sqs 调用?
- design-patterns - 相互依赖的微服务是否应该复制依赖服务的数据
- c++ - 使用 use_future 提升 Asio async_send_to 多播不起作用
- sparse-matrix - gamlasso 可以接受稀疏模型矩阵类“dgCMatrix”吗?
- elixir - 在窗户上。我在我的 microsoft vs 8 中找不到 nmake.exe
- mysql - MySQL 和 Unity:拒绝访问
- javascript - 弹出引导模式后如何填写文本框值