All Forums
 Категория Visio
 Форум Вопросы и ответы
 размещение фигур.
Previous Page | Next Page
Author Previous Topic Topic Next Topic

brace

Russia
358 Posts

Posted - 03/16/2005 :  15:02:19
Ну задачка то звучит очень просто
на основе набора данных автоматически сделать рисунок visio
и что хочет пользватель тоже давно известно
простой понятный и короткий алгоритм движения к цели
вот г-н Tumanov сделал а объяснить не берется говорит - это сложно.
Ну хоть его пример работает и за это уже огромное спасибо.
Go to Top of Page

immortal

Russia
391 Posts

Posted - 03/16/2005 :  16:47:30  Visit immortal's Homepage
да мнето всё понятно, делаю, как сделаю выложу куда нить

визио 2003 форэвер

...а вобще-то я белый и пушистый.
Go to Top of Page

immortal

Russia
391 Posts

Posted - 03/16/2005 :  16:50:15  Visit immortal's Homepage
quote:
Ну задачка то звучит очень просто
на основе набора данных автоматически сделать рисунок visio
и что хочет пользватель тоже давно известно
простой понятный и короткий алгоритм движения к цели
:-) алгоритм то понятный, как его реализовать мне в принципе тоже понятно, но вот как его лучше реализовать?, ладно, сначала сделаю, а потом будем улучшать

визио 2003 форэвер

...а вобще-то я белый и пушистый.
Go to Top of Page

brace

Russia
358 Posts

Posted - 03/16/2005 :  17:27:10
еще просьба
добавьте в таблицу поле цвет_фигуры
иногда цвет говорит больше чем слова
красный - есть неисправность
зеленый - все работает
желтый - идет монтаж
и тд.
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 03/16/2005 :  20:32:14
quote:
Database Wisard vs VBA script
А что на самом деле лучше??? Вопрос к профи.
По моему своя программа всегда более приспособлена к конкретной задаче, понятна и не требует никаких лишних движений (типа множества настроек). Но дороже. И дольше писать (особенно включая отладку, испытания и документацию). И в случае изменения алгоритма требует перепрограммирования.
В Вашем конкретном случае я выбрал бы не Wizard, а специальную программу.
Go to Top of Page

brace

Russia
358 Posts

Posted - 03/17/2005 :  09:05:00
В visio 2003 я насчитал 22 Add-on(s)
я не думаю что это подарок - за все заплачено.
Вы говорите лучше делать свое.
а для чего тогда все эти адоны если с ними надо
шаманить с бубном без гарантии на успех.
Go to Top of Page

immortal

Russia
391 Posts

Posted - 03/17/2005 :  09:47:08  Visit immortal's Homepage
quote:
Originally posted by brace

В visio 2003 я насчитал 22 Add-on(s)
я не думаю что это подарок - за все заплачено.
Вы говорите лучше делать свое.
а для чего тогда все эти адоны если с ними надо
шаманить с бубном без гарантии на успех.

в визио 2000 было несколько вариантов поставок для разных целей и соответственно с разной ценой, по идее вы можете выбрать комплектацию, т.е. не покупать дополнительные программные модули а купить одну программу Визио (это по закону), как оно обстоит на самом деле, я не знаю.

визио 2003 форэвер

...а вобще-то я белый и пушистый.
Go to Top of Page

immortal

Russia
391 Posts

Posted - 03/17/2005 :  14:35:26  Visit immortal's Homepage
вот тут в принципе первые результаты http://www.immortal.vstu.edu.ru/visio/visio.htm
файлы excel.exe и excel.xls
требуется регистрации библиотеки Windows_Function.dll, которая лежит там-же.
все очень сыро, работают пока только координаты в дюймах, и можно задать имя мастера и vss файла, если они не заданы, вставляются умолчания electrics.vss и "Розетка", vss файл должен лежать в одной дирректории с excel.exe, можно и не указывать координаты, тогда вставится с координатами 0,0, в принципе на днях сделаю чтобы работал с именами шейп-листа, т.е. в принципе координаты можно не задавать, а задать прямо имя "BeginX" "BeginY" "EndX" "EndY" и т.п.
имена можно использовать любые, если у шейпа нет такой ячейки, это игнорируется
первая строчка должна содержать: vss,shape,x,y - это не стандартные и работают уже сейчас.
пока не работают, но будут: любые имена ячеек в шейплисте.
так-же будут указываться другие умолчания для vss файла и мастера через текстовый файл и через форму.
если есть желание можно посмотреть уже сейчас, или подождать когда что-то добавиться ещё

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


визио 2003 форэвер

...а вобще-то я белый и пушистый.
Go to Top of Page

brace

Russia
358 Posts

Posted - 03/17/2005 :  16:09:40
Разархивировал получил папки EXCEL и REG.
клик на REG - на сек. появляется черное
DOS окно и тут же закрывается.
клик на EXCEL - выдает сообщение
"Незарегистрированная версия,
ограничение на 9 фигур"
единственное что открывается таблица Excel на 5 строчек.
Вот такой аддон.



Go to Top of Page

immortal

Russia
391 Posts

Posted - 03/17/2005 :  16:42:05  Visit immortal's Homepage
quote:
Originally posted by immortal

надо открыть ексель, визио, и запустить excel.exe, он напишет что версия не зарегистрированна, но девять фигур расставит (ими меньше), чтобы не писала, надо скачать immortal.exe и сгенерировать ключ и мне на мыло immortal@mh.vstu.edu.ru или сюда на крайняк, я скомпилирую снова excel.exe и писать что не зарегина не будет.
если в екселе ничего не меняли, то надо скачать electrics.vss, или поменять первые два столбца на свои. или вобще всё на своё.
пока так.

визио 2003 форэвер

...а вобще-то я белый и пушистый.



визио 2003 форэвер

...а вобще-то я белый и пушистый.
Go to Top of Page

brace

Russia
358 Posts

Posted - 03/17/2005 :  17:45:34
не работает этот паддон никак
в разные папки клал - все бестолку
а то что он пишет - "незарег. версия"
так это мелочь. Нажимаю на ОК даже не читая.
Go to Top of Page

immortal

Russia
391 Posts

Posted - 03/18/2005 :  09:27:15  Visit immortal's Homepage
сделал без регистрации http://www.immortal.vstu.edu.ru/visio/excel.rar
файлы: excel.exe - сам адд-он
excel.xls - пример

