Spreadsheetgear поддерживает блокировку файла

Через веб-сайт C#/ASP.NET я использую 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;

Единственное, что я могу придумать в неотображаемом разделе «заполнить рабочий лист», что даже несколько сложно, — это удалить столбец и сдвинуть другие столбцы влево.

есть идеи? Спасибо.


person Paul Smith Jr    schedule 27.03.2012    source источник
comment
Ошибка SpreadsheetGear, когда файл заблокирован для редактирования, больше похожа на то, что может сделать Microsoft Excel. SpreadsheetGear не блокирует файлы при открытии и редактировании, как это делает Excel, — она блокирует файл только на то короткое время, которое обычно требуется для чтения/записи файла с диска. Какова точная формулировка ошибки, которую вы получаете?   -  person Tim Andersen    schedule 27.03.2012
comment
@ Тим, я получаю сообщение: ‹filename› заблокирован для редактирования с помощью «SpreadsheetGear для .NET 1.6.0.122», и затем мне предоставляются стандартные параметры только для чтения, уведомления и отмены. Это похоже на ошибку, которую я получил бы, если бы кто-то другой открыл файл.   -  person Paul Smith Jr    schedule 29.03.2012


Ответы (2)


Вы пробовали это без использования GetLock()? GetLock() обычно не используется при программировании asp.net. Согласно документации веб-сайта ,

Нет необходимости использовать GetLock и ReleaseLock при использовании набора книг, который не прикреплен к каким-либо компонентам Windows Forms из SpreadsheetGear.

person Daniel    schedule 27.03.2012
comment
Дэниел прав. Вам не нужно использовать GetLock/ReleaseLock в типичном сценарии ASP.NET. Кроме того, даже если у вас есть веская причина для использования блокировок, строка workbook.Close() должна быть выполнена до вызова ReleaseLock(). - person Tim Andersen; 27.03.2012
comment
В исходном коде не было GetLock() или ReleaseLock(), и была проблема с блокировкой сохраненного файла для редактирования. Вызовы этих функций были добавлены в попытке разрешить ситуацию. - person Paul Smith Jr; 28.03.2012
comment
Одна вещь, которую вы можете проверить, это убедиться, что файл шаблона Excel закрыт и к нему не подключен файл блокировки, когда вы выполняете GetWorkbook(). Если файл шаблона заблокирован, это может вызвать эти проблемы. - person Daniel; 28.03.2012

Итак, оказалось, что это старая копия DLL SpreadsheetGear в папке bin моего проекта. Как только мы обновили его, проблема исчезла. Спасибо за помощь.

person Paul Smith Jr    schedule 02.04.2012