Author |
Topic |
brace
Russia
358 Posts |
Posted - 03/14/2005 : 13:06:22
|
Hi Immortal! На плане района надо расставить техточки. Фигура - пока квадрат. Координаты точек известны. Название у каждой точки свое и должно быть написано на фигуре. Данные для всех точек однотипны но разные. Их надо положить в Custom Properties. пока все. В дальнейше надо все точки соединить кабелем по схеме - одна цепь. У каждого кабеля свои данные - те свои Custom Properties.
|
|
|
immortal
Russia
391 Posts |
Posted - 03/14/2005 : 13:52:30
|
понятно, а шейпик квадратика можно на мыло?
визио 2003 форэвер
...а вобще-то я белый и пушистый. |
|
|
brace
Russia
358 Posts |
Posted - 03/14/2005 : 14:14:38
|
Извиняюсь, но как по мылу направить не знаю. Аськи тоже не имею. Фигура квадрат 1Х1 см на бумаге. те это типа блок схемы будет.
|
|
|
Tumanov
Russia
1198 Posts |
Posted - 03/14/2005 : 22:06:37
|
По умолчанию Visio понимает координаты в дюймах. А чтоб была какая-то основа для разговора, я сделал небольшой примерчик по Вашим данным. Не уверен, что при переносе в другой каталог он будет работать без перенастройки, поэтому поначалу лучше разместить его в корне диска С:. Инструкция: скачать файл http://visio.artberg.ru/store/temp.zip , разархивировать, все три файла положить в корень диска C: (без папки temp) и запустить рисунок Visio Vis.vsd. На рисунке должны появиться пять шейпов в координатах и с данными, указанными в файле Ex.xls. Custom Properties ID добавлено в качестве уникального ключа для связки. Если оно мешает, можно сделать невидимым. Одновременно с открытием рисунка скорее всего запустится и Database Drawing Monitor. В принципе его можно закрыть. Если изменять данные в Ex.xls, то и шейпы на рисунке будут это отслеживать. Только при включенном мониторе ручное изменение файла Excel заблокировано. Монитор включается из меню на листе правой кнопкой Launch Database Monitor. Настройка может быть не оптимальной - я просто быстренько сделал работающий пример, а уж мучить его можно долго и постепенно. |
|
|
Tumanov
Russia
1198 Posts |
Posted - 03/14/2005 : 22:13:16
|
Забыл написать, что это сделано в Visio 2002 (по вечерам я работаю с 2002 :), но повлиять скорее всего ни на что не должно. |
|
|
immortal
Russia
391 Posts |
Posted - 03/15/2005 : 08:45:49
|
quote: Originally posted by brace
Hi Immortal! На плане района надо расставить техточки. Фигура - пока квадрат. Координаты точек известны. Название у каждой точки свое и должно быть написано на фигуре. Данные для всех точек однотипны но разные. Их надо положить в Custom Properties. пока все. В дальнейше надо все точки соединить кабелем по схеме - одна цепь. У каждого кабеля свои данные - те свои Custom Properties.
В общем данная задача уже стоит у меня на повестке, и предпологается делать импорт и экспорт данных в ексель, структура файла эксель следующая: первая строчка - имена полей кроме 1 и 2 ячейки, это соответственно имя файла .vss и имя мастера в этом файле, далее любые имена полей, если в шейпе нет такого имени или ячейка пустая то значение не присваевается, в принципе можно наверно как-то по другому, предложения рассмотрю. Пока делается это для ЛЭП, но можно и использовать для чегото другого, кроме того будут учитываться относительные координаты, т.е. координаты шейпов задаются не относительно координат листа, а относительно топографической съёмки для возможности использовать GPS оборудование.
визио 2003 форэвер
...а вобще-то я белый и пушистый. |
|
|
brace
Russia
358 Posts |
Posted - 03/15/2005 : 10:11:26
|
Троекратное УРА г-ну Туманову ! Все работает но есть дилетанские вопросы. 1. для чего нужен отдельный файл <st1> по идее только два файла нужны Excel и Visio. Первй содержит исх. данные Второй их графически изображает. 2. я изменил одно слово в Excel но изменений на рисунке не последовало. Только когда я закрыл и открыл Visio изменение произошло. Отсюда следует - нужна кнопка Refresh в меню Visio - можно ли её организовать ? 3. хотелось бы самому с нуля связать таблицу Excel и Visio опишите алгоритм. 4. Спасибо г-ну immortal за участие.
|
|
|
Tumanov
Russia
1198 Posts |
Posted - 03/15/2005 : 19:48:42
|
quote: 1. для чего нужен отдельный файл <st1>
Выше в последовательности стоял пункт "2. Сделать мастер-шейп, например, в Document Stencil, из которого будут формироваться шейпы на рисунке". Этот файл как раз и содержит этот мастер-шейп. Только в Visio 2003 его можно сделать в Document Stencil, а в Visio 2002 - сходу не получилось. Скорее всего тоже как-нибудь можно, но проще было вынести его в отдельный трафарет, что я и сделал. quote: 2. нужна кнопка Refresh в меню Visio - можно ли её организовать ?
Щелкните правой кнопкой мыши на листе. В выпадающем меню увидите пункт Launch Database Monitor. Щелкаете по нему. Появляется окошко с монитором и одновременно рисунок обновляется. quote: 3. хотелось бы самому с нуля связать таблицу Excel и Visio. Опишите алгоритм.
Ну, это уж Вы размечтались... :) Его два дня писать надо и все равно что-нибудь упустишь... У Microsoft и то не получилось... |
|
|
immortal
Russia
391 Posts |
Posted - 03/16/2005 : 08:39:32
|
quote: Originally posted by brace
3. хотелось бы самому с нуля связать таблицу Excel и Visio опишите алгоритм.
как конкретно? чтобы изменения в екселе отражались в визио? или както по другому, можно поконкретнее
визио 2003 форэвер
...а вобще-то я белый и пушистый. |
|
|
brace
Russia
358 Posts |
Posted - 03/16/2005 : 09:55:40
|
Hi immortal ! Дано - таблица Excel в которой: -количество строк это кол-во одинаковых фигур -колонки 1 и 2 это координаты фигур -колонка 3 это текст для помещения внутрь фигуры или рядом -колонки 4-5-6 это некие однотипные данные Надо - чтобы Visio сам разместил фигуры (пусть квадрат) на листе а данные из колонок 4-5-6 положил в Custom Properties Это задача минимум. Следующий этап. Связать таблицу Excel и рисунок Visio так чтобы изменения в таблице отражались в Visio.
|
|
|
immortal
Russia
391 Posts |
Posted - 03/16/2005 : 10:33:15
|
Public vis As Object
Public exl As Object
Sub Main()
'обработка ошибок
On Error Resume Next
'ссылка на объекты ексель и визио (должны быть открыты) можно сделать по другому,
' но пока неохота
Set vis = GetObject(, "Visio.Application")
Set exl = GetObject(, "Excel.Application")
'подсчет количества заполненных столбцов и строк в ексель
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
'далее делаем циклы, где считываем значения из екселя с помощью
'exl.ActiveCell.Text, переход на ячейку в право exl.ActiveCell.Offset(0, 1).Range("A1").Select
'в низ exl.ActiveCell.Offset(1, 0).Range("A1").Select
'пока не написал
'первая строка в екселе это имена ячеек в визио в шейплисте, я для универсальности
'сделаю проверку первой и второй ячейки на наличие имени файла vss и имени мастера
'далее пишем вставку шейпа на лист и проставляем координаты, причем надо учесть,
' если у вас координаты не именованые
'то будет все в дюймах, чтобы было в миллиметрах необходимо писать в
'екселе после значения " mm" вроде, хотя можно сделать чтобы
'это взяла на себя программа
'как допишу сам, сразу сюда напишу скрипт
End Sub
визио 2003 форэвер
...а вобще-то я белый и пушистый. |
|
|
immortal
Russia
391 Posts |
Posted - 03/16/2005 : 10:42:16
|
следующий этап в принципе тоже можно реализовать, вот примерный алгоритм: делаем шаблон в ексель с названиями (именами) полей необходимых для считывания, и например поле ID фигуры на чертеже запускаем программу которая считывает все заданные имена и помещает их на лист ексель, причем создается документ ексель на основании этого шаблона имя документа = имени документа визио, имя листа в екселе = имени листа в визио, это необходимо для того чтобы обеспечить обновление, далее при каком нибудь событии запускаем программу, которая сделанные изменения в екселе меняет в визио.
как вариант, встроить объект ексель в чертёж, и обращаться к нему, как, пока не знаю, но этот вариан дал бы независимость файлов.
визио 2003 форэвер
...а вобще-то я белый и пушистый. |
|
|
immortal
Russia
391 Posts |
Posted - 03/16/2005 : 10:46:57
|
quote: Originally posted by immortal
Public vis As Object
Public exl As Object
Sub Main()
'обработка ошибок
On Error Resume Next
'ссылка на объекты ексель и визио (должны быть открыты) можно сделать по другому,
' но пока неохота
Set vis = GetObject(, "Visio.Application")
Set exl = GetObject(, "Excel.Application")
'подсчет количества заполненных столбцов и строк в ексель
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
'далее делаем циклы, где считываем значения из екселя с помощью
'exl.ActiveCell.Text, переход на ячейку в право exl.ActiveCell.Offset(0, 1).Range("A1").Select
'в низ exl.ActiveCell.Offset(1, 0).Range("A1").Select
'пока не написал
'первая строка в екселе это имена ячеек в визио в шейплисте, я для универсальности
'сделаю проверку первой и второй ячейки на наличие имени файла vss и имени мастера
'далее пишем вставку шейпа на лист и проставляем координаты, причем надо учесть,
' если у вас координаты не именованые
'то будет все в дюймах, чтобы было в миллиметрах необходимо писать в
'екселе после значения " mm" вроде, хотя можно сделать чтобы
'это взяла на себя программа
'как допишу сам, сразу сюда напишу скрипт
End Sub
в принципе можно явно указать что куда, но не будет универсальности визио 2003 форэвер
...а вобще-то я белый и пушистый.
визио 2003 форэвер
...а вобще-то я белый и пушистый. |
|
|
brace
Russia
358 Posts |
Posted - 03/16/2005 : 12:24:34
|
Спасибо всем за участие в решении этой задачи. Интересно что разговор перешел в плоскость Database Wisard vs VBA script А что на самом деле лучше??? Вопрос к профи.
|
|
|
immortal
Russia
391 Posts |
Posted - 03/16/2005 : 13:36:41
|
на счет профи, не знаю. что лучше использовать зависит от пользователя, я датабазе визард юзал давно и почему он мне не пондравился конкретно не помню, если вас устраивает датабазе визард, то лучше получается он, если не устраивает то он получается хуже того что вас устраивает, в принципе можно написать любой код (любую программу) которая делала бы все то-же что вы делаете руками(в ручную) качество разработки зависит от того, насколько понял разработчик заказчика. с VBA завязал, делаю на VB
визио 2003 форэвер
...а вобще-то я белый и пушистый. |
|
|
Topic |
|
|
|