Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Word, OLE, builder - как выровнять текст по центру


Автор: =Женек= 11.4.2012, 19:35
Нагуглил кучу примеров, ни одни именно с выравниванием не работает.

Код

Variant VWord;
Variant VDoc;
Variant VTable;

VWord=CreateOleObject("Word.Application");
VWord.OlePropertySet("Visible",true);
VWord.OlePropertyGet("Documents").OleProcedure("Add");

VDoc=VWord.OlePropertyGet("Documents").OleFunction("Item",1);
VDoc.OlePropertyGet("Paragraphs").OleProcedure("Add");
VDoc.OlePropertyGet("Tables").OleProcedure("Add",
VDoc.OlePropertyGet("Paragraphs").OleFunction("Item",1).OlePropertyGet("Range"), 20, //кол-во строк
4, //кол-во столбцов
1, //если ноль - то у таблицы невидимые границы
0); //если единица - то таблица не растягивается на всю страницу по ширине

VTable=VDoc.OlePropertyGet("Tables").OleFunction("Item",1);

VTable.OleFunction("Cell",1,1).OlePropertyGet("Range"). OlePropertySet("Text","№"); //заполняем...
VTable.OleFunction("Cell",1,2).OlePropertyGet("Range"). OlePropertySet("Text","Точка"); //заполняем...
VTable.OleFunction("Cell",1,3).OlePropertyGet("Range"). OlePropertySet("Text","Охранник"); //заполняем...
VTable.OleFunction("Cell",1,4).OlePropertyGet("Range"). OlePropertySet("Text","Исполнение"); //заполняем...

VTable.OlePropertyGet("Columns").OleFunction("Item",1).OlePropertySet("Width",50); //Устанавливаем ширину первого столбца
VTable.OlePropertyGet("Columns").OleFunction("Item",2).OlePropertySet("Width",150); //Устанавливаем ширину первого столбца
VTable.OlePropertyGet("Columns").OleFunction("Item",3).OlePropertySet("Width",100); //Устанавливаем ширину первого столбца
VTable.OlePropertyGet("Columns").OleFunction("Item",4).OlePropertySet("Width",150); //Устанавливаем ширину первого столбца

VTable.OleFunction("Cell", 2, 1).OleProcedure("Merge", VTable.OleFunction("Cell", 2, 4));
VTable.OleFunction("Cell",2,1).OlePropertyGet("Range"). OlePropertySet("Text","Обход №1, начало в 09:00"); //заполняем...
VTable.OlePropertyGet("Cells", 1,1).OlePropertySet("HorizontalAlignment", 4);  // НУ КАК? А???

VTable.OleFunction("Cell", 2,1).OlePropertyGet("Range").OlePropertyGet("Font").OlePropertySet("Bold",1);
VTable.OleFunction("Cell", 2,1).OlePropertyGet("Range").OlePropertyGet("Font").OlePropertySet("Size",16);


Автор: Usper 12.4.2012, 08:21
Вместо 
Код

...
VTable.OlePropertyGet("Cells", 1,1).OlePropertySet("HorizontalAlignment", 4);  // НУ КАК? А???
...


должно быть что-то вроде:
Код

...
VTable.OleFunction("Cell", 2,1).OlePropertyGet("Range").OlePropertyGet("ParagraphFormat").OlePropertySet("Alignment", 1);
...

Автор: iDeus 12.4.2012, 13:33
=Женек=, случайно наткнулся на ваш пример, он очень мне помог. Давно искал простой способ экспортирования StringGrig в Word. 
Но столкнулся с небольшой проблемой, подскажите пожалуйста, почему при экспортировании отрубаются строки?

Делаю таким образом, но в результате "Инженерная школа" становится "Инженерн", а "Показатель 1" - "Показа"

Код

for(int i = 1; i < sg_report->ColCount; i++)
        {
            VTable.OleFunction("Cell",1,i+1).OlePropertyGet("Range").OlePropertySet("Text", sg_report->Cells[i][0].c_str()); //заполняем...
        }


Что сделать, что бы строки не обрубались?

Автор: xvr 12.4.2012, 14:31
Цитата(iDeus @  12.4.2012,  13:33 Найти цитируемый пост)
Что сделать, что бы строки не обрубались?

Увеличте ширину столбцов в вашей таблице. Текст банально не помещается в ячейки

