2012-03-27 75 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