多个用户使用 OpenXML 同时写入共享 Excel 文件
Multiple users writing concurrently to shared Excel file using OpenXML
我需要在 C# 中使用 open xml sdk 读取和写入共享 excel(xlsx) 文件。
我已经使用关于堆栈溢出的 this 问题的答案更新了共享模式设置,并且在创建的 excel 文件中更新了设置。
我已经编写了一个小程序来将数据插入到这个基于 this.
生成的 Excel 文件中
我已经用 3 个不同的用户尝试通过 LAN 同时写入数据进行了测试。
我最初在打开以下语句时遇到异常。
using (SpreadsheetDocument doc = SpreadsheetDocument.Open(excelStream, true))
目前只有一个用户可以写入共享 excel 文件,即使共享工作簿设置已启用。
后来我把上面的语句改成了下面这样使用Stream
using (FileStream excelStream = new FileStream(filePath,FileMode.OpenOrCreate,FileAccess.ReadWrite,FileShare.ReadWrite))
{
using (SpreadsheetDocument doc = SpreadsheetDocument.Open(excelStream, true))
此更改后初始异常的频率降低但有时仍会出现。但是,当这成功时,多个用户可以写入 excel 文件。
当多个用户写入共享 excel 文件时,我观察到两个重要的行为。
- 即使用户并发写入数据,一个用户在一个会话中写入的所有行都是按顺序排列的。
- 当
多个用户尝试写入同一个共享 excel 文件,打开
xml 似乎按顺序在用户之后写入数据用户。
我已经通过在写入时插入时间戳来验证这一点
excel 每个用户的文件。为 user2 的写入在结束后开始
用户 1.
任何人都可以指导我找到正确的方法来消除打开期间的异常,并使用 OpenXML Sdk 对 excel 文件进行并发写入。
提前致谢。
如果您需要多用户访问并希望它能正常工作,您可能应该考虑使用数据库。即使是 Access 也比 Excel 好。如果您需要在 Excel 中输出,可以导出到 Excel 的报告可以满足此要求。
如果打开文件时发生异常,是否可以尝试处理该异常并添加重试逻辑?您可以使用 https://github.com/App-vNext/Polly 之类的东西来简化操作。
用户排序可能正是它处理写入的方式。我不希望这是你可以解决的问题,因为它是 Excel,而不是数据库。
我需要在 C# 中使用 open xml sdk 读取和写入共享 excel(xlsx) 文件。 我已经使用关于堆栈溢出的 this 问题的答案更新了共享模式设置,并且在创建的 excel 文件中更新了设置。 我已经编写了一个小程序来将数据插入到这个基于 this.
生成的 Excel 文件中我已经用 3 个不同的用户尝试通过 LAN 同时写入数据进行了测试。 我最初在打开以下语句时遇到异常。
using (SpreadsheetDocument doc = SpreadsheetDocument.Open(excelStream, true))
目前只有一个用户可以写入共享 excel 文件,即使共享工作簿设置已启用。
后来我把上面的语句改成了下面这样使用Stream
using (FileStream excelStream = new FileStream(filePath,FileMode.OpenOrCreate,FileAccess.ReadWrite,FileShare.ReadWrite))
{
using (SpreadsheetDocument doc = SpreadsheetDocument.Open(excelStream, true))
此更改后初始异常的频率降低但有时仍会出现。但是,当这成功时,多个用户可以写入 excel 文件。
当多个用户写入共享 excel 文件时,我观察到两个重要的行为。
- 即使用户并发写入数据,一个用户在一个会话中写入的所有行都是按顺序排列的。
- 当 多个用户尝试写入同一个共享 excel 文件,打开 xml 似乎按顺序在用户之后写入数据用户。 我已经通过在写入时插入时间戳来验证这一点 excel 每个用户的文件。为 user2 的写入在结束后开始 用户 1.
任何人都可以指导我找到正确的方法来消除打开期间的异常,并使用 OpenXML Sdk 对 excel 文件进行并发写入。
提前致谢。
如果您需要多用户访问并希望它能正常工作,您可能应该考虑使用数据库。即使是 Access 也比 Excel 好。如果您需要在 Excel 中输出,可以导出到 Excel 的报告可以满足此要求。
如果打开文件时发生异常,是否可以尝试处理该异常并添加重试逻辑?您可以使用 https://github.com/App-vNext/Polly 之类的东西来简化操作。
用户排序可能正是它处理写入的方式。我不希望这是你可以解决的问题,因为它是 Excel,而不是数据库。