Форум: "Основная";
Текущий архив: 2003.06.26;
Скачать: [xml.tar.bz2];
ВнизExcel Найти похожие ветки
← →
Rel_ (2003-06-09 14:12) [0]Подскажите , кто знает сл-ий вопросик.
Запускаю Excel след. образом:
Excel := CreateOleObject("Excel.Application");
Excel.Visible := true;
book := Excel.WorkBooks.Add;
sheet:=Excel.ActiveWorkBook.Worksheets[1]
пишу в него данные из массива структур (или из таблицы): sheet.Cells[i,j]= "!!!";
Под NT - всё работает отлично, а под 98 - просто ужасно - Excel виснет где-то на 20000 записи или просто не запускается (т.е. не создаёт дкоумент).
← →
andrey_pst (2003-06-09 14:24) [1]:) Я с этой проблемой возился полгода назад, где тока не спрашивал - не решилась, плюнул, сделал шаблон и открываю его, вроде работает:
// открыли шаблон книги
IExcelWB := IExcelApp.Workbooks.Open(ExcelBook, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, false, xlLCID);
IExcelWB.Activate(xlLCID); // активировали книгу
IExcelWS := IExcelWB.Worksheets.Item["Лист1"] as Excel2000._Worksheet; // получили ссылку на лист
IExcelWS.Activate(xlLCID); // активировали лист
если у тебя получится, черкни, пожалуйста, как сделал andrey_pst@rambler.ru
← →
Rel_ (2003-06-09 14:37) [2]Я не совсем понял - ты счем возился: вообще с записью в Excel или у тебя была такая же проблема, как у меня.
Я всё энто делаю не через компоненты Servers.
← →
AbrosimovA (2003-06-09 14:50) [3]Подозреваю, что ты пишешь поячеечно в цикле - этого лучше не делать. С одной стороны это довольно долго, с другой - возникают различные проблемы с закрытием Excel или как у тебя.
Рекомендую прочитать статью по ссылке http://www.delphikingdom.com/helloworld/excelsm.htm
← →
Rel_ (2003-06-09 14:54) [4]>> to AbrosimovA
Вообще, как в воду глядишь - ну просто истину глаголешь - ужасно долго и коряво - и с закрытием иногда проблемы.
Я конечно, посмотрю, но может вкратце просветишь меня!!! - просто ну очень быстро надо прогу исправить.
← →
andrey_pst (2003-06-09 14:54) [5]проблема состояла втом, что при добавлении книги или листов в книгу и одновременной записи в эти листы большого объема информации происходила утечка памяти под Win98 (под NT все работало прекрасно).
пробовал использовать Excel через:
1. ОЛЕ
2. Диспинтерфейсы
3. Интерфейсы
результат один и тот-же - утечка памяти под Win98
Остановился на интерфейсах
Просто создал шаблон книги и открываю его (Open), а не делаю Add
От добавления листов тоже отказался, создаю кучу книг и сворачиваю в архив (что очень некрасиво и неудобно для клиентов, к которым эти файлы приезжают по e-mail)
← →
Rel_ (2003-06-09 15:26) [6]Видишь, у меня такая же беда. Только всё виснет даже, когда я не создаю новой страницы - после записи прибл. 25000 записей.
А нов. страницу создаю :
sheet:=Excel.ActiveWorkBook.WorkSheets.Add;
← →
KSergey (2003-06-09 15:34) [7]А может не стоит в Excel по несколько десятков тысяч записей пихать, а? Зачем вообще такая задача? Может ее иначе все же решить стОит?
← →
AbrosimovA (2003-06-09 15:45) [8]
uses Variants;
var I,J: integer;
Range,Cell1,Cell2,ArrayData: Variant;
begin
// Создаем вариантный массив
ArrayData := VarArrayCreate([1, SizeVertical, 1,
SizeHorizontal], varVariant);
for I:=1 to SizeVertical do
for J:=1 to SizeHorizontal do
ArrayData[I,J] := ..........;//Заполнение массива
// Левая верхняя ячейка области, в которую будем выводить данные
Cell1 := WorkBook.WorkSheets[1].Cells[1,1];
// Правая нижняя ячейка области, в которую будем выводить данные
Cell2 := WorkBook.WorkSheets[1].Cells[SizeTr+1,LCount+1];
// Область, в которую будем выводить данные
Range := WorkBook.WorkSheets[1].Range[Cell1,Cell2];
// А вот и сам вывод данных
// Намного быстрее поячеечного присвоения
Range.Value := ArrayData;
end;
← →
andrey_pst (2003-06-09 17:36) [9]>> KSergey © (09.06.03 15:34)
>> А может не стоит в Excel по несколько десятков тысяч записей пихать, а?
>> Зачем вообще такая задача? Может ее иначе все же решить стОит?
У меня детализация по сотовым телефонам раз в месяц формируется и отправляется клиенту по e-mail. Так, что скока наговорил - стока и записей :) А говорят по служебным телефонам в богатых организациях много :)
Почему Excel ? Программисту клиента гораздо проще макросы написать для формирования отчетов по разговорам сотрудников организации, чем обрабатывать, допустим txt файл.
Да и причина-то собственно...
У меня так было: формируется файл (1 договор) в нем постепенно добавляется до 100 листов (100 телефонов) заполняются они все и т.д. Все ссылки на все интерфейсы убиваю. Файл ~3-4 Mb получается. Все вроде пучком идет. Создаю новую книгу, добавляю лист и т.д. После 3-5 таких файлов вылазит табличка с предложением закрыть другие программы, т.к. Excel"ю не хватает системных ресурсов...
Я и ссылку на сам Excel.Application после каждого такого файла пробовал убивать и как тока не изголялся - тщетно.
Перестал добавлять книги и листы (стал открывать готовый шаблон) - проблемы не стало. Тока ща кол-во листов в книге = 1 "и это мне спать спокойно не дает" 8-)).
← →
AbrosimovA (2003-06-10 08:21) [10]Я в Excel пихал и более 45000 записей в один лист. Есть задачи многоуважаемый andrey_pst ©, в которых требуется и такое количество записей. Были проблемы с закрытием Excel, пока не стал пользоваться, приведенным мною выше, способом.
← →
Rel_ (2003-06-10 09:03) [11]Возникло ещё 2 вопросика:
1) Как преобразовать динамический array of variant в variant ( т.е. то, что созд-ся ф-ей VarArrayCreate)
2) Как в Excel определить фиксированную строку.
← →
Rel_ (2003-06-10 09:03) [12]Возникло ещё 2 вопросика:
1) Как преобразовать динамический array of variant в variant ( т.е. то, что созд-ся ф-ей VarArrayCreate)
2) Как в Excel определить сквозную строку.
← →
andrey_pst (2003-06-10 09:11) [13]>> AbrosimovA (10.06.03 08:21)
А ты листы добавлять пробовал ? И в каждый из них более 45000 записей в каждый.
Если да - приведи код, пожалуйста, или сюда andrey_pst@rambler.ru
← →
Rel_ (2003-06-10 09:24) [14]Пробовал - где-то по 40000 зап. НА NT - всё нормально, на 98 - виснет
← →
KSergey (2003-06-10 09:25) [15]А я вот вам открою секрет, что текстовый файл с разделителями можно не напрягаясь затянуть в Excel.
А еще есть формат dbf, например, который Excel точно так же отлично засасывает (если уж не Excel свет клином сошелся). Впрочем, тот же dbf с многими тыщами записей много проще обработать в какой-нибудь другой среде для этого предназначенной, нежели файл Excel"я...
Впрочем, все это лишь мое мнение.
← →
Rel_ (2003-06-10 09:53) [16]Файл с разделителями ПРОГРАММНО можно затянуть в Excel - КАК!!!
И снова к моему вопросу --- как сделать сквозную строку !!!
← →
KSergey (2003-06-10 10:09) [17]> Rel_ (10.06.03 09:53)
Извиняюсь, но опять же вопрос - а зафиг? Если уж вы сделали текстовый файл - то пусть это будут проблемы клиента как он его будет в Excel портировать, если для него кроме макросов Excel"а ничего в мире не существует...
← →
Um (2003-06-10 10:50) [18]
> Rel_
> как сделать сквозную строку !!!
Excel.ActiveWorkBook.WorkSheets[1].PageSetup.PrintTitleRows:="$1:$1"
> Rel_ (10.06.03 09:53)
> Файл с разделителями ПРОГРАММНО можно затянуть в Excel -
> КАК!!!
Записать макрос - файл, открыть ...,остановить запись
Alt+F11 - смотришь, анализируешь, преобразуешь к Delphi
← →
Rel_ (2003-06-10 11:48) [19]Ага - понятно!!! Спасибо
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.06.26;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.027 c