Delphi&Excel
одной процедурой большое количество файлов, когда колличество фалов не совсем большое программа работает нормально,
но прибольшом колличестве все начинает дико тормозить, хотя я каждый используемый файл Excel закрываю
и только после этого открываю новый,
После работы программы в списке задач то бывает остаются приложения Excel то нет,
а когда много фалов обрабатываешь бывает совсем зависает!
вот краткая вырезка из кода
var xla : _Application;
xlw : _Workbook;
xls : _WorkSheet;
Begin
...
try
for i:=1 to n do Begin
...
xla := CoExcelApplication.Create;
xlw := xla.Workbooks.Add(filename+'.xls',LCID);
xlw.Sheets.Item[4].QueryInterface(IID__Worksheet,xls);
xls.Activate(1);
...
finally
xla.quit;
end;
...
end;
end;
я пробовал и следующим образом
var xla1 : Variant;
Begin
...
for i:=1 to n do Begin
try
xla1 := CoExcelApplication.Create;//ИНдекс
xla1.Workbooks.Add;
...
finally
xla1.quit;
end;
end;//for
end;
Цитата:
Originally posted by rise
Народ помогите, я работаю в Delphi с Excel, приходится обрабатывать
одной процедурой большое количество файлов, когда колличество фалов не совсем большое программа работает нормально,
но прибольшом колличестве все начинает дико тормозить, хотя я каждый используемый файл Excel закрываю
и только после этого открываю новый,
После работы программы в списке задач то бывает остаются приложения Excel то нет,
а когда много фалов обрабатываешь бывает совсем зависает!
вот краткая вырезка из кода
var xla : _Application;
xlw : _Workbook;
xls : _WorkSheet;
Begin
...
try
for i:=1 to n do Begin
...
xla := CoExcelApplication.Create;
xlw := xla.Workbooks.Add(filename+'.xls',LCID);
xlw.Sheets.Item[4].QueryInterface(IID__Worksheet,xls);
xls.Activate(1);
...
finally
xla.quit;
end;
...
end;
end;
я пробовал и следующим образом
var xla1 : Variant;
Begin
...
for i:=1 to n do Begin
try
xla1 := CoExcelApplication.Create;//ИНдекс
xla1.Workbooks.Add;
...
finally
xla1.quit;
end;
end;//for
end;
Народ помогите, я работаю в Delphi с Excel, приходится обрабатывать
одной процедурой большое количество файлов, когда колличество фалов не совсем большое программа работает нормально,
но прибольшом колличестве все начинает дико тормозить, хотя я каждый используемый файл Excel закрываю
и только после этого открываю новый,
После работы программы в списке задач то бывает остаются приложения Excel то нет,
а когда много фалов обрабатываешь бывает совсем зависает!
вот краткая вырезка из кода
var xla : _Application;
xlw : _Workbook;
xls : _WorkSheet;
Begin
...
try
for i:=1 to n do Begin
...
xla := CoExcelApplication.Create;
xlw := xla.Workbooks.Add(filename+'.xls',LCID);
xlw.Sheets.Item[4].QueryInterface(IID__Worksheet,xls);
xls.Activate(1);
...
finally
xla.quit;
end;
...
end;
end;
я пробовал и следующим образом
var xla1 : Variant;
Begin
...
for i:=1 to n do Begin
try
xla1 := CoExcelApplication.Create;//ИНдекс
xla1.Workbooks.Add;
...
finally
xla1.quit;
end;
end;//for
end;
Я пользовался OLE компонентом TExcelApplication.
Excel:TExcelApplication;
Excel.Connect;
.....
Excel.Disconnect;// после выполнения этого оператора Excel в диспетчере задач исчезает.
Цитата:
Originally posted by gray_k
Я пользовался OLE компонентом TExcelApplication.
Excel:TExcelApplication;
Excel.Connect;
.....
Excel.Disconnect;// после выполнения этого оператора Excel в диспетчере задач исчезает.
Я пользовался OLE компонентом TExcelApplication.
Excel:TExcelApplication;
Excel.Connect;
.....
Excel.Disconnect;// после выполнения этого оператора Excel в диспетчере задач исчезает.
Я пробовал тоже этот компонент, но я у него так и не нашел как перемещаться по листам книги
Цитата:
Originally posted by rise
Я пробовал тоже этот компонент, но я у него так и не нашел как перемещаться по листам книги
Я пробовал тоже этот компонент, но я у него так и не нашел как перемещаться по листам книги
Что значит как перемещаться? В справке по VBA всё есть. Операторы один в один оттуда.
ExcelSheet,MSExcel : Variant;
begin
// Создать ссылку на зарегистрированный OLE объект
MsExcel := CreateOleObject('Excel.Application');
// Создать документ по шаблону
MSExcel.Workbooks.Open (ExtractFilePath(Application.ExeName) + '\Temp.xls');
ExcelSheet := MSExcel.sheets[1];
ExcelSheet.Activate;
// заполнить
MSExcel.Cells [I,J] := ...
// сделать видимым копию сервера
// MSExcel.Visible := TRUE;
// Записать заполненный файл в файл с указанным именем
ExcelSheet.SaveAs (...);
// Закрыть страничку и Excel вообще
MSExcel.Workbooks.Close;
MSExcel.Quit;
end;
Так вот то же есть проблемы - файл нормально не заполняется если запущен уже экземпляр Excel.
Видимо придётся переползать на использование стандартного для Dephi6 обьект ExcelApplication из закладки Servers.