Страница 1 из 1

Задание рамки у ячейки таблицы через OlePropertyGet в C++ Builder

Добавлено: 05 май 2008, 00:51
AleksP
Таблица в Word задается через OLE при помощи следующего кода:

{
Variant Word, Document, Table, Cell;
int RowCount, ColCount;

Word = CreateOleObject("Word.Application.8");
Word.OlePropertySet("Visible", true);
Word.OlePropertyGet("Documents").OleProcedure("Add");
Document = Word.OlePropertyGet("Documents").OleFunction("Item", 1);
Table = Document.OlePropertyGet("Tables").OleFunction("Add", Document.OleFunction("Range", 0, 0), 5, 5);
RowCount = Table.OlePropertyGet("Rows").OlePropertyGet("Count");
ColCount = Table.OlePropertyGet("Columns").OlePropertyGet("Count");
for (int i=1; i <=RowCount; i++)
for(int j=1; j <=ColCount; j++) {
Cell = Table.OleFunction("Cell", i, j);
Cell.OlePropertyGet("Range").OleProcedure("InsertAfter", WideString(IntToStr(i)) + WideString("-") + WideString(IntToStr(j)));
}
Document.OleProcedure("SaveAs", ChangeFileExt(Application->ExeName, ".doc"));
Word.OleProcedure("Quit");
}

Как сделать так, чтобы ячейки таблицы создавались с рамкой?

Re: Задание рамки у ячейки таблицы через OlePropertyGet в C++ Builder

Добавлено: 06 май 2008, 00:51
AleksP
А как модифицировать данный код, чтобы в некоторых строках таблицы было разное число столбцов(ячеек)?

Re: Задание рамки у ячейки таблицы через OlePropertyGet в C++ Builder

Добавлено: 06 май 2008, 13:26
Romeo
Тема перемещена из раздела "C и C++" с сохранением ссылки.

Господа VBA-шники помогите, плиз, человеку. Вопрос ведь, по сути, не по С++, а по COM-cким интерфейсам MS Office, а они не зависят от среды, из которой используются.

Re: Задание рамки у ячейки таблицы через OlePropertyGet в C++ Builder

Добавлено: 06 май 2008, 14:59
Aent
Код после макрорекордера выделяющий толстой рамкой выбранную ячейку

Код: Выделить всё

With Selection.Cells
        With .Borders(wdBorderLeft)
            .LineStyle = wdLineStyleThinThickSmallGap
            .LineWidth = wdLineWidth300pt
            .Color = wdColorAutomatic
        End With
        With .Borders(wdBorderRight)
            .LineStyle = wdLineStyleThinThickSmallGap
            .LineWidth = wdLineWidth300pt
            .Color = wdColorAutomatic
        End With
        With .Borders(wdBorderTop)
            .LineStyle = wdLineStyleThinThickSmallGap
            .LineWidth = wdLineWidth300pt
            .Color = wdColorAutomatic
        End With
        With .Borders(wdBorderBottom)
            .LineStyle = wdLineStyleThinThickSmallGap
            .LineWidth = wdLineWidth300pt
            .Color = wdColorAutomatic
        End With
        .Borders(wdBorderDiagonalDown).LineStyle = wdLineStyleNone
        .Borders(wdBorderDiagonalUp).LineStyle = wdLineStyleNone
        .Borders.Shadow = False
    End With
    With Options
        .DefaultBorderLineStyle = wdLineStyleThinThickSmallGap
        .DefaultBorderLineWidth = wdLineWidth300pt
        .DefaultBorderColor = wdColorAutomatic
    End With
Если надо что бы выделены были все ячейки возможно проще будет воспользоваться стилем

Re: Задание рамки у ячейки таблицы через OlePropertyGet в C++ Builder

Добавлено: 06 май 2008, 15:04
Aent
Для объединения ячеек выбираете их а затем

Код: Выделить всё

Selection.Cells.Merge

Re: Задание рамки у ячейки таблицы через OlePropertyGet в C++ Builder

Добавлено: 09 май 2008, 00:23
AleksP
Еще несколько вопросов:
1) Как присвоить свойство шрифта Bold каждой ячейке в строке? Сейчас делаю так:
for (int j = 1; j <= ColCount; j++)
{
Cell = Table.OleFunction("Cell", i, j);
Cell.OlePropertyGet("Range").OlePropertyGet("Font").OlePropertySet("Bold", "1");
}
2) Как сделать горизонтальное и вертикальное выравнивание по центру в каждой ячейке строки?
3) Как установить заданный цвет ячеек в строке?

Re: Задание рамки у ячейки таблицы через OlePropertyGet в C++ Builder

Добавлено: 09 май 2008, 01:11
Aent
AleksP, на все ваши вопросы есть универсальный ответ: "смотри код макрорекордера...."
Но тем не менее :

Код: Выделить всё

With ActiveDocument.Tables(k).Rows(i)    'к-я таблица строка i.
      .Cells.VerticalAlignment = wdCellAlignVerticalCenter  'вертикальное выравнивание по центру
      With .Cells.Shading
            .Texture = wdTextureNone   'необязательно
            .ForegroundPatternColor = wdColorAutomatic   'необязательно
            .BackgroundPatternColor = wdColorBlue  'фоновый цвет ячеек синий
       End With
       .Select  'выбираем строку   
       With Selection
           .ParagraphFormat.Alignment = wdAlignParagraphCenter  'горизонтальное выравнивание по центру
           .Font.Bold = True   'включаем Bold для выделения
       End with
End With
Значения констант легко посмотреть в окне Immediate VBE или в Object Brouser для Word

Re: Задание рамки у ячейки таблицы через OlePropertyGet в C++ Builder

Добавлено: 15 май 2008, 11:23
Romeo
AleksP похоже не понял о чём идёт речь. Объясняю на пальцах. В Excel нужно нажать кнопочку, которая запускает запись макроса, затем выполнить необходимые действия вручную (например выделить диапазон ячеек и нажать Ctrl+B), затем остановить запись макроса и внимательно прочесть код на VBA, который сгенерировал макрорекордер. Проблемы с понимаем этого кода, как я вижу, ты уже поборол. Так что на этом всё.