Author |
Topic |
brace
Russia
358 Posts |
Posted - 03/16/2005 : 15:02:19
|
Ну задачка то звучит очень просто на основе набора данных автоматически сделать рисунок visio и что хочет пользватель тоже давно известно простой понятный и короткий алгоритм движения к цели вот г-н Tumanov сделал а объяснить не берется говорит - это сложно. Ну хоть его пример работает и за это уже огромное спасибо.
|
|
|
immortal
Russia
391 Posts |
Posted - 03/16/2005 : 16:47:30
|
да мнето всё понятно, делаю, как сделаю выложу куда нить
визио 2003 форэвер
...а вобще-то я белый и пушистый. |
|
|
immortal
Russia
391 Posts |
Posted - 03/16/2005 : 16:50:15
|
quote: Ну задачка то звучит очень просто на основе набора данных автоматически сделать рисунок visio и что хочет пользватель тоже давно известно простой понятный и короткий алгоритм движения к цели
:-) алгоритм то понятный, как его реализовать мне в принципе тоже понятно, но вот как его лучше реализовать?, ладно, сначала сделаю, а потом будем улучшать
визио 2003 форэвер
...а вобще-то я белый и пушистый. |
|
|
brace
Russia
358 Posts |
Posted - 03/16/2005 : 17:27:10
|
еще просьба добавьте в таблицу поле цвет_фигуры иногда цвет говорит больше чем слова красный - есть неисправность зеленый - все работает желтый - идет монтаж и тд. |
|
|
Tumanov
Russia
1198 Posts |
Posted - 03/16/2005 : 20:32:14
|
quote: Database Wisard vs VBA script А что на самом деле лучше??? Вопрос к профи.
По моему своя программа всегда более приспособлена к конкретной задаче, понятна и не требует никаких лишних движений (типа множества настроек). Но дороже. И дольше писать (особенно включая отладку, испытания и документацию). И в случае изменения алгоритма требует перепрограммирования. В Вашем конкретном случае я выбрал бы не Wizard, а специальную программу.
|
|
|
brace
Russia
358 Posts |
Posted - 03/17/2005 : 09:05:00
|
В visio 2003 я насчитал 22 Add-on(s) я не думаю что это подарок - за все заплачено. Вы говорите лучше делать свое. а для чего тогда все эти адоны если с ними надо шаманить с бубном без гарантии на успех. |
|
|
immortal
Russia
391 Posts |
Posted - 03/17/2005 : 09:47:08
|
quote: Originally posted by brace
В visio 2003 я насчитал 22 Add-on(s) я не думаю что это подарок - за все заплачено. Вы говорите лучше делать свое. а для чего тогда все эти адоны если с ними надо шаманить с бубном без гарантии на успех.
в визио 2000 было несколько вариантов поставок для разных целей и соответственно с разной ценой, по идее вы можете выбрать комплектацию, т.е. не покупать дополнительные программные модули а купить одну программу Визио (это по закону), как оно обстоит на самом деле, я не знаю.
визио 2003 форэвер
...а вобще-то я белый и пушистый. |
|
|
immortal
Russia
391 Posts |
Posted - 03/17/2005 : 14:35:26
|
вот тут в принципе первые результаты 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 форэвер
...а вобще-то я белый и пушистый. |
|
|
brace
Russia
358 Posts |
Posted - 03/17/2005 : 16:09:40
|
Разархивировал получил папки EXCEL и REG. клик на REG - на сек. появляется черное DOS окно и тут же закрывается. клик на EXCEL - выдает сообщение "Незарегистрированная версия, ограничение на 9 фигур" единственное что открывается таблица Excel на 5 строчек. Вот такой аддон.
|
|
|
immortal
Russia
391 Posts |
Posted - 03/17/2005 : 16:42:05
|
quote: Originally posted by immortal
надо открыть ексель, визио, и запустить excel.exe, он напишет что версия не зарегистрированна, но девять фигур расставит (ими меньше), чтобы не писала, надо скачать immortal.exe и сгенерировать ключ и мне на мыло immortal@mh.vstu.edu.ru или сюда на крайняк, я скомпилирую снова excel.exe и писать что не зарегина не будет. если в екселе ничего не меняли, то надо скачать electrics.vss, или поменять первые два столбца на свои. или вобще всё на своё. пока так.
визио 2003 форэвер
...а вобще-то я белый и пушистый.
визио 2003 форэвер
...а вобще-то я белый и пушистый. |
|
|
brace
Russia
358 Posts |
Posted - 03/17/2005 : 17:45:34
|
не работает этот паддон никак в разные папки клал - все бестолку а то что он пишет - "незарег. версия" так это мелочь. Нажимаю на ОК даже не читая. |
|
|
immortal
Russia
391 Posts |
Posted - 03/18/2005 : 09:27:15
|
сделал без регистрации 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 |
|
|
brace
Russia
358 Posts |
Posted - 03/18/2005 : 10:55:51
|
мне скрипт не нужен. хотя конечно интересно понять что присходит за сценой. надеюсь заработает - стучу по дереву. Спасибо !!!
|
|
|
immortal
Russia
391 Posts |
Posted - 03/18/2005 : 11:18:32
|
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 форэвер
...а вобще-то я белый и пушистый. |
|
|
brace
Russia
358 Posts |
Posted - 03/18/2005 : 15:48:09
|
Dear Immortal, боюсь сегодня протестировать не получится замотался за неделю. дома visio не имею так что доживем до понедельника. прошу извинить.
|
|
|
Topic |
|
|
|