簡體   English   中英

多個用戶使用OpenXML同時寫入共享的Excel文件

[英]Multiple users writing concurrently to shared Excel file using OpenXML

我需要使用C#中的打開xml sdk讀寫共享的excel(xlsx)文件。 我已經使用了應答的共享模式設置更新, 對堆棧溢出問題的設置是在創建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文件時,我觀察到兩個重要的行為。

  1. 即使用戶同時寫入數據,用戶在一個會話中寫入的所有行仍按順序排列。
  2. 當多個用戶嘗試寫入相同的共享excel文件時,打開的xml似乎已按順序在一個用戶之后另一個寫入數據。 我已通過在寫入每個用戶的excel文件時插入時間戳來驗證這一點。 在user1結束之后開始為user2寫入。

任何人都可以指導我找到正確的方法來消除打開期間的異常,並使用OpenXML Sdk並發寫入excel文件。

提前致謝。

如果您需要多用戶訪問權限並期望它能正常運行,則可能應該考慮使用數據庫。 甚至Access也會比Excel更好。 如果您需要將輸出保存在Excel中,則可以導出為Excel的報告。

如果打開文件時發生異常,也許嘗試處理該異常並添加重試邏輯? 您可以使用https://github.com/App-vNext/Polly之類的方法來簡化操作。

用戶排序可能只是它處理寫入的方式。 我不希望這是可以解決的問題,因為它是Excel,而不是數據庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM