powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Завершение процесса Excel из Delphi
25 сообщений из 52, страница 2 из 3
Завершение процесса Excel из Delphi
    #38431329
Lizard17rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
такое чувство, что ему не сортировка ненравится, а Sheet.Range
как будто новая ссылка на документ, которая не дестроилась, и соответственно не отпускает процесс. что делать?
...
Рейтинг: 0 / 0
Завершение процесса Excel из Delphi
    #38431337
Dmitri Krizhanovski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lizard17rus,

Попробуй добавить переменную Rng по типу XL, Workbook, Sheet: OleVariant; использовать ее в сортировке:
Код: pascal
1.
2.
3.
Rng := Sheet.Range[Sheet.Cells[head+1, 1], Sheet.Cells[head+rows, 12]];
Rng.UnMerge;
Rng.Sort(Key1:=Sheet.Columns[3], Order1:=1, Key2:=Sheet.Columns[9], Key3:=Sheet.Columns[10]);


и в конце
Rng := Unassigned;
...
Рейтинг: 0 / 0
Завершение процесса Excel из Delphi
    #38431341
Dmitri Krizhanovski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lizard17rusтакое чувство, что ему не сортировка ненравится, а Sheet.Range
как будто новая ссылка на документ, которая не дестроилась, и соответственно не отпускает процесс. что делать?А вдруг ты прав?
...
Рейтинг: 0 / 0
Завершение процесса Excel из Delphi
    #38431358
