Надо рисовать в Excell и знать координаты того что рисую.
Модератор: Naeel Maqsudov
С уважением ко всем!
Подскажите! Как на листах Excell не только программно сформировать и прорисовывать объекты (кривые, плоскости, фигуры) но и программно узнать координаты любых точек этих объектов. Подскажите, может для этого есть стандартные библиотеки, либо надстройки, либо ….
Благодарен за любую информацию!
Подскажите! Как на листах Excell не только программно сформировать и прорисовывать объекты (кривые, плоскости, фигуры) но и программно узнать координаты любых точек этих объектов. Подскажите, может для этого есть стандартные библиотеки, либо надстройки, либо ….
Благодарен за любую информацию!
Идущий, да осилит дорогу!
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Кажется это Вы задавали не так давно вопрос про сплайны, и координаты любых точек лежащих внутри сегментов кривой?
Так вот ситуация та же. Есть объект Shape, точнее есть интерфейс к COM-объекту Shape. Благодаря полиморфизму этот Shape может быть любой автофигурой MSOffice или иным внедренным в документ OLE-объектом. С другой стороны этот интерфейс НЕ ПОЗВОЛЯЕТ доступиться к данным о детялях самого объекта. А с третьей стороны сам этот объект реализует редакторы, которые позволяют работать с этим объектом интерактивно (перемещаемые мышью желтые маркеры у автофигур, свойства рисунка, или ассоциированное с OLE-объектом приложение).
Короче, программно с этими объектами можно делать только то, что позволяет Shape.
PS
Может я и поспешил с ответом... Сегодня-завтра еще раз все проверю на всякий случай, но думаю, что я абсолютно прав.
Так вот ситуация та же. Есть объект Shape, точнее есть интерфейс к COM-объекту Shape. Благодаря полиморфизму этот Shape может быть любой автофигурой MSOffice или иным внедренным в документ OLE-объектом. С другой стороны этот интерфейс НЕ ПОЗВОЛЯЕТ доступиться к данным о детялях самого объекта. А с третьей стороны сам этот объект реализует редакторы, которые позволяют работать с этим объектом интерактивно (перемещаемые мышью желтые маркеры у автофигур, свойства рисунка, или ассоциированное с OLE-объектом приложение).
Короче, программно с этими объектами можно делать только то, что позволяет Shape.
PS
Может я и поспешил с ответом... Сегодня-завтра еще раз все проверю на всякий случай, но думаю, что я абсолютно прав.
Доброго времени суток, ВСЕМ!Naeel Maqsudov писал(а):Кажется это Вы задавали не так давно вопрос про сплайны, и координаты любых точек лежащих внутри сегментов кривой?
. . .
Короче, программно с этими объектами можно делать только то, что позволяет Shape.
Да, это был я. И на тот вопрос я получил обстоятельный ответ, и с ним согласен.
Но проблема осталась и возникла мысль: можа кто-то где-то уже создал эти библиотеки, и их осталось взять и подключить к Excel. (Мечта любого нормального человека).
Ведь подобные задачи решены во многих конструкторских пакетах, должно же кого-то жизнь заставить доработать его под Excel.
С уважением, patq!
Идущий, да осилит дорогу!
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Будем надеяться. Может он и откликнется...можа кто-то где-то уже создал эти библиотеки
А Вы не смотрели, случайно, в AutoCAD-е нет ли такой возможности? Там точно такой же VBA используется.
Naeel!
Цитирую Ваши слова:
При запуске VBA выдает ошибку: Run-time error '13': Type mismatch и показывает ее в строке ptsArr = .Item(i).Points
Аналогичная манипуляция с Vertices вместо Nodes приводит к аналогичной ошибке.
Не понимаю, в чем тут дело. Дык есть ли доступ к координатам этой полилинии или нет?
С уважением, AlexGur.
Цитирую Ваши слова:
Из хелпа все же вытекает, что все-таки позволяет, но как-то криво и с оговорками. Вот пример. Я в Word визуально рисую Polyline (т.е. freeform), выделяю ее, после чего запускаю свой макрос, чтобы узнать координаты узлов. Код почти буквально скопирован из хелпа по Nodes, только вместо конкретного шейпа я обращаюсь к Selection:С другой стороны этот интерфейс НЕ ПОЗВОЛЯЕТ доступиться к данным о детялях самого объекта. А с третьей стороны сам этот объект реализует редакторы, которые позволяют работать с этим объектом интерактивно (перемещаемые мышью желтые маркеры у автофигур, свойства рисунка, или ассоциированное с OLE-объектом приложение).
Короче, программно с этими объектами можно делать только то, что позволяет Shape.
Код: Выделить всё
Sub ListNodesCoords()
Buf = ""
For i = 1 To Selection.ShapeRange.Nodes.Count
With Selection.ShapeRange.Nodes
ptsArr = .Item(i).Points
x = ptsArr(1, 1)
y = ptsArr(1, 2)
Buf = Buf & x & "," & y & Chr(13)
End With
Next i
MsgBox (Buf)
End Sub
Аналогичная манипуляция с Vertices вместо Nodes приводит к аналогичной ошибке.
Не понимаю, в чем тут дело. Дык есть ли доступ к координатам этой полилинии или нет?
С уважением, AlexGur.
Ну, короче, мой вопрос снят с повестки дня. Прошу прощения за глупость и наезд на Microsoft. Вот мой код (Freeform 39 уже должна быть нарисована, это у меня polyline):
Код: Выделить всё
Sub MyTest()
buf = ""
Set Nds = ActiveDocument.Shapes("Freeform 39").Nodes
With Nds
For i = 1 To Nds.Count
pointsArray = .Item(i).Points
currXvalue = pointsArray(1, 1)
currYValue = pointsArray(1, 2)
buf = buf & currXvalue & "," & currYValue & vbLf
Next i
MsgBox (buf)
End With
End Sub
С уважением, AlexGur.
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Узлы в полигоне - это базовая инфомация об автофигуре (как ширина и высота у прямоугольника). Исходный вопрос был не об узлах, а о любых точках сплайна.Naeel! Цитирую Ваши слова:
Цитата: [....skip....]
Из хелпа все же вытекает, что все-таки позволяет, но как-то криво и с оговорками.
Да, Наиль, спасибо, я это уже понял - потому и извинился перед участниками за глупый вопрос. Сейчас, кстати, именно этим (вычислением любых промежуточных точек) я и занимаюсь, но только для полилиний, т.е. ломаных.
Теоретически это можно научиться делать и для кривых Безье, но здесь надо покопаться в сплайновых алгоритмах (не так это и сложно; просто в мои задачи это не входит).
Теоретически это можно научиться делать и для кривых Безье, но здесь надо покопаться в сплайновых алгоритмах (не так это и сложно; просто в мои задачи это не входит).
С уважением, AlexGur.