Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.029 c
14-84541
race1
2003-06-07 08:32
2003.06.26
XP Style


14-84662
LiLa Ananda
2003-06-07 10:08
2003.06.26
Просто восточная мудрость


4-84852
Керик
2003-04-25 20:47
2003.06.26
Сортировка


1-84404
zloy_dima
2003-06-09 12:06
2003.06.26
Массив


6-84496
Akni
2003-04-22 16:18
2003.06.26
Nonblocking Socket в отдельном потоке





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский