none
Сохранение данных в уже существующий файл Excel RRS feed

  • Вопрос

  • Доброго времени суток. Буду краток. Суть задачи: сохранить данные из 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.

    Как можно избавится от этих шагов и сохранять из моего приложения?



    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