filestream-以只读方式打开excel文件失败
我使用vb.net应用程序读取excel文件(.xlsm;受密码保护)。我使用以下接口:filestream-以只读方式打开excel文件失败,excel,vb.net,filestream,syncfusion,Excel,Vb.net,Filestream,Syncfusion,我使用vb.net应用程序读取excel文件(.xlsm;受密码保护)。我使用以下接口: System.IO.filestream Syncfusion.XlsIO(NuGet) 这是可行的,但我想以只读模式打开它,以便任何其他人都可以在MS Office中使用此文件(写入、保存等) 代码: 我一步一步地尝试,发现我在第行阻止了该文件: SyncFS = New FileStream(PathFile, FileMode.Open, FileAccess.Read, FileShare.Re
- System.IO.filestream
- Syncfusion.XlsIO(NuGet)
SyncFS = New FileStream(PathFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
我在“discard”行释放文件
阻止意味着在我阅读excel文件时,没有人可以在MS 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工作
问候,,
Shamini没错,另一个尝试是不使用Filestream,因此使用了Workbooks.open方法和其他参数:SyncWB=SyncEE.Excel.Workbooks.open(Me.PathFile,ExcelParseOptions.StringsReadOnly,openReadOnly,password,ExcelOpenType.Automatic)SyncWB.Unprotect(password)在Workbooks.open方法运行期间(这需要几秒钟,因为excel文件很大),文件被阻止-其他用户无法手动将文件保存在MS excel中。
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