【问题标题】:filestream - open excel file read only fails文件流 - 打开 excel 文件只读失败
【发布时间】:2020-10-06 14:27:40
【问题描述】:

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

  • System.IO.filestream
  • 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 文件。

【问题讨论】:

    标签: excel vb.net filestream syncfusion


    【解决方案1】:

    来自 Syncfusion 的问候。

    正如您所提到的,您在使用 FileStream 加载文件时阻止了文件,并且您仅在整个程序结束时才丢弃 FileStream 对象。您可以在将 FileStream 对象加载到工作簿对象后立即丢弃它,以便其他人可以在您阅读该文件时使用 MS Office(写入、保存……)。因此,我们修改了您的代码如下以满足您的要求。

    代码 sn-p:

    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 工作。

    问候, 沙米尼

    【讨论】:

    • 是的,另一个尝试是不使用 Filestream,因此使用带有其他参数的 Workbooks.open 方法:SyncWB = SyncEE.Excel.Workbooks.Open(Me.PathFile, ExcelParseOptions.StringsReadOnly, openReadOnly, password, ExcelOpenType.Automatic) SyncWB.Unprotect(password) 在 Workbooks.open 方法运行期间(需要几秒钟,因为 excel 文件很大),文件被阻止 - 其他用户无法在 MS Excel 中手动保存文件.
    猜你喜欢
    • 2014-06-01
    • 2015-01-22
    • 1970-01-01
    • 2014-04-19
    • 2019-09-30
    • 2012-12-08
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    相关资源
    最近更新 更多