Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.74/19: Рейтинг темы: голосов - 19, средняя оценка - 4.74
1 / 1 / 0
Регистрация: 08.02.2011
Сообщений: 16
1

вставка большого количества записей в таблицу Word

15.02.2011, 05:41. Показов 3441. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Используя OLE Word Automation, можно ли вставить в таблицу большое количество записей (~20000)?
А то ежели построчно вставлять в таблицу данные, то о-о-очень долго выходит:
C++
1
2
3
4
5
6
7
8
9
10
11
12
int CWordTable::SetText(int row,int column, AnsiString text)
{
  try
  {
    table.OleFunction("Cell",row,column).OlePropertyGet("Range").OlePropertySet("Text",text.c_str());
  }
  catch(...)
  {
    return 0;
  }
  return 1;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.02.2011, 05:41
Ответы с готовыми решениями:

SQL Server CE - вставка большого количества записей - зависает программа
Здравствуйте, уважаемые! Столкнулся с неожиданной проблемой. По требованию заказчика база на...

Вставка большого количества данных
Добрый день. Не подскажете, кто какими способами заносит данные в базу MS SQL Server? У меня...

Вставка большого количества строк
Никак не могу придумать, как наиболее элегантно сделать то, что мне нужно. Есть двумерный массив...

Поиск большого количества записей
Товарищи Гуру, прошу помощи...Такой момент есть поиск и выгрузка в excel код привожу procedure...

5
Модератор
Эксперт MS Access
12084 / 4944 / 791
Регистрация: 07.08.2010
Сообщений: 14,521
Записей в блоге: 4
15.02.2011, 08:05 2
400 листов --не для ворда

но ускорить можно
-сформировать ворд-док в формате НТМ
-открыть
0
1 / 1 / 0
Регистрация: 08.02.2011
Сообщений: 16
15.02.2011, 09:40  [ТС] 3
По аналогии со вставкой массива данных в OLE Excel решил заполнить таблицу Word
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int row=t->RowsCount();
    int column=1;
    long count=0;
    AnsiString value;
    //
    Variant cell1,cell2,array;
    int bounds[2]={0,5000};
    array=VarArrayCreate(bounds,1,varVariant);
    for(int i=0;i<=5000;++i)
    {
      value=IntToStr(i);
      array.PutElement(value.c_str(),i);
    }
    t->InsertRowsBelow(row,5000);
    t->GetCell(cell1,row,column+1);
    t->GetCell(cell2,t->RowsCount(),column+1);
    int res=t->InsertArrayData(array,cell1,cell2);
    if(!res)ShowMessage("Íå ïîëó÷èëîñü");
    array.Clear();
но возникли проблемы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int CWordTable::InsertArrayData(Variant &array,Variant &cell1,Variant &cell2)
{
  try
  {
    /*
    Variant range=document.OlePropertyGet("Range",
                                       cell1.OlePropertyGet("Range").OlePropertyGet("Start"),
                                       cell2.OlePropertyGet("Range").OlePropertyGet("End"));
    */
    Variant range=document.OlePropertyGet("Range",cell1,cell2);  <==здесь выдает ошибку
 
    range.OlePropertySet("Value", array);
    return 1;
  }
  catch(Exception &ex)
  {
    MessageBox(0,ex.Message.c_str(),0,MB_OK);
  }
  return 0;
}
Почему не получается выбрать область для присвоения массива?
0
68 / 68 / 9
Регистрация: 10.02.2011
Сообщений: 131
15.02.2011, 11:43 4
А ты попробуй вставить массивом в Есксель, потом скинуть в буфер обмена и вставить в Ворд... думаю будет быстрее, хотя это так, на крайняк, если никто не предложит способа получше.

Добавлено через 23 минуты
Да... видимо Ворд для такого не предназначен...
Только что проверил, простая вставка таблицы с числовыми значениями размером 2х20000 из Екселя в Ворд у меня заняла 47 секунд.

Добавлено через 10 минут
Это если через
C++
1
2
3
4
5
6
Excel.OlePropertyGet("Range","A1:B20000").OleProcedure("Select");
Excel.OlePropertyGet("Selection").OleProcedure("Copy");
Variant World = CreateOleObject("Word.Application");
World.OlePropertyGet("Documents").OleFunction("Add");
World.OlePropertyGet("Selection").OleProcedure("Paste");
World.OlePropertySet("Visible", true);
А если вручную Ctrl+C, Ctrl+V, то ворд вообще подвис на 5 мин, дольше мне ждать надоело и я завершил процесс.
1
1 / 1 / 0
Регистрация: 08.02.2011
Сообщений: 16
15.02.2011, 11:57  [ТС] 5
Надо попробовать, хоть так. Вариант со вставкой массива не прошел
0
68 / 68 / 9
Регистрация: 10.02.2011
Сообщений: 131
15.02.2011, 12:01 6
Вот кстати кое-что нарыл:
Статейки по работе с ОЛЕ сервером Ексель и Ворд, может пригодится
0
15.02.2011, 12:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.02.2011, 12:01
Помогаю со студенческими работами здесь

UPDATE большого количества записей
Добрый день, есть таблица T в которой шесть миллионов записей. В таблице есть внешний ключ на...

Вставка данных из большого количества внешних файлов csv
Приветствую Есть большая проблема и требуется помощь профи. Без предыстории не обойтись. Есть...

Вставка большого количества значений в where для одного столбца
Есть простой запрос, использую в VS 2010 работая с базой Oracle 10i. SELECT PAYERID, UNP...

Ускорение отображения большого количества записей.
Есть Grid подключенный к набору записей (ADODB.Recordset) содержащему большое кол-во записей (около...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru