Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Надо ускорить процесс записи в Excel... как?

1.6K
03 июня 2003 года
Jimmy
58 / / 02.04.2003
Товарищи, у меня вопросец по Ёкселю.
Может есть какие соображения?

Дело вот в чём:
пишу в файл, в каждую ячейку некое значение, в файле использую 8 Листов, в каждом в среднем по 15 ячеек в ряд, а записать надо порядка 4 - 10 тысяч записей (рядов, так сказать). Делаю всё в циклах типа
for (List = 1; List < 8; List++)
{
for (NumCell = 1; NumCell < 15; NumCell++)
{
for (Zapisb = 1; Zapisb < 4000; Zapisb ++)
{
...
// здесь пишу в ячейку из буфера, который по сути дела есть виртуальная копия ёксель-файла
TEMPLATE_EXCEL[List][Col][Row]
...
}
}
}

то бишь понимаете? сколько это займёт времени?
ладно если сотня строк, а если 4000?

А машина в принципе не очень слабая. Пенёк 3.Но при 500 записях занимает 2 минуты.

Есть соображения ускорить процесс ????
Спасибо.
358
03 июня 2003 года
moonmike
423 / / 18.10.2002
Цитата:
Originally posted by Jimmy
Товарищи, у меня вопросец по Ёкселю.
Может есть какие соображения?

Дело вот в чём:
пишу в файл, в каждую ячейку некое значение, в файле использую 8 Листов, в каждом в среднем по 15 ячеек в ряд, а записать надо порядка 4 - 10 тысяч записей (рядов, так сказать). Делаю всё в циклах типа
for (List = 1; List < 8; List++)
{
for (NumCell = 1; NumCell < 15; NumCell++)
{
for (Zapisb = 1; Zapisb < 4000; Zapisb ++)
{
...
// здесь пишу в ячейку из буфера, который по сути дела есть виртуальная копия ёксель-файла
TEMPLATE_EXCEL[List][Col][Row]
...
}
}
}

то бишь понимаете? сколько это займёт времени?
ладно если сотня строк, а если 4000?

А машина в принципе не очень слабая. Пенёк 3.Но при 500 записях занимает 2 минуты.

Есть соображения ускорить процесс ????
Спасибо.


Делали это как-то, через массим Variant [Row], [Col] насколько помню, только вот сурца никак не найду, а так уже не вспомнить.

469
04 июня 2003 года
Sli
71 / / 20.01.2000
Тоже была проблема со скоростью, пришлось отказаться от OLE... Сделал так: полдключился к файлу ехеля через ADO как к простой таблице, а потом все просто и быстро Append .... Post.
А потом показываю юзеру готовый файл. Если для вставки использовать заранее подготовленный шаблон то получаеться очень даже ничего, разметка новой строки просто копируеться с педыдущей.
450
04 июня 2003 года
suffer
64 / / 20.03.2000
Можно выгрузить данные в текстовый файл с разделителями а затем открыть его программно через excel, получается достаточно быстро.
1.6K
04 июня 2003 года
Jimmy
58 / / 02.04.2003
Цитата:
Originally posted by Sli
Тоже была проблема со скоростью, пришлось отказаться от OLE... Сделал так: полдключился к файлу ехеля через ADO как к простой таблице, а потом все просто и быстро Append .... Post.
А потом показываю юзеру готовый файл. Если для вставки использовать заранее подготовленный шаблон то получаеться очень даже ничего, разметка новой строки просто копируеться с педыдущей.



Честно говоря я с этим ещё не сталкивался...
нету ли исходника в качестве примера?
[email]JimmyA@yandex.ru[/email]

Или какие-нибудь ссылки на то где это боле-менее подробно объясняется.

Заранее благодарен.

469
05 июня 2003 года
Sli
71 / / 20.01.2000
CopyFile((ExtractFilePath(Application->ExeName)+"rest.xls").c_str(),"c:\\rest.xls",false);
ADOConnection1->Connected=true;
ADOTable1->Active=true;
ADOTable1->FindLast();
int rowcount= cxGrid1DBTableView1->DataController->RowCount;
int colcount= cxGrid1DBTableView1->ColumnCount;

ProgressBar1->Max=rowcount;
for(int i=0; i < rowcount; i++)
{

ADOTable1->Append();
for(int j=0; j< colcount;j++)
{
String str;
Variant value = cxGrid1DBTableView1->ViewData->Rows->Values[j];
if(value.IsNull()) str = " "; else str=value;
ADOTable1->Fields->FieldByNumber(j+1)->AsString=str;

}
ADOTable1->Post();
ProgressBar1->Position=i;

}
ADOTable1->Active=false;
ADOConnection1->Connected=false;
ExcelInit("c:\\rest.xls");
if(!App.IsEmpty())App.OlePropertySet("Visible",true);


Sh.Clear();
App.Clear();
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог