[英]filestream - open excel file read only fails
我用 vb.net 应用程序读取了一个 excel 文件(.xlsm;密码保护)。 我使用以下接口:
这可行,但我想以只读模式打开它,以便任何其他人都可以在 MS Office 中使用此文件(写入、保存……)。
代码:
Imports Syncfusion.XlsIO
Private SyncEE As Syncfusion.XlsIO.ExcelEngine
Private SyncWB As Syncfusion.XlsIO.IWorkbook
Private SyncFS As System.IO.FileStream
Public Sub new
SyncEE = New ExcelEngine
SyncFS = New FileStream(PathFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
SyncEE.Excel.DefaultVersion = ExcelVersion.Excel2016
SyncWB = SyncEE.Excel.Workbooks.Open(SyncFS, ExcelParseOptions.Default, openReadOnly, password)
SyncWB.Unprotect(password)
SyncWB = SyncEE.Excel.Workbooks.Open(SyncFS, ExcelOpenType.Automatic)
' read....
'discard
SyncWB.Close()
SyncWB = Nothing
SyncEE.Dispose()
SyncEE = Nothing
SyncFS.Dispose()
SyncFS = Nothing
End Sub
我一步一步地尝试,发现我在行阻止了文件:
SyncFS = New FileStream(PathFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
我在“丢弃”行释放文件。
阻止意味着当我阅读它时,没有人可以在 MS Excel 中手动编辑和保存 excel 文件。
来自 Syncfusion 的问候。
正如您所提到的,您在使用 FileStream 加载文件时阻止了该文件,并且您仅在整个程序结束时才丢弃 FileStream 对象。 您可以在将 FileStream 对象加载到工作簿对象后立即丢弃它,以便其他人可以在您阅读文件时通过 MS Office 使用该文件(写入、保存...)。 因此,我们已将您的代码修改如下以满足您的要求。
代码片段:
Private Sub new
SyncEE = New ExcelEngine
SyncFS = New FileStream(PathFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
SyncEE.Excel.DefaultVersion = ExcelVersion.Excel2016
SyncWB = SyncEE.Excel.Workbooks.Open(SyncFS, ExcelParseOptions.Default, openReadOnly, password)
'Discard FileStream
SyncFS.Dispose()
SyncFS = Nothing
' read....
'discard
SyncWB.Close()
SyncWB = Nothing
SyncEE.Dispose()
SyncEE = Nothing
End Sub
注意:我为 Syncfusion 工作。
问候, 沙米尼
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.