Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Сохранение данных в Excel без загрузки Excel


Автор: NightElf 14.3.2007, 05:31
Приветствую!
Столкнулся с такой проблемой. При выгрузке данных в EXCEL (записей около 50000) с предварительной его загрузкой (EXCELa), процесс становится безумно долгим... smile 
Можно както миновать загрузку EXCEL и выполнять выгрузку напрямую в EXCEL файл?

p.s.  возможно это ускорит процесс выгрузки данных.

Заранее огромное спасибо!

Автор: SABROG 14.3.2007, 10:10
С этим все сталкиваются, есть даже некоторые варианты как ускорить, правда не намного больше.
Я проще сделал, Office2000 поддерживает сохранение данных в XML файле, правда без картинок, графиков и других
встраиваемых объектах, но оформление таблиц, стили, ссылки, формулы, он сохраняет. Я просто формирую этот XML
файл, после чего делаю вызов Excel'a через COM и открываю через метод Workbook.Open этот XML, далее
пересохраняю его в XLS файл и запускаю макросы, которые уже вставляют картинки и т.п.

Автор: stmamont 14.3.2007, 10:57
NightElf, ты не так пытаешься решить проблему!
Поищи на форуме уже обсуждалось решение с помощью VarArray.
Идея в том что сгружаешь массив сначала в VarArray а потом передаешь его excel и получается оченб быстро

Добавлено @ 10:58 
Почитай тут:
http://articles.org.ru/cfaq/index.php?qid=1787

Автор: NightElf 16.3.2007, 07:09
stmamont, 

>ты не так пытаешься решить проблему!
>Поищи на форуме уже обсуждалось решение с помощью VarArray.
>Идея в том что сгружаешь массив сначала в VarArray а потом передаешь его excel и получается >оченб быстро

А можно примерчик по этому делу...? 

Автор: stmamont 16.3.2007, 17:08
Код

    vVarArray = VarArrayCreate(Bounds , 3 , varVariant);
    
    for(int i = 0 ; i < Grid->RowCount ; ++ i)
    {
        for(int j = 0 ; j < Grid->ColCount ; ++ j)
        {
            AnsiString string = Grid->Cells[j][i];
            vVarArray.PutElement(string.IsEmpty() ? "" : string.c_str() , i + 1 , j + 1);
        }
    }                     
    Variant vRange = getRange(Left , Top , Left + Grid->ColCount - 1 , Top + Grid->RowCount - 1);
    vRange.OlePropertySet("value" , vVarArray);


Автор: NightElf 20.3.2007, 06:53
stmamont, 
Спасибо!  smile 
Процесс пошёл!

Тема закрыта...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)