繁体   English   中英

文件流 - 打开 excel 文件只读失败

[英]filestream - open excel file read only fails

我用 vb.net 应用程序读取了一个 excel 文件(.xlsm;密码保护)。 我使用以下接口:

  • 系统.IO.文件流
  • Syncfusion.XlsIO (NuGet)

这可行,但我想以只读模式打开它,以便任何其他人都可以在 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM