Excel не выгружается из памяти при закрытии
← →
tga ( 2002-11-28 06:51 ) [0]
Проблема такая:
Запускаю Excel (с помощбю стандартных компонент Delphi 5)
Работаю
Отсоединяюсь - Excel остаётся запущеным.
Как мне его закрыть?
вот код:
ExcelPage_Edit.Items.Clear;
try
//Запускаем Excel
Excel := TExcelApplication.Create(Application);
Excel.ConnectKind := ckNewInstance;
Excel.AutoQuit := true;
Excel.connect;
// Открываем файл
Workbook := Excel.Workbooks.Open(self.Price.FullName, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, true, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam, false, xlLCID);
// Читаем название всех страниц и пишем
// в итемы для TComboBox (ExcelPage_Edit)
Worksheets := Workbook.Worksheets;
for i:=1 to Worksheets.Count do begin
WorkSheet := (Worksheets.Item[i] as ExcelWorkSheet);
ExcelPage_Edit.Items.Add(WorkSheet.Get_Name);
end;
// Закрываем файл
Workbook.Close(false, EmptyParam, EmptyParam, xlLCID);
Workbook := nil;
// Теперь закрываем Excel
// Excel.FreeNotification(Application);
// Excel.Disconnect;
Excel.Quit;
// Excel.RemoveFreeNotification(Application);
Не работает. - Не закрывается Excel
не Quit, не любой из закоментированных вариантов, не их комбинции.
Объясните в чём тут дело, и как переделать чтоб Excel закрылся.
Заранее благодарен.
← →Наталия ( 2002-11-28 06:53 ) [1]
Excel.UnAssigned
← →tga ( 2002-11-28 07:02 ) [2]
Наталия © Спасибо за подсказку - но она НЕ РАБОТАЕТ. Вообще выдаётся ошибка при компиляции - неопределённый идентификатор "UnAssigned" :((((
← →Наталия ( 2002-11-28 07:25 ) [3]
E:=CreateOleObject("Excel.Application");
.
E:=UnAssigned;
Fantasist ( 2002-11-29 00:18 ) [4]
Ну добавь Excel.Free.Деструктор TOleControl много чего освобождает.
← →Fantasist ( 2002-11-29 06:37 ) [5]
> Деструктор TOleControl много чего освобождает
x.Workbooks.Close(xlLCID);
x.Disconnect;
x.Quit;
хотя я даже не знаю, что за параметр такой
LCID, но у меня работает :~)
Если кто знает, что этот параметр значит, напишите пожалуйста.
AlexGreG ( 2002-12-02 08:16 ) [7]
. добавочка
сам Excel, непонятно почему, выгружается из памяти при закрытии программы.
(я использую компоненту ExcelApplication с закладки Servers)
← →AlexGreG ( 2002-12-02 08:40 ) [8]
. разобрался
Excel выгружается, когда компонент TExcelApplication освобождает память, т.е. при TExcelApplication.Free;
← →OlDemon ( 2002-12-02 10:21 ) [9]
А я использую позднее связывание и просто делаю FExcel:= nil
что освобождает память и убивает процесс. Может и вам поможет :)
Илайдж ( 2002-12-02 10:42 ) [10]
Как вариант - по крайней мере у меня эта проблема решена именно так.
E := CreateOleObject("Excel.Application");
.
E.Quit;
E := 0; // вот это ОНО
Fantasist ( 2002-12-02 20:56 ) [11]
> Илайдж (02.12.02 10:42)
> Как вариант - по крайней мере у меня эта проблема решена
> именно так.
Это уже было выше:
> Наталия © (28.11.02 07:25)
> E:=CreateOleObject("Excel.Application");
> .
> E:=UnAssigned;
Но мы не любим позднее связывание. :)
> Excel выгружается, когда компонент TExcelApplication освобождает
> память, т.е. при TExcelApplication.Free;
И енто уже было:
> Fantasist © (29.11.02 00:18)
> Ну добавь Excel.Free.
kse ( 2002-12-09 16:23 ) [12]
Мой ответ немного ( :))) ) запоздал, но тем не менее, мож кто читать будет.
У меня так
ea: TExcelApplication;
eb: TExcelWorkbook;
.
eb.Close;
eb.Disconnect;
ea.Quit;
ea.Disconnect;
Excel закрывается без вопросов и в процессах его нет. (Иль мож я чего не понимаю)
Delphi 6, Win2K, Excel2000.
Я тоже несколько раз заходил на решение этой проблемы, но никак не мог понять, почему процесс Excel.exe никак не хочет вылезать из памяти? Между тем генерация Excel или Word документов частенько требуется в различных проектах.
Вопрос на засыпку: в какой строке будет утечка памяти?
В комментариях несколько полезных советов по этой теме.
14 комментариев:
Значит нормально работать с Excel.Interop и избежать утечек памяти могут только законченные маньяки-параноики :)
@Shum
Да, другая крайность запоминать все процессы до начала работы с Excel и убивать созданный процесс командой Kill =)
Этот комментарий был удален администратором блога.
А если использовать динамическую привязку к Excel?
Через:
obj.GetType().InvokeMember(name, BindingFlags.GetProperty, null, obj, null);
@nikdmt
Да, можно и так. Такой вариант я даже находил где-то на MSDN. На самом деле по синтаксису он не на много проще стандартного варианта (который привел я).
Спасибо за дополнение!
По идее все должно решаться без изращений (без ReleaseComObject) если запускать процедуру работы с Excel в отдельном Application Domain
Признаюсь, что с Excel не пробовал, но с другими COM компонентами помогало.
@Ivan
Да, как вариант.
Уже получается:
1. Следить за удалением COM объектов из памяти
2. Использовать позднее связывание
3. Создать COM объекты в отдельном домене
Да. Забавный этот Excel. После исправлений одной программы чистил все через ReleaseComObject, приравнивал линки к null + сразу делал GC.Collect. Excel выгружается, но на всякий пожарный всетаки оставил код с убийством процесса :))
Для истинных ценителей всей убогости Excel.Interop предлагаю 100% гарантированный и безопасный способ борьбы с висящими зомби-процессами:
[DllImport("user32.dll", SetLastError = true)]
static extern uint GetWindowThreadProcessId(int hWnd, ref int lpdwProcessId);
.
application = new Application ;
int excelProcessId = -1;
GetWindowThreadProcessId(application.Hwnd, ref excelProcessId);
//
// Выполняем операции
// и выходим штатным методом
// после этого для верности пытаемся прибить процесс
try
var process = Process.GetProcessById(excelProcessId);
process.Kill();
>
Таким образом вы никогда не прибьёте чужой Excel процесс, но свой прибьёте со 100% гарантией.
Осталось добавить сюда запуск в отдельном процессе с таймаутом ожидания (иначе на простой workbook.Close() на сервере может вылезти диалоговое окошко и вы никогда об этом не узнаете) - и всё будет по фэн-шую :)
Да, Денис, ты прокачался круче всех =)
Нет предела совершенству :) Новый вариант БЕЗ использования не фэн-шуйного DllImport'а - прибиваем процесс по его HWND:
Process.GetProcesses().Where(p => p.MainWindowHandle.ToInt32() == applicationHwnd).ToList().ForEach(process => process.Kill());
после строки 10 у меня только 1 строка:
application = null;
для того, чтобы отвязать указатель =)
после закрытия программы и эксэля процесс умирает
Casino - Filmfile europe
Casino - See more at Moviefile 더 사이드 europe. You 슈어벳 can play any type of casino games 사설토토 사다리 샤오미 including roulette, blackjack, 사다리 토토 넷마블 poker, 게임 종류 casino, live casino, slot machine,
Office 365 ProPlus переименован в Майкрософт 365 корпоративные приложения. Для получения дополнительной информации об этом изменении прочитайте этот блог.
Симптомы
- Excel не удается выполнить эту задачу с помощью доступных ресурсов. Выберите меньше данных или закройте другие приложения.
- Недостаточно памяти
- Недостаточно системных ресурсов для полного вывода на экран
- Для выполнения этого действия не хватает памяти. Попробуйте использовать меньше данных или закройте другие приложения. Чтобы увеличить доступный объем памяти, вы можете:
- Использовать 64-разрядную версию Microsoft Excel.
- Расширить память своего устройства.
Причина
Прежде чем исследовать более распространенные причины ошибок памяти, рекомендуется ознакомиться с ограничениями Excel. Дополнительные сведения можно найти в следующих статьях:
Если ресурсы не были ограничены, воспользуйтесь приведенными ниже наиболее распространенными решениями.
Решение
Метод 1. Содержимое электронной таблицы
- Вставка строки или столбца
- сортировке;
- Выполнение вычислений
- Копирование и вставка
- Открытие или закрытие книги
- Запуск VBA
Если ошибка отображается при выполнении любого из вышеперечисленных действий, пришло время определить, что происходит в файле. Более подробно эти сведения будут рассмотрены в разделах ниже.
Вычисления
Рассмотрим следующий сценарий:
У вас есть таблица с 1 миллионом формул на листе, и вы вставляете новый столбец. Excel должен будет пересчитать все формулы в электронной таблице в соответствии со вставленным столбцом. Возможно, ошибка «Недостаточно ресурсов» возникает в зависимости от сложности и способа создания электронной таблицы, разрядности Excel и типа используемых формул.
Следующие статьи посвящены оптимизации производительности при выполнении вычислений:
Другие элементы электронной таблицы
Другими областями, которые могут вызывать проблемы с памятью, являются избыточные фигуры, сложные сводные таблицы, макросы и сложные диаграммы с большим количеством точек данных. Следующая статья посвящена выявлению и устранению этих проблем.
Настраиваемые представления в общей книге
Если вы используете функцию «Общая книга» (Рецензирование > Общий доступ к книге), очистка Настраиваемых представлений может помочь с доступной памятью. Выполните следующие действия:
- На Просмотреть ленту
- Настраиваемые представления в диалоговом окне выбрать Удалить
Удаление Настраиваемых представлений ничего не удаляет в электронной таблице, но удаляет области печати и фильтры. Их можно легко применять повторно.
Если после очистки файла не удалось решить проблему, перейдите к способу 2.
Способ 2: Проверьте наличие/установите последние обновления
Возможно, потребуется настроить Центр обновления Windows на автоматические загрузку и установку рекомендуемых обновлений. Установка важных, рекомендуемых и необязательных обновлений зачастую может решить проблемы за счет замены устаревших файлов и устранения уязвимостей. Чтобы установить последние обновления Office, перейдите по ссылке, соответствующей вашей версии Windows, и следуйте указаниям в статье.
Обновления операционной системы:
Обновления Office:
Для получения дополнительной информации об обновлениях Office см. Загрузка и обновление Office.
Если после установки обновлений не удалось решить проблему, перейдите к способу 3.
Способ 3: надстройки создают препятствия
Проверьте запущенные надстройки и попробуйте отключить их, чтобы убедиться, что Excel работает правильно. Следуйте указаниям в следующей статье, чтобы отключить надстройки.
Если после удаления надстроек Excel больше не выдает ошибку, рекомендуется обратиться за поддержкой к производителю надстройки.
Если после удаления надстроек не удалось решить проблему, перейдите к способу 4.
Способ 4: тестовое отключение Области просмотра/Области сведений в Windows 7
Если вы используете Windows 7, попробуйте отключить Области просмотра и Области сведений в Windows. Вам придется отключить их в трех местах.
Если проблема не будет решена после отключения области просмотра и области сведения, перейдите к способу 5.
Способ 5: проверьте другой принтер по умолчанию
При запуске Excel использует принтер по умолчанию для визуализации файла. Попробуйте протестировать с «Средство записи XPS-документов (Майкрософт)» в качестве принтера по умолчанию и проверьте, продолжает ли появляться ошибка. Для этого выполните указанные ниже действия.
Если проблема не будет решена после смены принтера по умолчанию, перейдите к способу 6.
Способ 6: тестирование без антивируса
Антивирусы иногда могут создавать проблемы, постоянно пытаясь просканировать файл Excel или что-либо в файле. Во многих случаях ошибка памяти носит случайный характер и может быть обнаружена в любой электронной таблице. Проверьте это путем временного отключения антивируса или отказом от сканирования файлов Excel. В некоторых случаях необходимо удалить антивирус.
Если проблема не будет решена после отключения антивируса, перейдите к способу 7.
Способ 7: тестирование с 64-разрядной версией Excel
Работа с большими файлами Excel может использовать память, доступную 32-разрядному приложению Excel. В любом 32-разрядном приложении существует ограничение в 2 ГБ.
Если для ваших процессов требуется использовать более 2 ГБ, тогда вам необходимо тщательно рассмотреть возможность перехода на 64-разрядную версию Microsoft Excel. 64-разрядная версия позволит использовать всю доступную физическую оперативную память на компьютере. Если вы заинтересованы в изучении 64-разрядных версий, см. 64-разрядные версии Office 2013.
Если проблема не будет решена после тестирования на 64-разрядной версии, перейдите к способу 8.
Способ 8: другие приложения потребляют память компьютера, а для Excel выделяется недостаточно памяти
Дополнительная информация
Если информация в этой статье не помогла устранить ошибку в Excel, выберите один из следующих вариантов:
Office 365 ProPlus переименован в Майкрософт 365 корпоративные приложения. Для получения дополнительной информации об этом изменении прочитайте этот блог.
Microsoft Excel автоматически сохраняет файл в процессе работы с книгой. Присваивает файлу имя временного файла и помещает файл в ту же папку, где хранится исходная версия. При ручном сохранении книги исходный файл удаляется, а временному файлу присваивается исходное имя файла.
Следующая информация может помочь вам определить возможные причины этой проблемы и предлагает решения для ее устранения.
Возможные причины, по которым документы не сохраняются
Выберите интересующую вас вкладку или перейдите в раздел «Быстрое разрешение».
- Надстройки сторонних разработчиков
- Разрешения
- Документ не сохранен
- Место на диске
- Антивирусное ПО
- Общий доступ к файлам
- Имя файла
Если не удается сохранить книгу в приложении Microsoft Excel, запущенном в безопасном режиме Windows, проблема может быть связана с использованием надстройки стороннего разработчика или файла, находящегося в одной из папок автозагрузки Excel. По умолчанию загрузочные файлы загружаются при запуске Excel.
Некоторые надстройки от сторонних разработчиков ПО предназначены для работы с существующими функциями Excel, тогда как другие обеспечивают удобный переход при использовании программы стороннего производителя. Обычно эти надстройки сторонних разработчиков не влияют на функциональность Excel. Тем не менее, могут быть затронуты некоторые функции, такие как сохранение файла.
Чтобы определить и исключить вероятность того, что надстройка Excel от стороннего разработчика или файл вызывают проблему с сохранением в Excel, попробуйте сохранить файл в безопасном режиме. Для этого выполните следующие действия:
Закройте программу Excel.
Нажмите Пуск и выберите пункт Программы.
Программа Excel обнаружила, что нажата клавиша CTRL. Запустить Excel в безопасном режиме?
Выберите Да.
Откройте новую книгу Excel и постарайтесь сохранить ее. Если это помогло, попробуйте еще раз сохранить проблемный файл.
Если теперь файл сохраняется правильно, то скорее всего причиной возникновения проблемы является пользовательская надстройка или файл в папке автозагрузки Excel. Для устранения проблемы необходимо найти и удалить эту надстройку или файл. После того как вы определили, какая надстройка или файл стали причиной проблемы, свяжитесь с поставщиком для получения дополнительной информации или обновления, которое решит проблему.
Для получения дополнительных сведений о безопасном режиме Microsoft Excel, нажмите в Excel клавишу F1, чтобы перейти в меню «Справка». Введите запрос безопасный режим в поле поиска, а затем нажмите кнопку Поиск, чтобы просмотреть нужные сведения.
Дополнительные сведения о том, как определить папки, которые Excel использует при запуске, и дополнительные параметры для отключения этой функции, см. в следующих статьях:
Чтобы можно было сохранить файл Excel, необходимы перечисленные ниже разрешения на работу с папкой, в которой предполагается сохранить файл.
- Разрешение на чтение
- Разрешение на запись
- Разрешение на изменение
- Разрешения на удаление
Не удается получить доступ к документу только для чтения
- Вы открываете существующий файл, а затем пытаетесь сохранить его.
- Вы сохраняете файл на внешнем или сетевом диске, и происходит сбой подключения.
При отсутствии указанных разрешений процесс сохранения в Excel не может быть завершен.
- Документ не сохранен
- Документ сохранен неполностью
- Документ не сохранен. Все ранее сохраненные копии были удалены.
- Документ не сохранен.
«Документ не сохранен» или «Документ сохранен неполностью»
При попытке создать временный файл процесс был прерван, возможно, по одной из следующих причин:
- Была нажата клавиша ESC
- Аппаратный сбой
- Программный сбой
- Проблема, связанная с носителем
Исходный файл все еще не изменен. Версия файла с текущими изменениями открыта в памяти до тех пор, пока не произойдет сбой на компьютере или рабочей станции.
Попробуйте сохранить файл на альтернативном диске.
Любые изменения, внесенные в последнюю версию, будут утеряны.
«Документ не сохранен». «Все ранее сохраненные копии были удалены» или «Документ не сохранен»
Процесс был прерван во время удаления исходного файла или переименования временного файла. Эта проблема возникает по тем же причинам, которые описаны в разделе «Документ не сохранен» или «Документ сохранен не полностью».
В этом случае исходный файл удаляется (хотя временный файл может быть доступен для чтения). Если на компьютере или рабочей станции произошел сбой, используйте временный файл. Если прерывание произошло по иной причине, то версия файла с текущими изменениями по-прежнему открыта в памяти. Сохраните файл на альтернативном диске.
Чтобы проверить, не конфликтует ли установленное антивирусное ПО с Excel, временно отключите его, затем попробуйте сохранить файл в Excel.
Недопустимое имя файла.
Процесс сохранения файла
Когда приложение Excel сохраняет файл, оно делает это в соответствии с описанной ниже процедурой.
- В целевой папке, указанной в диалоговом окне Сохранить как, Excel создает временный файл со случайным именем (например, Cedd4100 без расширения имени файла). В этот временный файл записывается вся книга.
- Если сохраняются изменения существующего файла, Excel удаляет исходный файл.
- Excel изменяет имя временного файла, присваивая ему имя, указанное в диалоговом окне Сохранить как (например, Book1.xls).
Быстрое разрешение проблемы
Если какая-либо из вышеуказанных причин не относится к вашей ситуации или вам по-прежнему не удается сохранить книги, попробуйте следующие варианты, чтобы сохранить файлы в Excel. Чтобы узнать больше о шагах, выберите изображение шеврона слева или заголовок параметра.
Сохранение книги с новым именем файла
- В меню Файл выберите команду Сохранить как.
- Сохранение книги с уникальным именем
Перемещение исходных листов в новую книгу
- Добавьте лист заполнителя в книгу, Для этого нажмите Shift+F11.
- Сгруппируйте все листы (кроме фильтра). Для этого щелкните первый лист и, нажав и удерживая клавишу Shift, щелкните последний лист.
- Щелкните сгруппированные листы правой кнопкой мыши и выберите команду Переместить или скопировать.
- В списке В книгу выберите пункт (Новая книга).
- Нажмите OK.
Сохранение файла в другом формате Excel
- В меню Файл выберите команду Сохранить как.
- В списке Тип файла выберите формат файла, отличный от текущего. Если используется приложение Microsoft Excel 2007 или более поздней версии, сохраните файл в формате XLSX или XLSM вместо XLS.
Попробуйте сохранить книгу в другом месте
Попробуйте сохранить записную книжку в другом месте, например, на локальном жестком диске, сетевом диске или съемном диске.
Попробуйте сохранить новую книгу в исходном месте
Создайте книгу Excel.
В меню Файл выберите команду Сохранить как.
В диалоговом окне Сохранить как выполните указанные ниже действия.
- В поле Папка выберите папку, в которой хранится исходная книга.
- В поле Имя файла введите имя для нового файла.
- Выберите Сохранить.
Попробуйте сохранить книгу в безопасном режиме
Перезапустите Windows в безопасном режиме и попробуйте сохранить книгу на локальный жесткий диск.
Дополнительные ресурсы
Чтобы избежать проблем с сохранением документов должным образом, мы рекомендуем включить автосохранение. Дополнительные сведения см. в разделе Что такое автосохранение?
Если при использовании Excel у вас возникли определенные проблемы, перейдите на следующий веб-сайт, чтобы найти более подробную информацию о версии вашей программы:
Подробный обзор параметров
В следующем разделе приводится более подробное описание этих вариантов.
Проблемы при сохранении книги Microsoft Excel могут возникнуть, если выполняются какие-либо из указанных ниже условий.
- Пользователь пытается сохранить книгу Excel на сетевом диске при отсутствии необходимых для этого разрешений.
- Вы пытаетесь сохранить книгу Excel на диске с недостаточным объемом свободного места.
- Утрачено соединение с книгой Excel.
- Имеется конфликт с антивирусной программой.
- Предпринимается попытка сохранить общую книгу Excel.
- При сохранении книги Excel превышено ограничение на длину пути (218 знаков).
Обходные пути для сохранения книг Excel
Для временного решения этой проблемы и сохранения работы перед началом устранения неполадок воспользуйтесь следующими способами. Возможно, восстановить текущий файл в его текущем виде не удастся — это зависит от причины проблемы. Однако следующие способы часто оказываются полезны. Они расположены по степени сохранности формата (с учетом попытки сохранить файл в формате, максимально близком к исходному).
Описанные ниже способы не всегда позволяют сохранить все последние изменения, форматирование и параметры, специфичные для используемой версии Excel. Они предназначены для сохранения файла в форме, допускающей его использование. Вам потребуется сохранить файл на локальный жесткий диск, используя уникальное имя файла.
Вариант 1. Сохранение книги с новым именем
- В меню Файл выберите команду Сохранить как.
- Сохранение книги с уникальным именем
Вариант 2. Перемещение исходных листов в новую книгу
Добавьте лист заполнителя в книгу, Для этого нажмите Shift+F11.
Этот лист требуется потому, что после перемещения всех необходимых листов данных в книге должен остаться хотя бы один лист.
Сгруппируйте все листы (кроме фильтра). Для этого щелкните первый лист данных, затем, удерживая клавишу Shift, щелкните последний лист данных.
Щелкните сгруппированные листы правой кнопкой мыши и выберите команду Переместить или скопировать.
В списке В книгу выберите пункт (Новая книга).
Нажмите OK.
В результате этих действий активные (сгруппированные) листы должны переместиться в новую книгу.
Если в книге содержатся макросы VBA, скопируйте модули в новую книгу.
Вариант 3. Сохранение файла в другом формате Excel
- В меню Файл выберите команду Сохранить как.
- В списке Тип файла выберите формат файла, отличный от текущего. Если используется приложение Microsoft Excel 2007 или более поздней версии, сохраните файл в формате XLSX или XLSM вместо XLS.
Вариант 4. Попробуйте сохранить книгу в другое место
Попробуйте сохранить книгу в другом месте, например, на локальном жестком диске, сетевом диске или съемном диске. Если вам удалось это сделать, возможны следующие причины проблемы:
- Конфликт с антивирусной программой
- Отсутствие необходимых разрешений
- Чрезмерная длина имени файла
- Конфликт общего доступа к файлу
Вариант 5. Попробуйте сохранить новую книгу в исходное место.
Чтобы сохранить новый файл Excel в первоначальном месте, выполните следующие действия:
Создайте книгу Excel.
В меню Файл выберите команду Сохранить как.
В диалоговом окне Сохранить как выполните указанные ниже действия.
- В поле Папка щелкните папку, в которой хранится исходная книга.
- В поле Имя файла введите имя для нового файла.
- Выберите Сохранить.
Если новую книгу удается сохранить в первоначальном месте, проблема может быть вызвана указанными ниже причинами.
- Чрезмерная длина имени файла
- Конфликт общего доступа к файлу
Если новую книгу не удается сохранить в первоначальном месте, проблема может быть вызвана указанными ниже причинами.
Если на диске достаточно свободного места, попробуйте способ 3.
Вариант 6. Попробуйте сохранить книгу в безопасном режиме
Перезапустите Windows в безопасном режиме и попробуйте сохранить книгу на локальный жесткий диск.
Примечания.
- Если для сохранения книги используется сетевая папка, перезагрузите Windows в безопасном режиме с поддержкой сети и попытайтесь сохранить книгу еще раз.
- Для устранения неполадок в Microsoft Excel 2010 и более поздних версиях нельзя использовать безопасный режим Windows.
Дополнительные сведения о запуске Windows в безопасном режиме см. Расширенные параметры запуска (включая безопасный режим).
Если книга сохраняется после перезагрузки Windows в безопасном режиме, попытайтесь сохранить файл еще раз. Для этого выберите в меню Файл пункт Сохранить.
Если книга не сохраняется после перезагрузки Windows в безопасном режиме, проблема может быть вызвана указанными ниже причинами:
← →
tga ( 2002-11-28 06:51 ) [0]Проблема такая:
Запускаю Excel (с помощбю стандартных компонент Delphi 5)
Работаю
Отсоединяюсь - Excel остаётся запущеным.Как мне его закрыть?
вот код:
ExcelPage_Edit.Items.Clear;try
//Запускаем Excel
Excel := TExcelApplication.Create(Application);
Excel.ConnectKind := ckNewInstance;
Excel.AutoQuit := true;
Excel.connect;// Открываем файл
Workbook := Excel.Workbooks.Open(self.Price.FullName, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, true, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam, false, xlLCID);// Читаем название всех страниц и пишем
// в итемы для TComboBox (ExcelPage_Edit)
Worksheets := Workbook.Worksheets;
for i:=1 to Worksheets.Count do begin
WorkSheet := (Worksheets.Item[i] as ExcelWorkSheet);
ExcelPage_Edit.Items.Add(WorkSheet.Get_Name);
end;// Закрываем файл
Workbook.Close(false, EmptyParam, EmptyParam, xlLCID);
Workbook := nil;// Теперь закрываем Excel
// Excel.FreeNotification(Application);
// Excel.Disconnect;
Excel.Quit;
// Excel.RemoveFreeNotification(Application);Не работает. - Не закрывается Excel
не Quit, не любой из закоментированных вариантов, не их комбинции.Объясните в чём тут дело, и как переделать чтоб Excel закрылся.
Заранее благодарен.
← →
Наталия ( 2002-11-28 06:53 ) [1]Excel.UnAssigned
← →
tga ( 2002-11-28 07:02 ) [2]Наталия © Спасибо за подсказку - но она НЕ РАБОТАЕТ. Вообще выдаётся ошибка при компиляции - неопределённый идентификатор "UnAssigned" :((((
← →
Наталия ( 2002-11-28 07:25 ) [3]E:=CreateOleObject("Excel.Application");
← →
.
E:=UnAssigned;
Fantasist ( 2002-11-29 00:18 ) [4]Ну добавь Excel.Free.Деструктор TOleControl много чего освобождает.
← →
Fantasist ( 2002-11-29 06:37 ) [5]
> Деструктор TOleControl много чего освобождает
x.Workbooks.Close(xlLCID);
x.Disconnect;
x.Quit;хотя я даже не знаю, что за параметр такой
LCID, но у меня работает :~)Если кто знает, что этот параметр значит, напишите пожалуйста.
← →
AlexGreG ( 2002-12-02 08:16 ) [7]. добавочка
сам Excel, непонятно почему, выгружается из памяти при закрытии программы.
(я использую компоненту ExcelApplication с закладки Servers)
← →
AlexGreG ( 2002-12-02 08:40 ) [8]. разобрался
Excel выгружается, когда компонент TExcelApplication освобождает память, т.е. при TExcelApplication.Free;
← →
OlDemon ( 2002-12-02 10:21 ) [9]А я использую позднее связывание и просто делаю FExcel:= nil
← →
что освобождает память и убивает процесс. Может и вам поможет :)
Илайдж ( 2002-12-02 10:42 ) [10]Как вариант - по крайней мере у меня эта проблема решена именно так.
E := CreateOleObject("Excel.Application");
.
E.Quit;
E := 0; // вот это ОНО
Fantasist ( 2002-12-02 20:56 ) [11]
> Илайдж (02.12.02 10:42)
> Как вариант - по крайней мере у меня эта проблема решена
> именно так.
Это уже было выше:
> Наталия © (28.11.02 07:25)
> E:=CreateOleObject("Excel.Application");
> .
> E:=UnAssigned;
Но мы не любим позднее связывание. :)
> Excel выгружается, когда компонент TExcelApplication освобождает
> память, т.е. при TExcelApplication.Free;
И енто уже было:
> Fantasist © (29.11.02 00:18)
> Ну добавь Excel.Free.
kse ( 2002-12-09 16:23 ) [12]Мой ответ немного ( :))) ) запоздал, но тем не менее, мож кто читать будет.
У меня так
ea: TExcelApplication;
eb: TExcelWorkbook;
.
eb.Close;
eb.Disconnect;
ea.Quit;
ea.Disconnect;Excel закрывается без вопросов и в процессах его нет. (Иль мож я чего не понимаю)
Delphi 6, Win2K, Excel2000.Читайте также: