C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Создание Таблиц в Word через Builder, Создание Таблиц в Word через Builder
sanat
Отправлено: 15.01.2007, 06:36


Ученик-кочегар

Группа: Участник
Сообщений: 7



Стоит задача создавать не одну таблицу в документе ворда
а несколько причем таблицы все разные.
При создании нескольких таблиц остается только последняя ???
работаю через WordApplication и WordDocument
У кого нибудь была такая проблема ????
grebenyk
Отправлено: 15.01.2007, 07:00


Дежурный стрелочник

Группа: Участник
Сообщений: 73



скорее тебе этот вопрос надо задавать там — Технологии COM/DCOM, ActiveX
Valdemar
Отправлено: 15.01.2007, 10:05


Мастер участка

Группа: Участник
Сообщений: 433



sanat, а как делаешь? Приведи кусок кода.
sanat
Отправлено: 15.01.2007, 11:31


Ученик-кочегар

Группа: Участник
Сообщений: 7



Делаю я как описано у Архангельского ну и по нету коечего наскреб
вот что пока делаю :

//------------------------------------------------------------------------------------------

WordApp->Disconnect();
OleVariant ItemIndex =1 ;

WordApp->Documents->Add(EmptyParam, EmptyParam, EmptyParam, EmptyParam);
WordDoc->ConnectTo(WordApp->Documents->Item(ItemIndex));

// ---- добавляю таблицу ------
WordDoc->Tables->Add(WordDoc->Range(EmptyParam, EmptyParam),3,2);

//---- добавляю просто текст после таблицы ---------
//WordDoc->Range(EmptyParam, EmptyParam)->InsertAfter(StringToOleStr("просто текст \n"));

//-------- тут мне надо например добавить другую таблицу -----
//--------- например 5 на 6 ------


WordApp->set_Visible(true);
//---------------------------------------------------------------------------------

Проблема состоит в ом что нигде не могу найти инфу где описывается как можно в одном документе создавать множество различных таблиц
(например в цикле)

Valdemar
Отправлено: 15.01.2007, 15:27


Мастер участка

Группа: Участник
Сообщений: 433



Когда записываешь данные в документ надо указывать Range с реальными значениями диапазона, куда эти данные будут записаны. А если писать EmptyParam, то следующая запись будет стирать предыдущую.
Вот небольшой пример:
CODE
OleVariant end;
WordApp->Disconnect();
OleVariant ItemIndex =1;
WordApp->Documents->Add(EmptyParam, EmptyParam, EmptyParam, EmptyParam);
WordDoc->ConnectTo(WordApp->Documents->Item(ItemIndex));
WordDoc->Tables->Add(WordDoc->Range(EmptyParam, EmptyParam),3,2);
end=WordDoc->Tables->Item(1)->Range->End;
WordDoc->Range(end, end)->InsertParagraphAfter();
end+=1;
WordDoc->Tables->Add(WordDoc->Range(end,end),5,2);
WordApp->set_Visible(true);


Отредактировано Valdemar — 15.01.2007, 17:33
sanat
Отправлено: 16.01.2007, 07:57


Ученик-кочегар

Группа: Участник
Сообщений: 7



Большое спасибо
получил то что нужно )))
вот так в цикле делаю

OleVariant end;
WordApp->Disconnect();
OleVariant ItemIndex =1;
WordApp->Documents->Add(EmptyParam, EmptyParam, EmptyParam, EmptyParam);
WordDoc->ConnectTo(WordApp->Documents->Item(ItemIndex));
WordDoc->Tables->Add(WordDoc->Range(EmptyParam, EmptyParam),5,2);

for(int i=1 ; i < 5 ; i++)
{
end=WordDoc->Tables->Item(i)->Range->End;
WordDoc->Range(end, end)->InsertParagraphAfter();
end+=1;
WordDoc->Tables->Add(WordDoc->Range(end,end),5,2);
}

WordApp->set_Visible(true);
sanat
Отправлено: 17.01.2007, 05:34


Ученик-кочегар

Группа: Участник
Сообщений: 7



Возникла еще одна проблема
мне нужно теперь строить множество таблиц разной конфигурации
например в цикле
таб 1. 2 на 3
таб 2. 2 на 2
таб 3. 2 на 3
таб 4. 2 на 2
таб 5. 2 на 3
таб 6. 2 на 2
и т.д.

почемуто у меня таблицы располагаются след. образом

таб 1. 2 на 2
таб 2. 2 на 2
таб 3. 2 на 2
таб 4. 2 на 3
таб 5. 2 на 3
таб 6. 2 на 3

т.е. не вперемешку а сортируются
вот мой код :

void TW_Sotrud::PrintKartochki(int number)
{
OleVariant end;
WordApp->Disconnect();
OleVariant ItemIndex =1;

WordApp->Documents->Add(EmptyParam, EmptyParam, EmptyParam, EmptyParam);
WordDoc->ConnectTo(WordApp->Documents->Item(ItemIndex));
WordDoc->Tables->Add(WordDoc->Range(EmptyParam, EmptyParam),1,1);

//Задаем формат таблицам
OleVariant tformat=wdTableFormatGrid1;

for(int i=1 ; i <= number ; i++)
{
end=WordDoc->Tables->Item(i)->Range->End;
WordDoc->Range(end, end)->InsertParagraphAfter();
end+=1;
WordDoc->Tables->Add(WordDoc->Range(end,end),2,2);

end=WordDoc->Tables->Item(i)->Range->End;
WordDoc->Range(end, end)->InsertParagraphAfter();
end+=1;
WordDoc->Tables->Add(WordDoc->Range(end,end),2,3);

//WordDoc->Tables->Item(i+1)->AutoFormat(tformat,EmptyParam, EmptyParam, EmptyParam,EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);

}
WordApp->set_Visible(true);

}

sanat
Отправлено: 17.01.2007, 08:48


Ученик-кочегар

Группа: Участник
Сообщений: 7



up
sanat
Отправлено: 17.01.2007, 12:12


Ученик-кочегар

Группа: Участник
Сообщений: 7



up

Вернуться в Вопросы программирования в C++Builder