откройте визио и создайте новый проект (документ)
откройте excel.xls
отредактируйте имена файла vss, в соответствии с вашим требованиями
отредактируйте имя шейпа в колонке shape
помните ваш файл vss должен лежать вместе с excel.exe, кроме того он должен открытый в созданном документе (потом такой необходимости наверно не будет, но пока так).
рекомендую прописать пути к Stencils и Add-ons в меню Tools - option - Advanced - File Paths...
координаты x и y можно задавать в мм, см, м, причем без разницы на каком языке, и без разницы ставить точку или запятую в разделителе разрядов (будет одинаково: 35мм 35 мм 35 мм. 35mm 3,5sm 3.5см 3.5 см. 0,0035м 0.0035m 0.0035 m ну и тп. главное в конце не ставить пробел после точки, хотя можно учесть и это, при задании отрицательных значений могут возникнуть проблемы в екселе, поэтому либо сделайте параметры ячейки = текст, либо перед запятой пишите пробел, стандартный знак ' пока вроде не работает)
далее можете использовать любые имена столбцов, текстовые значения необходимо заключать в скобки (потом возможно наверно делать проверку, с числами тоже надо аккуратнее, пока проверки так-же нет)

при открытом визио и екселе запускаем excel.exe
или через шейплист: =runaddon("excel.exe")

я обещал выложить сюда скрипт, есть? необходимость ложить такой, какой он сейчас (например для того чтобы Евгений выложил его в фак), или вобще нет необходимости?

визио 2003 форэвер

...а вобще-то я белый и пушистый.

Edited by - immortal on 03/18/2005 09:37:37
Go to Top of Page

brace

Russia
358 Posts

Posted - 03/18/2005 :  10:55:51
мне скрипт не нужен.
хотя конечно интересно понять что присходит за сценой.
надеюсь заработает - стучу по дереву.
Спасибо !!!
Go to Top of Page

immortal

Russia
391 Posts

Posted - 03/18/2005 :  11:18:32  Visit immortal's Homepage
Public vis As Object
Public exl As Object
Public license As String

Private Sub Form_Load()
'обработка ошибок
On Error Resume Next
'ссылка на объекты ексель и визио (должны быть открыты) можно сделать по другому,
' но пока неохота
Set vis = GetObject(, "Visio.Application")
Set exl = GetObject(, "Excel.Application")

'определение пути к адд-он, для указания пути к файлу vss
Dim patt
patt = App.Path
If Right(patt, 1) = "\" Then
Else
patt = patt & "\"
End If
'подсчет количества заполненных столбцов и строк в ексель
exl.Range("A1").Select
Dim stolb
Dim strok
Dim znach

stolb = 0
1:
znach = exl.ActiveCell.Text

If znach = "" Then

Else
stolb = stolb + 1
exl.ActiveCell.Offset(0, 1).Range("A1").Select
GoTo 1
End If


exl.Range("A1").Select
strok = 0
2:
znach = exl.ActiveCell.Text

If znach = "" Then

Else
strok = strok + 1
exl.ActiveCell.Offset(1, 0).Range("A1").Select
GoTo 2
End If
'задание значений по умолчанию
Dim vssz
Dim shpz
Dim iksz
Dim igrz

vssz = "electrics.vss"
shpz = "Розетка"
iksz = 0
igrz = 0

Dim vss
Dim shp
Dim iks
Dim igr
'считывание имен (первая строка ексель)
Dim name_i(1 To 100)
exl.Range("A1").Select
For i = 1 To stolb
name_i(i) = exl.ActiveCell.Text
exl.ActiveCell.Offset(0, 1).Range("A1").Select
Next i
'поиск нестандартных идентефикаторов
vss = 0 '- если не указан vss
shp = -1 '- если не указан шейп
iks = -2 '-  если нет координаты х
igr = -3 '- если нет координаты y
For i = 1 To stolb
'файл vss
If name_i(i) = "vss" Then vss = i
'шейп (shape)
If name_i(i) = "shape" Then shp = i
' координату x
If name_i(i) = "x" Then iks = i
'координату y
If name_i(i) = "y" Then igr = i
Next i

Dim data_i(1 To 100, -3 To 100)

    For j = 1 To strok - 1
    data_i(j, 0) = vssz
    data_i(j, -1) = shpz
    data_i(j, -2) = iksz
    data_i(j, -3) = igrz
    
    Next j


'считывание значений из остальных ячеек ексель
exl.Range("A2").Select
For j = 1 To strok - 1
    For i = 1 To stolb

    data_i(j, i) = exl.ActiveCell.Text

    exl.ActiveCell.Offset(0, 1).Range("A1").Select
    Next i
exl.ActiveCell.Offset(1, -stolb).Range("A1").Select
Next j
'определение переменной "выделенный шейп"
    Dim vsoSelection As Visio.Selection

Dim iii
Dim mnog ' на это делим при переводе из мм в дюймы
iii = 0
'вставка шейпов
For j = 1 To strok - 1

Text1.Text = data_i(j, shp) ' используем текстовое окно формы
'так-как .Masters.Item(Text1.Text) не понимает переменных в VB, а в VBA понимает идиот. 
'обработка координаты х
' замена миллиметров на дюймы
mnog = 1
iii = iii + InStr(1, data_i(j, iks), "mm")
iii = iii + InStr(1, data_i(j, iks), "мм")
If iii > 0 Then mnog = 25.4
data_i(j, iks) = Replace(data_i(j, iks), "mm", "")
data_i(j, iks) = Replace(data_i(j, iks), "мм", "")
' замена сантиметров на дюймы
iii = 0
iii = iii + InStr(1, data_i(j, iks), "sm")
iii = iii + InStr(1, data_i(j, iks), "см")
If iii > 0 Then mnog = 2.54
data_i(j, iks) = Replace(data_i(j, iks), "sm", "")
data_i(j, iks) = Replace(data_i(j, iks), "см", "")
' замена метров на дюймы
iii = 0
iii = iii + InStr(1, data_i(j, iks), "m")
iii = iii + InStr(1, data_i(j, iks), "м")
If iii > 0 Then mnog = 0.0254
data_i(j, iks) = Replace(data_i(j, iks), "m", "")
data_i(j, iks) = Replace(data_i(j, iks), "м", "")
'убираем лишнее
If Right(data_i(j, iks), 1) = "." Then _
data_i(j, iks) = Left(data_i(j, iks), Len(data_i(j, iks)) - 1)
data_i(j, iks) = RTrim(data_i(j, iks))
data_i(j, iks) = LTrim(data_i(j, iks))
'заменяем точку на запятую

data_i(j, iks) = Replace(data_i(j, iks), ".", ",")

'делаем из строки число и переводим в дюймы
data_i(j, iks) = data_i(j, iks) / mnog

'обработка координаты y
' замена миллиметров на дюймы
mnog = 1
iii = 0
iii = iii + InStr(1, data_i(j, igr), "mm")
iii = iii + InStr(1, data_i(j, igr), "мм")
If iii > 0 Then mnog = 25.4
data_i(j, igr) = Replace(data_i(j, igr), "mm", "")
data_i(j, igr) = Replace(data_i(j, igr), "мм", "")
' замена сантиметров на дюймы
iii = 0
iii = iii + InStr(1, data_i(j, igr), "sm")
iii = iii + InStr(1, data_i(j, igr), "см")
If iii > 0 Then mnog = 2.54
data_i(j, igr) = Replace(data_i(j, igr), "sm", "")
data_i(j, igr) = Replace(data_i(j, igr), "см", "")
' замена метров на дюймы
iii = 0
iii = iii + InStr(1, data_i(j, igr), "m")
iii = iii + InStr(1, data_i(j, igr), "м")
If iii > 0 Then mnog = 0.0254
data_i(j, igr) = Replace(data_i(j, igr), "m", "")
data_i(j, igr) = Replace(data_i(j, igr), "м", "")
'убираем лишнее
If Right(data_i(j, igr), 1) = "." Then _
data_i(j, igr) = Left(data_i(j, igr), Len(data_i(j, igr)) - 1)
data_i(j, igr) = RTrim(data_i(j, igr))
data_i(j, igr) = LTrim(data_i(j, igr))
'заменяем точку на запятую
data_i(j, igr) = Replace(data_i(j, igr), ".", ",")
'делаем из строки число
data_i(j, igr) = data_i(j, igr) / mnog



'вставка элемента
    vis.Application.ActiveWindow.Page.Drop vis.Application.Documents.Item _
   (patt & data_i(j, vss)).Masters.Item(Text1.Text), data_i(j, iks), data_i(j, igr)
    Set vsoSelection = vis.ActiveWindow.Selection
'вот тут-то и присваевается значение в соответствии с именем ячейки в шейплисте
'если такой ячейки нет, то ничего не вставляется
For i = 1 To stolb
vsoSelection.Item(1).Cells(name_i(i)).FormulaU = data_i(j, i)
Next i
Next j

'выгружаем форму, она нужно была только для text1
Unload Form1

End Sub


если есть вопросы по какимто позициям в коде, спрашивайте.

визио 2003 форэвер

...а вобще-то я белый и пушистый.
Go to Top of Page

brace

Russia
358 Posts

Posted - 03/18/2005 :  15:48:09
Dear Immortal,
боюсь сегодня протестировать не получится
замотался за неделю. дома visio не имею так что
доживем до понедельника.
прошу извинить.
Go to Top of Page
Previous Topic Topic Next Topic  
Previous Page | Next Page
Данный сайт является архивом форума visio.artberg.ru, который был закрыт в связи с переходом на новую платформу visio.getbb.ru
Все материалы доступны только для чтения! Если у вас появились вопросы, или вы хотите что-то обсудить, связанное с Visio, обращайтесь на новый форум!
Архив был создан благодаря совместным усилиям Генадия Туманова @Tumanov (visio.artberg.ru), Александра ака @Surrogate (visio.getbb.ru), и Николая Белых @nbelyh (unmanagedvisio.com)