Лучший отвечающий
Сохранение данных в уже существующий файл Excel

Вопрос
-
Доброго времени суток. Буду краток. Суть задачи: сохранить данные из DataGridView в уже существующий Excel файл (по сути то, что находится в DataGridView - это модификация файла и нужно сохранить изменения).
Вроде бы задача тривиальна и решение очевидно:
private void SaveExcel1() { var xlApplication = new Excel.Application(); Workbook xlWorkbook; Worksheet xlWorksheet; if (Peredacha.FilePath != null) { xlWorkbook = xlApplication.Workbooks.Open(Peredacha.FilePath, Type.Missing, true, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); xlWorksheet = (Worksheet)xlWorkbook.Worksheets.get_Item(1); for (int i = 0; i < dataGrid.Rows.Count; i++) { for (int j = 0; j < dataGrid.ColumnCount; j++) { try { xlApplication.Cells[i + 1, j + 1] = dataGrid.Rows[i].Cells[j].Value; } catch (Exception ex) { MessageBox.Show("Error: " + ex.Message); } } } xlApplication.Application.DisplayAlerts = false; try { xlWorkbook.SaveAs(Peredacha.FilePath); } catch (Exception ex) { MessageBox.Show("Error: " + ex.Message); }
xlApplication.Application.DisplayAlerts = true; ReleaseObject(xlWorksheet); ReleaseObject(xlWorkbook); ReleaseObject(xlApplication); } }
На моменте сохранения выдает ошибку: Ошибка доступа к документу '1.xls', допускающему доступ только для чтения. Разрешения на изменение файла в свойствах самого файла выставлены.
Если убрать путь к файлу из метода SaveAs() - сохраняет без ошибок, но только в Мои Документы.
Буду очень благодарен за любую помощь.
22 августа 2013 г. 9:37
Ответы
-
Коллега, раз вам кто то человеческим голосом говорит "Редактирование '1.xls' теперь разрешено", значит у вас запущено во время работы программы больше одного Excel. Закройте их все.
- Помечено в качестве ответа Alexander.Kazantsev 23 августа 2013 г. 5:18
22 августа 2013 г. 12:59Отвечающий
Все ответы
-
Добрый день.
Открываете список процессов и чистите там все Excel. Запускаете приложение. Если будет та-же ошибка, то у приложения Excel установите:
xlApplication.Visible = true;
И попробуйте сохранить, после окончания изменения файла, через интерфейс Excel.
22 августа 2013 г. 9:52Отвечающий -
Ошибка осталась прежней. Через интерфейс Excel сохранить не получается: Файл '1.xls' доступен только для чтения.
Я так понимаю, что программа заняла этот файл и пока не закроется - менять что-то не получится? Как освободить этот файл?
22 августа 2013 г. 10:36 -
Вы проверили, через диспетчер задач, что у вас в памяти нет ни одного экземпляра Excel и то, что у файла не стоит атрибут readonly?22 августа 2013 г. 10:38Отвечающий
-
Да проверил. После завершения программы вываливается окно с сообщением: "Редактирование '1.xls' теперь разрешено". После чего можно открыть файл, увидеть там изменения и сохранить их из Excel.
Как можно избавится от этих шагов и сохранять из моего приложения?
- Изменено Alexander.Kazantsev 22 августа 2013 г. 10:54
22 августа 2013 г. 10:53 -
Коллега, раз вам кто то человеческим голосом говорит "Редактирование '1.xls' теперь разрешено", значит у вас запущено во время работы программы больше одного Excel. Закройте их все.
- Помечено в качестве ответа Alexander.Kazantsev 23 августа 2013 г. 5:18
22 августа 2013 г. 12:59Отвечающий -
а может такое быть что у вас нет прав администратора, вроде бы вы администратор, но доступ к файлам особенно создание файла на жестком диске все же требуют разрешения. попробуйте открыть exe-шник через обычный explorer. То есть найдите его в папке bin и запустите через правую кнопку мыши правами администратора22 августа 2013 г. 20:26
-
С правами все в порядке. Ваш совет не подходит.23 августа 2013 г. 5:01
-
Прошу прощения коллега за введения Вас в заблуждение. Вы были правы, а ошибка оказалась в не закрытом OleDbConnection, который я использовал для загрузки файла в DataGridView. Спасибо за помощь!23 августа 2013 г. 5:17