Файл Excel остается заблокированным для редактирования после использования - PullRequest
1 голос
/ 03 марта 2020

У меня есть приложение Windows Forms с OpenFileDialog. Пользователь нажимает кнопку «Процесс», и приложение просматривает файл - электронную таблицу Excel - и обрабатывает данные в нем. Все это работает, как и ожидалось, с одним предупреждением.

После завершения обработки файла файл остается заблокированным для редактирования, поэтому при открытии файла для внесения изменений появляется следующее сообщение:

locked for editing

Если я полностью закрою приложение, файл будет разблокирован, поэтому я предполагаю, что приложение просто удерживает файл дольше, чем следует. Я предполагаю, что должен быть какой-то Close() метод или что-то, что освободит ресурсы, но я не могу точно понять, что мне нужно. Я попытался использовать Dispose() и обернуть мой код в блок Using, который, как я думал, уничтожил все автоматически, но безуспешно.

Вот мой код:

Using excel = New ExcelPackage(OpenFileDialog1.OpenFile)
    Dim ws = excel.Workbook.Worksheets.First()

    'Process data in ws...

    OpenFileDialog1.Dispose() 'Doesn't seem to release the file
    excel.Dispose() 'Doesn't seem to release the file
End Using

1 Ответ

1 голос
/ 03 марта 2020

Метод OpenFileDialog.OpenFile возвращает объект Stream , который, вероятно, не закрывается ExcelPackage.

Чтобы убедиться, что поток освобожден, используйте следующий шаблон.

Using strm As IO.Stream = OpenFileDialog1.OpenFile
  Using excel = New ExcelPackage(strm)
      ' ...
  End Using
End Using
...