
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.21] |
![]() |
|
Сообщ.
#1
,
|
|
|
Задача - поместить в нужную ячейку таблицы каринку, а затем применить к ней Text Wrapping - Behind Text.
Поскольку вставленная катринка является InlineShape, а WdWrapType.wdWrapBehind применяется только к Shape, я использовал метод ConvertToShape. В Word 2003 всё работало отлично, картинка становилась Shape'ом и к ней применялись нужные свойства. Проблема в том, что в Word 2007 ConvertToShape сдвигает изображение в угол страницы. ![]() Пример кода: ![]() ![]() Sub PutPic() Dim Picture As InlineShape Dim Wrap As WdWrapType ActiveDocument.Bookmarks(19).Select Set Picture = Selection.InlineShapes.AddPicture(FileName:="pic.jpg", LinkToFile:=False, SaveWithDocument:=True) Wrap = WdWrapType.wdWrapBehind Picture.ScaleHeight = 100 Picture.ScaleWidth = 100 Set PShape = Picture.ConvertToShape PShape.WrapFormat.Type = Wrap End Sub P.S. Пробовал выделять нужную ячейку, а не ссылку - тот же эффект. Картинку вставляет куда надо, после применения ConvertToShape сдвигает в верхний левый угол. Это сообщение было перенесено сюда или объединено из темы "Проблема с ConvertToShape" |
![]() |
Сообщ.
#2
,
|
|
ConvertToShape не должен ничего сдвигать, проблема явно в другом, документ и жпег - в студию
Это сообщение было перенесено сюда или объединено из темы "Проблема с ConvertToShape" |
Сообщ.
#3
,
|
|
|
Код следующий (продублирован внутри документа):
![]() ![]() Sub PutPic() Dim BMSelection As Selection Dim Picture As InlineShape Dim PShape As Shape Dim Wrap As WdWrapType ActiveDocument.Bookmarks(1).Select Set Picture = Selection.InlineShapes.AddPicture(FileName:="C:\a.jpg", LinkToFile:=False, SaveWithDocument:=True) Wrap = WdWrapType.wdWrapBehind Picture.ScaleHeight = 100 Picture.ScaleWidth = 100 Set PShape = Picture.ConvertToShape PShape.WrapFormat.Type = Wrap PShape.Select ActiveDocument.Bookmarks.Add "BM", Selection.Range End Sub Во вложении картинка и .doc Прикреплённый файл ![]() Прикреплённый файл ![]() Это сообщение было перенесено сюда или объединено из темы "Проблема с ConvertToShape" |
![]() |
Сообщ.
#4
,
|
|
проверил на 2007, закомментировав 7 стр.- все работает без фокусов, в пошаговом режиме проверял ?
Это сообщение было перенесено сюда или объединено из темы "Проблема с ConvertToShape" |
Сообщ.
#5
,
|
|
|
Да, действительно, обращение напрямую к типу через номер помогло:
![]() ![]() PShape.WrapFormat.Type = 5 Спасибо большое! Хотя почему не работал код с обращением по имени - WdWrapType.wdWrapBehind - для меня остаётся загадкой. В 2003 Office работает что так, что так. Спасибо ещё раз. Это сообщение было перенесено сюда или объединено из темы "Проблема с ConvertToShape" |
Сообщ.
#6
,
|
|
|
Здравствуйте еще раз!
Если модераторы уберут со старой темы галочку и перенесут это сообщение в нее - буду благодарен ![]() Дурацкая ситуация. Ошибка не исчезла, она плавающая - можно запустить на одном файле процедуру пару раз, и результат будет разным. Пробовались различные варианты обращения к месту, куда мы вставляем картинку - клетке таблицы - через Bookmark, напрямую к ячейке.. В Cell процедура попадает верно, вставляет картинку верно, по .ConvertToShape сдвигает картинку куда-то в левый край. Или не сдвигает. В Word 2003 эффект не наблюдается. Самое интересное, что Shape, строго говоря, к ячейке не привязан и может быть передвинут в произвольное место страницы (например, командами .IncrementLeft 70 .IncrementTop -50 .IncrementRotation 30, как учит нас MSDN). Тем не менее, если клетку выделить и сделать Selection.Delete, то картинка удаляется вне зависимости от того, куда была перемещена, в том числе если была перемещена методом .ConvertToShape . Это очень удачно, потому что для обновления этих картинок не надо разбираться в коллекции Shapes, а достаточно сделать Cell.Select Selection.Delete Задача-то у меня понятная - автоматически обновлять подписи в ГОСТовском штампе документации. Штамп втиснут в колонтитул. Текст обновляется по закладкам, логотип вставляется просто картинкой, а подписи стандартно вылезают за размер собственной ячейки, и поэтому к ним применяется Обтекание:Под текстом, и подпись центруется внутри ячейки вручную. Поскольку InLineShape, которым является вставленная картинка, обтекаться не умеет, приходится делать .ConvertToShape. В принципе, если бы можно было установить Shape в заданное место на странице (скажем, заданное пискелами/сантиметрами/дюймами от верхнего левого края страницы), это позволило бы обойти проблему. Но я на эту ничего найти не смог. Код: ![]() ![]() Dim A As Integer Set oTable = ActiveDocument.Sections(1).Footers(2).Range.Tables(1) For A=4 To 8 Set oCell = oTable.Cell(4, 3) oCell.Select Selection.Delete Set Picture = oCell.Range.FormattedText.InlineShapes.AddPicture(FileName:="C:\Signature.eps", LinkToFile:=False, SaveWithDocument:=True) Picture.ScaleHeight = 10 Picture.ScaleWidth = 10 msgbox "before ConvertShape" Set wrp = Picture.ConvertToShape msgbox "after ConvertShape" wrp.WrapFormat.Type = 5 wrp.Select wrp.IncrementTop (-7) Selection.Collapse Next A Прикреплённый файл ![]() Прикреплённый файл ![]() |
![]() |
Сообщ.
#7
,
|
|
Цитата teem0n @ если бы можно было установить Shape в заданное место на странице ![]() ![]() ActiveDocument.Shapes.AddPicture(FileName:="C:\Signature.eps", Top:=44, Left:=55).WrapFormat.Type = wdWrapBehind |
Сообщ.
#8
,
|
|
|
Кха... Называется "читайте мануалы"...
Спасибо огромное, так пойдет, я думаю! Удалять тогда видимо через номер Shape. А почему может происходить сдвиг картинки при конвертации? Это баг в Word2007? |
![]() |
Сообщ.
#9
,
|
|
хз, не сталкивался
|