我需要在C#中使用open xml sdk读取和写入共享的excel(xlsx)文件。 我已经使用堆栈溢出问题this问题的答案更新了共享模式设置,并且在创建的excel文件中更新了设置。 我写了一个小程序,根据this将数据插入到生成的Excel文件中。
我已经测试了3个尝试通过LAN同时写入数据的不同用户。 我最初在以下声明的开放期间得到了一个例外。
using (SpreadsheetDocument doc = SpreadsheetDocument.Open(excelStream, true))
此时,即使已启用shareworkbook设置,也只有一个用户可以写入共享的Excel文件。
后来我将上面的语句改为使用Stream,如下所示
using (FileStream excelStream = new FileStream(filePath,FileMode.OpenOrCreate,FileAccess.ReadWrite,FileShare.ReadWrite))
{
using (SpreadsheetDocument doc = SpreadsheetDocument.Open(excelStream, true))
在此更改之后,初始异常的频率会降低,但有时仍会出现。但是,当这成功时,多个用户都可以写入excel文件。
当多个用户写入共享的Excel文件时,我发现了两个重要的行为。
任何人都可以指导我找到正确的方法来消除打开期间的异常,并使用OpenXML Sdk同时写入excel文件。
提前致谢。
答案 0 :(得分:1)
如果您需要多用户访问并希望它能够正常运行,您可能应该考虑使用数据库。即使Access也会比Excel更好。如果您需要输出在Excel中,则可以导出到Excel的报告可以起作用。
如果在打开文件时发生异常,可能尝试处理该异常,并添加重试逻辑?您可以使用类似https://github.com/App-vNext/Polly之类的内容来轻松完成。
用户排序可能就是它处理写入的方式。我不希望这是你可以解决的问题,因为它是Excel,而不是数据库。