Lizard17rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не проканало((
зато точно не в сортировке дело.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
procedure TfrmMainForm.DataLoad1(FileName: string);
var
XL, Workbook, Sheet, Rng: OleVariant;
str: string;
RefStyle, x, y, rows: Integer;
ar: array of array[0..12] of string;
const
head: Integer = 3;
begin
XL := CreateOleObject('Excel.Application');
XL.DisplayAlerts := False;
XL.Visible := True;
RefStyle := XL.ReferenceStyle;
XL.ReferenceStyle := -4150;
Workbook := XL.WorkBooks.Open(FileName);
Sheet := Workbook.WorkSheets[1];
Sheet.Cells.Replace(What:='«', Replacement:='"');
Sheet.Cells.Replace(What:='»', Replacement:='"');
repeat
Inc(rows);
str := Sheet.Cells[rows+head, 1];
until str = '';
Dec(rows);
Rng := Sheet.Range[Sheet.Cells[head+1, 1], Sheet.Cells[head+rows, 12]];
Rng.UnMerge;
//Rng.Sort(Key1:=Sheet.Columns[3], Order1:=1, Key2:=Sheet.Columns[9], Key3:=Sheet.Columns[10]);
Sleep(10000);
XL.ReferenceStyle := RefStyle;
Rng := Unassigned;
Sheet := Unassigned;
Workbook.Close;
Workbook := Unassigned;
XL.Quit;
XL := Unassigned;
end;


щас буду всеми способами убивать Rng
...
Рейтинг: 0 / 0
Завершение процесса Excel из Delphi
    #38431373
Dmitri Krizhanovski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lizard17rus,

Попробуй убрать Workbook.Close;, а вместо XL.Quit напиши
Код: pascal
1.
XL.Quit( SaveChanges := 0 {wdDoNotSaveChanges} )
...
Рейтинг: 0 / 0
Завершение процесса Excel из Delphi
    #38431398
Lizard17rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
грит нет такого метода.
но алерты выключены, поэтому сразу закроет без запросов и соответственно без сохранения.
...
Рейтинг: 0 / 0
Завершение процесса Excel из Delphi
    #38431407
Lizard17rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
у тебя этот код отрабатывает нормально? или тоже с выкрутасами?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
procedure TfrmMainForm.DataLoad1(FileName: string);
var
XL, Workbook, Sheet, Rng: OleVariant;
str: string;
RefStyle, x, y, rows: Integer;
const
head: Integer = 3;
begin
XL := CreateOleObject('Excel.Application');
XL.DisplayAlerts := False;
XL.Visible := True;
Workbook := XL.WorkBooks.Open(FileName);
Sheet := Workbook.WorkSheets[1];
rows := 5;
Rng := Sheet.Range[Sheet.Cells[head+1, 1], Sheet.Cells[head+rows, 12]];
Rng.UnMerge;
//Sleep(10000);
Rng := Unassigned;
Sheet := Unassigned;
Workbook := Unassigned;
XL.Quit;
XL := Unassigned;
end;



Модератор: Пользуйтесь тегом (кнопкой) SRC для оформления кода, пожалуйста.
...
Рейтинг: 0 / 0
Завершение процесса Excel из Delphi
    #38431416
Lizard17rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот так прокатило
Rng := Sheet.Range['A4:L8'];
...
Рейтинг: 0 / 0
Завершение процесса Excel из Delphi
    #38431423
Dmitri Krizhanovski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lizard17rusу тебя этот код отрабатывает нормально? или тоже с выкрутасами?Нормально.
...
Рейтинг: 0 / 0
Завершение процесса Excel из Delphi
    #38431435
Lizard17rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmitri KrizhanovskiLizard17rusу тебя этот код отрабатывает нормально? или тоже с выкрутасами?Нормально.
рву на голове волосы
...
Рейтинг: 0 / 0
Завершение процесса Excel из Delphi
    #38431680
Lizard17rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нашел я в чем проблема.
запись Sheet.Range['A1:L8']; не равна записи Sheet.Range['A'+IntToStr(1)+':L'+IntToStr(8)];
надо как-то типы преобразовать.
помнится было что-то из серии string и char.
сил уже нету по инету лазить искать, а на память не помню.
...
Рейтинг: 0 / 0
Завершение процесса Excel из Delphi
    #38431695
Lizard17rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
точнее нужно сначала определить какой тип данных нужно передавать в Range и к нему привести слагаемые
...
Рейтинг: 0 / 0
Завершение процесса Excel из Delphi
    #38432114
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lizard17rusИ все равно Excel висит(!) в процессах до закрытия приложения.
http://www.sql.ru/forum/888543/pochemu-eksel-zavershaetsya-tolko-posle-couninitialize
...
Рейтинг: 0 / 0
Завершение процесса Excel из Delphi
    #38432115
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lizard17rusсортировка.....
еле-еле ее смог прикрутить, а она торчит.
умеет кто делать сортировку по 3 столбцам?Сам Excel умеет.
Запиши макро и реализуй на Delphi.
Ещё ADO можно прикрутить :)
...
Рейтинг: 0 / 0
Завершение процесса Excel из Delphi
    #38432254
Lizard17rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gator - спасибо. это решение помогло.
Dmitri Krizhanovski - тоже огромный респ за вклад

ИТОГО - Нормально закрыть Excel в работе:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
uses
..., ComObj, ActiveX;

var
XL, Workbook, Sheet, Rng: OleVariant;
begin
CoInitialize(nil);
XL := CreateOleObject('Excel.Application');
Workbook := XL.WorkBooks.Open(FileName);
Sheet := Workbook.WorkSheets[1];
Rng := Sheet.Range['A'+IntToStr(1+head)+':L'+IntToStr(rows+head)];
//но не
//Rng := Sheet.Range[Sheet.Cells[4, 1], Sheet.Cells[8, 12]];
...
Rng := Unassigned;
Sheet := Unassigned;
Workbook.Close;
Workbook := Unassigned;
XL.Quit;
XL := Unassigned;
CoUnInitialize;
end;



Вопрос можно закрывать
...
Рейтинг: 0 / 0
Завершение процесса Excel из Delphi
    #38432370
Dmitri Krizhanovski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lizard17rus,

И вопрос напоследок. У тебя это консольное приложение?
...
Рейтинг: 0 / 0
Завершение процесса Excel из Delphi
    #38432377
Lizard17rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
может кому пригодиться, чтобы сортировка не мешала

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
var
  XL, Workbook, Sheet, Range, SortKey: OleVariant;

....
Range := Sheet.Range['A'+IntToStr(1+head)+':L'+IntToStr(rows+head)];
    Range.UnMerge;
    Sheet.Sort.SortFields.Clear;
    SortKey := Sheet.Range['C'+IntToStr(1+head)];
    Sheet.Sort.SortFields.Add(Key:=SortKey, SortOn:=0, Order:=1, DataOption:=0);
    SortKey := Sheet.Range['E'+IntToStr(1+head)];
    Sheet.Sort.SortFields.Add(Key:=SortKey, SortOn:=0, Order:=1, DataOption:=0);
    SortKey := Sheet.Range['J'+IntToStr(1+head)];
    Sheet.Sort.SortFields.Add(Key:=SortKey, SortOn:=0, Order:=1, DataOption:=0);
    Sheet.Sort.SetRange(Range);
    Sheet.Sort.Apply;
....
SortKey := Unassigned;
    Range := Unassigned;
    Sheet := Unassigned;
    Workbook.Close;
    Workbook := Unassigned;
    XL.Quit;
    XL := Unassigned;
    CoUnInitialize;
...
Рейтинг: 0 / 0
Завершение процесса Excel из Delphi
    #38432399
Lizard17rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmitri KrizhanovskiLizard17rus,

И вопрос напоследок. У тебя это консольное приложение?
VCL
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Завершение процесса Excel из Delphi
    #39396907
Фотография Exteris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подниму тему. Столкнулся со схожей проблемой.

Есть процедура, которая выводит на печать экселевский файл.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
procedure TFmJournal.PrintExcelFile(FileName: String; Copies: Integer; Preview: Boolean);
var ExcelApp: Olevariant;
begin
//   CoInitialize(nil);
   ExcelApp := CreateOleObject('Excel.Application');
   try
      ExcelApp.Visible:=Preview;
      ExcelApp.Workbooks.Open(FileName);
      ExcelApp.Worksheets.PrintOut(EmptyParam,EmptyParam,Copies,Preview);
   finally
//         ExcelApp.Workbooks.Close;
//         ExcelApp.Workbooks:=Unassigned;
         ExcelApp.Quit;
         ExcelApp:=Unassigned;
//         CoUnInitialize;
   end;
end;



Так вот если печатать файл без предпросмотра(preview=false), то всё ок. Если же показать, окно предпросмотра то после печати и закрытия экселя, процесс остается висеть в памяти.
Уже всё перепробовал. Остается вариант убивать процесс?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Завершение процесса Excel из Delphi
    #39875154
Фотография viman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет через 15 лет )
Да, убивать процесс. Почему бы и нет. Я создавал сотни документов в несколько потоков и обязательно на 100 процессов 1-2 повисали. Бился тоже сначала, а потом стал просто прибивать эксель полностью. Очень действенно :)
...
Рейтинг: 0 / 0
Завершение процесса Excel из Delphi
    #39875230
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vimanпотом стал просто прибивать эксель полностью
Молодец, пользователи это оценят.
...
Рейтинг: 0 / 0
Завершение процесса Excel из Delphi
    #39875290
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaDivimanпотом стал просто прибивать эксель полностью
Молодец, пользователи это оценят.
А что делать, если так коряво спроектировано. Я в таком случае просто проверял запущенность Экселя до начала процесса и требовал, чтобы юзер его закрыл сам.
...
Рейтинг: 0 / 0
Завершение процесса Excel из Delphi
    #39875381
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ExterisТак вот если печатать файл без предпросмотра(preview=false), то всё ок. Если же показать, окно предпросмотра то после печати и закрытия экселя, процесс остается висеть в памяти.
Если сделать Excel.DisplayAlerts := false, Excel.EnableEvents := false, то перестаёт оставаться. Во всяком случае, у меня после этого, как правило, проблем нет. В некоторых случаях стоит повторить это - есть операции (например, Workbooks.Add), после которых эти настройки почему-то сбрасываются.
...
Рейтинг: 0 / 0
Завершение процесса Excel из Delphi
    #39875440
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2А что делать, если так коряво спроектировано. Я в таком случае просто проверял запущенность Экселя до начала процесса и требовал, чтобы юзер его закрыл сам.
Когда после работы программы эксель/ворд продолжают висеть -- обычно это говорит о какой-то ошибке в работе программы или ее логике. Например, не был закрыт корректно экземпляр экселя при возникновении ошибки, или поток закрылся раньше времени (при завершении он меняет какой-то статус, а его кто-то убивает извне, но еще до того, как эксель будет закрыт).
...
Рейтинг: 0 / 0
Завершение процесса Excel из Delphi
    #39875731
Фотография viman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaDi, прога генерила письма в ворде, тысячи вордовских файлов. Пользователь один - я
...
Рейтинг: 0 / 0
25 сообщений из 52, страница 2 из 3
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Завершение процесса Excel из Delphi
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]