我有一個要求,使用C#中的open xml sdk讀寫共享excel(xlsx)文件。 我已經使用關於堆棧溢出this問題的答案更新了共享模式設置,並且在創建的excel文件中更新了設置。 我寫了一個小程序來根據this插入數據到這個生成的Excel文件。多位用戶使用OpenXML併發寫入共享Excel文件
我已經用3個不同的用戶在同一時間通過局域網測試了這個數據。 我最初在下面的聲明中打開時遇到了異常。
using (SpreadsheetDocument doc = SpreadsheetDocument.Open(excelStream, true))
此時,只有一個用戶可以寫入共享的excel文件,即使啓用了shareworkbook設置。
後來,我改變了上面的語句中使用流如下
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寫入 user1結束後開始。
任何人都可以請指導我找到合適的方法來消除在開放的例外,也做了並行寫入使用OpenXML的SDK中的Excel文件。
在此先感謝。
我嚴重懷疑這是可能的,因爲OpenXML SDK是低級別的。如果您需要協調,那麼您需要在客戶端和OpenXML SDK之間爲此設置一個層。 – Phil1970