【发布时间】:2017-01-02 23:13:27
【问题描述】:
我需要在 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 文件。
提前致谢。
【问题讨论】:
-
我严重怀疑是否有可能这样做......因为 OpenXML SDK 是低级别的。如果你想要协调,那么你需要在你的客户端和 OpenXML SDK 之间建立一个层。
标签: c# openxml-sdk