2012-03-27 77 views
0

通過C#/ ASP.NET網站,我使用SpreadsheetGear從模板打開文件,然後根據用戶輸入對其進行修改,然後將其保存到新位置。當我嘗試在保存後手動打開新創建的文件時,我收到一條消息,指出SpreadsheetGear已鎖定文件以進行編輯。Spreadsheetgear保持文件鎖定

這裏是下面的代碼片段:

SpreadsheetGear.IWorkbook workbook = SpreadsheetGear.Factory.GetWorkbook(pathToTemplate); 
workbook.WorkbookSet.GetLock(); 
SpreadsheetGear.IWorksheet worksheet = workbook.Worksheets["sheetName"]; 
SpreadsheetGear.IRange cells = worksheet.Cells; 

//fill in worksheet 
... 

workbook.SaveAs(pathToGeneratedFiles + exportFileName, SpreadsheetGear.FileFormat.XLS97); 
workbook.WorkbookSet.ReleaseLock(); 

worksheet = null; 
workbook.Close(); 
workbook = null; 

我可以在未顯示想到的唯一的事情節甚至有點棘手被刪除列,其他列轉移到左側的「填寫工作表」。

有什麼想法?謝謝。

+0

的錯誤「的SpreadsheetGear已經鎖定該文件進行編輯」聽起來更像是一些Microsoft Excel中可能會做。 SpreadsheetGear在打開和編輯Excel時不會鎖定文件 - 它只是「鎖定」一個文件,通常只需從磁盤讀取/寫入該文件所需的時間。你收到錯誤的確切措詞是什麼? – 2012-03-27 17:23:05

+0

@Tim,我得到一個消息:「被鎖定編輯由‘的SpreadsheetGear的.NET 1.6.0.122’」然後,我給出的標準只讀,通知和取消選項。它看起來就像我得到的錯誤,如果其他人打開文件。 – 2012-03-29 19:52:17

回答

0

所以,結果是我的項目的bin文件夾中的SpreadsheetGear DLL的舊副本。一旦我們更新它,問題就消失了。謝謝您的幫助。

1

你有沒有試過這種不使用GETLOCK()?在執行asp.net編程時,通常不會使用GetLock()。據the website docs

沒有必要使用一個工作簿 一套未連接到任何Windows窗體時,從組件的SpreadsheetGear 使用GETLOCK和RELEASELOCK。

+1

Daniel的正確。典型的ASP.NET場景中不需要使用GetLock/ReleaseLock。此外,即使您確實有使用鎖的有效理由,也應該在調用ReleaseLock()之前執行workbook.Close()行。 – 2012-03-27 17:50:29

+0

原始代碼沒有GetLock()或ReleaseLock(),並且保存的文件被鎖定以進行編輯時出現問題。爲了解決這種情況,增加了對這些功能的調用。 – 2012-03-28 14:03:28

+0

有一件事你可以檢查是確保Excel模板文件被關閉,並沒有鎖定的文件連接到它,當你正在做GetWorkbook()。如果模板文件有鎖定,可能會導致這些問題。 – Daniel 2012-03-28 14:25:24