Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Создание ShapeRange с таблицей


Автор: AKorn 16.9.2006, 12:28
Здраствуйте!
Народ помогите не могу понять как создать из шарпа в Word(2002 office XP) документе ShapeRange с таблицей внутри. Сам документ я создал, ShapeRange в него добавил, а дальше непонятно как выбрать его и вставить в него таблицу, а в таблицу значения?
 Вот то чего уже добился:
Код

            object oMissing = System.Reflection.Missing.Value;
            object oEndOfDoc = "\\endofdoc"; /* \endofdoc is a predefined bookmark */ 

            //Start Word and create a new document.
            Word._Application oWord;
            Word._Document oDoc;
            oWord = new Word.Application();
            oWord.Visible = true;
            oDoc = oWord.Documents.Add(ref oMissing, ref oMissing,
                ref oMissing, ref oMissing);

            Word.Shape oShape;
            oShape = oDoc.Shapes.AddTextbox(Microsoft.Office.Core.MsoTextOrientation.msoTextOrientationHorizontal, 10, 10,200,200,ref oMissing);



 Ну, а дальше туман =) Помогите плиз.


Автор: Wanderer2019 16.9.2006, 20:42
а что такое ShapeRange? 
вообще таблицы добавляются через 
Document.Tables.Add(...)

Автор: ivashkanet 16.9.2006, 22:18
Значится так:
Я не в курсах что есть "документ ShapeRange", но идея такая:
Включаешь в Ворде запись макроса. Записываеш вставку таблицы. Получаешь код ВизуалБарсика
Код

Sub Макрос2()
'
' Макрос2 Макрос
' Макрос записан 16.09.2006 Андрей
'
    ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=2, NumColumns:= _
        5, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
        wdAutoFitFixed
    With Selection.Tables(1)
        If .Style <> "Сетка таблицы" Then
            .Style = "Сетка таблицы"
        End If
        .ApplyStyleHeadingRows = True
        .ApplyStyleLastRow = True
        .ApplyStyleFirstColumn = True
        .ApplyStyleLastColumn = True
    End With
End Sub

Глядишь на него и понимаешь, что самый главный метод --- это Add объекта Tables. Лезем в справку:
Цитата

Returns a Table object that represents a new, blank table added to a document.

expression.Add(Range, NumRows, NumColumns, DefaultTableBehavior, AutoFitBehavior)

expression   Required. An expression that returns a Tables object.

Range  Required Range object. The range where you want the table to appear. The table replaces the range, if the range isn't collapsed.

NumRows  Required Long. The number of rows you want to include in the table.

NumColumns  Required Long. The number of columns you want to include in the table.

DefaultTableBehavior  Optional Variant. Sets a value that specifies whether Microsoft Word automatically resizes cells in tables to fit the cells’ contents (AutoFit). Can be either of the following constants: wdWord8TableBehavior (AutoFit disabled) or wdWord9TableBehavior (AutoFit enabled). The default constant is wdWord8TableBehavior.

AutoFitBehavior  Optional Variant. Sets the AutoFit rules for how Word sizes tables. Can be one of the following WdAutoFitBehavior constants: wdAutoFitContent, wdAutoFitFixed, or wdAutoFitWindow. If DefaultTableBehavior is set to wdWord8TableBehavior, this argument is ignored.


В общем код таков:
Код

oShape.Select(ref oMissing);
            
oDoc.Tables.Add(oWord.Selection.Range, 2, 2, ref oMissing, ref oMissing);

Автор: AKorn 17.9.2006, 10:37
Wanderer2019, В ворде нажми Вставка -> Надпись это и есть ShapeRange. Просто вставлять я таблицы знаю как =)

ivashkanet, У меня когда включаеш запись макрос и делаеш вставку Надписи то он этого не делает =) Как будто я не нажимал. 
 Откуда цитата кстати?
Код

oShape.Select(ref oMissing);
            
oDoc.Tables.Add(oWord.Selection.Range, 2, 2, ref oMissing, ref oMissing);
 
помогло. Спасибо.
 Еще маленький вопросик, как мне указать на какой странице создать Shape? А то он создает его только на первой, как его переместить на другие старницы?


Автор: ivashkanet 17.9.2006, 11:34
Цитата(AKorn @  17.9.2006,  10:37 Найти цитируемый пост)
 Откуда цитата кстати?

Встроенная в Ворд справка по VBA 

Автор: Wanderer2019 17.9.2006, 11:36
По умолчанию ворд вообще все делает с ActiveDocument.
Поэтому здесь есть 2-ва варианта.
1. либо делаешь нужный тебе документ Activate.
2. либо работаешь не через экземпляр ворда, а через непосредсвенно тот документ в котором что то записываешь.
завтра постараюсь отписать подробнее...

Автор: ivashkanet 17.9.2006, 18:33
Цитата(AKorn @  17.9.2006,  10:37 Найти цитируемый пост)
 Еще маленький вопросик, как мне указать на какой странице создать Shape? А то он создает его только на первой, как его переместить на другие старницы?

А фиг его знает. Вот в Талицу передается oWord.Selection.Range --- место в котором создавать таблицу  smile 

Автор: Wanderer2019 18.9.2006, 09:14
Цитата(Wanderer2019 @  17.9.2006,  11:36 Найти цитируемый пост)
По умолчанию ворд вообще все делает с ActiveDocument.


млин... обшибся ... 
думал про документ речь идет...
на счет страниц я думаю придется тебе как и в жизни - чтобы добавить таблицу на пустой, но еще не существующей странице двигаться туда по Enter.
если же она уже существует, то искать ее при помощи Selection.


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