Надо ускорить процесс записи в Excel... как?
Может есть какие соображения?
Дело вот в чём:
пишу в файл, в каждую ячейку некое значение, в файле использую 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 минуты.
Есть соображения ускорить процесс ????
Спасибо.
Цитата:
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 минуты.
Есть соображения ускорить процесс ????
Спасибо.
Товарищи, у меня вопросец по Ёкселю.
Может есть какие соображения?
Дело вот в чём:
пишу в файл, в каждую ячейку некое значение, в файле использую 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] насколько помню, только вот сурца никак не найду, а так уже не вспомнить.
А потом показываю юзеру готовый файл. Если для вставки использовать заранее подготовленный шаблон то получаеться очень даже ничего, разметка новой строки просто копируеться с педыдущей.
Можно выгрузить данные в текстовый файл с разделителями а затем открыть его программно через excel, получается достаточно быстро.
Цитата:
Originally posted by Sli
Тоже была проблема со скоростью, пришлось отказаться от OLE... Сделал так: полдключился к файлу ехеля через ADO как к простой таблице, а потом все просто и быстро Append .... Post.
А потом показываю юзеру готовый файл. Если для вставки использовать заранее подготовленный шаблон то получаеться очень даже ничего, разметка новой строки просто копируеться с педыдущей.
Тоже была проблема со скоростью, пришлось отказаться от OLE... Сделал так: полдключился к файлу ехеля через ADO как к простой таблице, а потом все просто и быстро Append .... Post.
А потом показываю юзеру готовый файл. Если для вставки использовать заранее подготовленный шаблон то получаеться очень даже ничего, разметка новой строки просто копируеться с педыдущей.
Честно говоря я с этим ещё не сталкивался...
нету ли исходника в качестве примера?
[email]JimmyA@yandex.ru[/email]
Или какие-нибудь ссылки на то где это боле-менее подробно объясняется.
Заранее благодарен.
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();