Автор: iDeus 12.4.2012, 14:37
Цитата(xvr @ 12.4.2012,  14:31)
Цитата(iDeus @  12.4.2012,  13:33 Найти цитируемый пост)
Что сделать, что бы строки не обрубались?

Увеличте ширину столбцов в вашей таблице. Текст банально не помещается в ячейки

Не думаю, что проблема в этом, либо не так вас понял, результат выглядит так:

http://s1.ipicture.ru/

Автор: =Женек= 12.4.2012, 16:22
Спасибо, подскажите где толков про это почиать? Пользуюсь поиском - в оновном выдает примеры дл Excel, котороые не работают.

Вот в частности, ищу как изменить цвет ячейки. все крутится вокруг свойств Interior и ColorIndex. А приведенные в качестве примера строки не работают.
ВОт например
Код

   VTable.OleFunction("Cell",3+i*(REPORT.checkpoints_count+1)+j,4).OlePropertyGet("Range"). OlePropertyGet("Interior").OlePropertySet("ColorIndex", 4);


Как мне цвет фона поменять?

Автор: kemiisto 12.4.2012, 16:30
Рекомендую научиться пользоваться http://forum.vingrad.ru/act-ST/f-89/t-173725.html записи макроса и перевода его в код Delphi.

Автор: =Женек= 12.4.2012, 16:55
Можно мне выразить желание не пользоваться макросом? 
Хочется именно OLE. 

Автор: kemiisto 12.4.2012, 18:59
Цитата(=Женек= @  12.4.2012,  15:55 Найти цитируемый пост)
Можно мне выразить желание не пользоваться макросом?

Можно мне выразить желание читать внимательно информацию по ссылке?

Автор: =Женек= 12.4.2012, 20:07
Если ответите на мой вопрос, обещаю изучить и принять на вооружение, то что предложили вы.

А вообще я офигеваю: занялся я поиском на тему создания документов в Word программно. НАбрел на форум где был примерно такой диалог:


- здравствуйте! МНе бы с макросами поработать, дабы написать его в ворде и потом программно забивать.
- на хрен макросы, используй OLE и все пиши в нем.
- спасибо за совет, но не охота мне с нуля разбираться, к тому же макрос уже написан. Подскажите мне как мне состыковать готовый макрос и программу
- еще раз говорю, не занимайся геморроем, выкинь свой макрос, напиши весь сценарий в программе и разберись с OLE.
- да, но мой макрос сложный, на него затрачено много сил и времени, а дабы состыковать я хочу использовать TWordApplication, я уже его использую и мне всего-то пару строк написать надо, подскажите как? У меня сроки, завтра программу сдавать, мне некогда заниматься преквалификацией...
- я тебе сказал переходи на OLE.... 


На том же форуме я и нашел пример на OLE, разобрался, мне тоже осталось пару  моментов доделать - как сохранять замещая файл и как изменить цвет ячейки.
И что я вижу - на этом форуме все с точностью до наоборот -  забей на OLE, юзай макросы....

Автор: volvo877 13.4.2012, 01:31
Цитата(=Женек= @  12.4.2012,  19:07 Найти цитируемый пост)
И что я вижу - на этом форуме все с точностью до наоборот -  забей на OLE, юзай макросы....
Не было этого. Было предложение посмотреть, как это делается в макросе, и записать синтаксисом, применяемым в OLE, никто не советовал записывать макросы и их запускать из твоей программы

Макрос:
Код

    With Selection.Cells.Shading
        .Texture = wdTextureNone
        .ForegroundPatternColor = wdColorAutomatic
        .BackgroundPatternColor = wdColorBlue
    End With
Builder:
Код
// WdColor у меня описано в Word_XP.h
VTable.OleFunction("Cell", 1, 1).OlePropertyGet("Shading").OlePropertySet("BackgroundPatternColor", WdColor::wdColorBlue);
неужели настолько отличается одно от другого?

Автор: =Женек= 13.4.2012, 06:14
Цитата

Было предложение посмотреть, как это делается в макросе, и записать синтаксисом, применяемым в OLE, никто не советовал записывать макросы и их запускать из твоей программы



Согласен. И сам сообразил час назад. Забираю свои слова назад.

Автор: Riviero 16.4.2012, 15:33
А не проще компонентами для этого пользоваться?

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