|
|
||||||
Если открыт Excel, то возникает ошибка при сохранении09.03.2020, 13:42. Показов 3224. Ответов 15
Здравствуйте!
Если что-то неправильно (не та ветка и т.д.), то я первый раз на форуме. Пишу программу, работающую с Excel. Сохраняет-загружает нормально, большинство ошибок исправил. Но когда жмёшь кнопку "Сохранить в Excel" и одновременно открыт файл, в который нужно сохранить, то выдаёт ошибку "Project ИМЯ_ТАКОЕ-ТО.exe raised exception class EOleException with message 'Нет доступа к ИМЯ_ТАКОЕ-ТО.xlsx''. Process stopped. Use Step or Run to continue", зелёная стрелка указывает на строку Excel.WorkBooks[1].WorkSheets[1].SaveAs(GetExcelFileName), выделенную синим цветом и Excel остаётся в фоновых процессах Диспетчера задач. Если без Delphi запускаю из Windows скомпилированный exe-файл и одновременно открыт файл, куда нужно сохранить, тогда тоже выдаёт ошибку 'Нет доступа к ИМЯ_ТАКОЕ-ТО.xlsx'. Есть ли что-то вроде Excel.DisplayAlerts := False, чтобы перехватить эту ошибку и либо закрыть Excel (необязательно. Пользователь открыл - пусть сам и закрывает), либо вывести вежливый ShowMessage с просьбой закрыть файл вместо ошибки "Нет доступа"? Помогите, пожалуйста. Уже несколько дней эту проблему ищу. Спасибо! PS: попробовал хитрость - сохранять с другим расширением файла, чтобы пользователь просто не пробовал его открывать. Но какая-то эта хитрость... нечестная .На всякий случай программный код кнопки "Сохранить в Excel":
Многострочные коды пробовал добавлять, но много багов получается. Пожалуйста, попроще, если есть.
0
|
||||||
| 09.03.2020, 13:42 | |
|
Ответы с готовыми решениями:
15
При сохранении xml возникает ошибка, связанная с кодировкой
Ошибка при сохранении Excel файла |
|
Модератор
|
|
| 09.03.2020, 15:14 | |
|
А как, интересно, Вы хотите записать данные в файл, уже открытый на редактирование? Такой фокус не пройдет, если только сама книга Excel не настроена на многопользовательский режим... Ищите открытые процессы Excel, проверяйте на соответствие открытый файл и свое имя и если совпадает - либо сами убивайте процесс либо просите сделать это пользователя...
Но вообще - это не есть гут - лезть программно в файл, куда могут залезть другие пользователи... Очень много косяков можно огрести...
0
|
|
|
|
|
| 09.03.2020, 15:49 [ТС] | |
|
записать данные в файл, уже открытый на редактирование, я не хочу. Я как раз ищу вариант "либо сами убивайте процесс либо просите сделать это пользователя".
Видимо, подобный вопрос рассмотрен в теме Проверить открыт ли файл excel, если да закрыть, но мне не удалось это применить, не всё понятно (я не программист по образованию).
0
|
|
|
|
|
| 09.03.2020, 16:27 [ТС] | |
|
Понятно, спасибо!
0
|
|
|
Модератор
|
|
| 09.03.2020, 16:31 | |
|
Alexander-7, я еще раз не постесняюсь спросить: почему файл, куда Вы что-то пытаетесь писать программно, должен быть открыт каким-то левым пользователем? Что за глобальная задача перед Вами поставлена?
0
|
|
|
|
|||
| 10.03.2020, 13:39 [ТС] | |||
|
D1973, например, поработал пользователь в написанной мной программе. Потом нажал "Сохранить" и программа сама создала файл Excel. Он заинтересовался, что это за файл появился, открыл его. Забыл закрыть (или не знает, что надо закрыть), переключился на программу, что-то изменил и опять захотел сохранить. Так вот надо, чтобы вместо ошибки "Нет доступа к ..." вышло заготовленное сообщение: "Закройте, пожалуйста ...".
Я много вариантов перепробовал. Уже устал с этим вопросом. Буду благодарен, если кто подскажет конкретную строчку (или 2-3), но не "многоэтажные" процедуры, которые в ссылке выше: пока что я не спец в Delphi. Если такого нет, то извиняюсь за беспокойство. Добавлено через 27 минут
0
|
|||
| 10.03.2020, 13:42 | ||
|
Проверить открыт ли файл excel, если да закрыть то есть если в решении больше 3х строк, то ты им не воспользуешься? как же ты будешь программы писать?
0
|
||
|
|
|
| 10.03.2020, 14:15 [ТС] | |
|
qwertehok, именно эту ссылку я сам привёл Выше. Можно и больше 3-х строк.
0
|
|
|
|
||||||
| 15.03.2020, 16:05 [ТС] | ||||||
|
Решение найдено. Сделал через SaveDialog и OpenDialog. Вероятность подключения к запущенному excel отлавливаю через try-except. По крайней мере, ошибку не выдаёт. Как-то так:
После этого SaveAs, finally и т.д.
0
|
||||||
|
|
|
| 16.03.2020, 14:36 [ТС] | |
|
qwertehok, это хорошо или плохо? Пустой except я нашёл на . Сам Excel остаётся в фоновых процессах.
И ещё. Что такое VarIsEmpty(Excel) доступными словами? Что означает, когда оно = true и когда = false? Добавлено через 55 секунд - здесь Пустой except Добавлено через 1 минуту Ссылки на чужие форумы запрещены? В общем нашёл где-то.
0
|
|
|
|
||||||
| 02.04.2020, 16:08 [ТС] | ||||||
|
Решение я всё-таки нашёл. Ларчик просто открывался. Чтобы тема не «висела» без ответа, завершу – может ещё кому-то пригодится:
1. Заключить SaveAs в try-except.
2. Отключить реакцию системы Delphi на исключительные ситуации, тем самым давая возможность отработать операторам try/except/end. Пункт системного меню Delphi Tools -> Debugger Options. В появившемся окошке нужно снять галку в чекбоксе Stop on Delphi Exceptions, расположенном на вкладке Language Exceptions. Также потом советуют вернуть эту галочку. Теперь всё чётко работает.
0
|
||||||
| 02.04.2020, 16:45 | ||
|
код, который тебе дали выше, проверяет не открыт ли файл и прекрасно работает
0
|
||
| 02.04.2020, 16:45 | |
|
Помогаю со студенческими работами здесь
16
Ошибка при сохранении dataGridView в Excel файл. Ошибка при сохранении после чтения-записи в Excel Возникает ошибка при записи в файл Excel При сохранении данных таблицы StringGrid в Excel появляется ошибка Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|