Задание рамки у ячейки таблицы через OlePropertyGet в C++ Builder
Модератор: Naeel Maqsudov
Таблица в 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");
}
Как сделать так, чтобы ячейки таблицы создавались с рамкой?
{
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");
}
Как сделать так, чтобы ячейки таблицы создавались с рамкой?
А как модифицировать данный код, чтобы в некоторых строках таблицы было разное число столбцов(ячеек)?
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Тема перемещена из раздела "C и C++" с сохранением ссылки.
Господа VBA-шники помогите, плиз, человеку. Вопрос ведь, по сути, не по С++, а по COM-cким интерфейсам MS Office, а они не зависят от среды, из которой используются.
Господа VBA-шники помогите, плиз, человеку. Вопрос ведь, по сути, не по С++, а по COM-cким интерфейсам MS Office, а они не зависят от среды, из которой используются.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
- Aent
- Сообщения: 1129
- Зарегистрирован: 01 окт 2006, 14:52
- Откуда: Saratov,Russia
- Контактная информация:
Код после макрорекордера выделяющий толстой рамкой выбранную ячейку
Если надо что бы выделены были все ячейки возможно проще будет воспользоваться стилем
Код: Выделить всё
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
- Aent
- Сообщения: 1129
- Зарегистрирован: 01 окт 2006, 14:52
- Откуда: Saratov,Russia
- Контактная информация:
Для объединения ячеек выбираете их а затем
Код: Выделить всё
Selection.Cells.Merge
Еще несколько вопросов:
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) Как установить заданный цвет ячеек в строке?
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) Как установить заданный цвет ячеек в строке?
- Aent
- Сообщения: 1129
- Зарегистрирован: 01 окт 2006, 14:52
- Откуда: Saratov,Russia
- Контактная информация:
AleksP, на все ваши вопросы есть универсальный ответ: "смотри код макрорекордера...."
Но тем не менее :
Значения констант легко посмотреть в окне Immediate VBE или в Object Brouser для Word
Но тем не менее :
Код: Выделить всё
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
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
AleksP похоже не понял о чём идёт речь. Объясняю на пальцах. В Excel нужно нажать кнопочку, которая запускает запись макроса, затем выполнить необходимые действия вручную (например выделить диапазон ячеек и нажать Ctrl+B), затем остановить запись макроса и внимательно прочесть код на VBA, который сгенерировал макрорекордер. Проблемы с понимаем этого кода, как я вижу, ты уже поборол. Так что на этом всё.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.