Реклама i
Стань нашим партнером - зарабатывай с нами!
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Нужна програмка для спецификации

Нужна програмка для спецификации

Ответ
Поиск в этой теме
Непрочитано 27.03.2007, 17:38 #1
Нужна програмка для спецификации
Нютка
 
вед.инженер-технолог
 
Москва
Регистрация: 27.03.2007
Сообщений: 22

Нужна програмка для создания спецификации оборудования.
Вопрос в следующем:
есть план с расстановкой оборудования и номерами позиций. Позиции находятся на трёх слоях и представляют собой однострочный текст.
Необходимо подсчитать количество этих позиций оборудования. Желательно, чтобы данные перенеслись в Excel, и представляли собой два столбца: 1 - номер позиции, 2 - количество.
Помогите, а то я в программировании - ни бум-бум :cry:
Заранее благодарю
Просмотров: 12800
 
Непрочитано 27.03.2007, 18:19
#2
lee


 
Регистрация: 28.02.2004
43
Сообщений: 1,796
<phrase 1=


попробуй EATTEXT
lee вне форума  
 
Непрочитано 27.03.2007, 18:31
#3
Rost

Инженер-Архитектор
 
Регистрация: 20.03.2005
Сообщений: 776


Это можно лекго пересчитать средствами автокада.
Например через быстрое выделение:
Quick Select, там настраиваешь искать текст по содержанию, и указываешь содержание. Когда все позиции выделились, их становится видно, можно пересчитать визуально или вызвать панель свойств, там в списке указанно число выделенных обьектов.

Исчо можно попробовать Filter, в нем также можно отсеять то, что нужно, только в выделенной области чертежа.

в 2008 автокаде есть мазовая связь с экселем. В настройке таблиц. Проблема лишь в заполнении таблицы, пересчитать все не трудно.
Rost вне форума  
 
Непрочитано 27.03.2007, 19:17
#4
lee


 
Регистрация: 28.02.2004
43
Сообщений: 1,796
<phrase 1=


Цитата:
Сообщение от Rost
Это можно лекго пересчитать средствами автокада.
EATTEXT это встроенная команда AutoCAD. Именно то, что доктор прописал.
lee вне форума  
 
Автор темы   Непрочитано 28.03.2007, 09:52
#5
Нютка

вед.инженер-технолог
 
Регистрация: 27.03.2007
Москва
Сообщений: 22


Спасибо, что отклинулись, но нужно чуть-чуть другое. Эта команда, во первых выбирает всё, а во-вторых она не считает количество, а если учесть, что планы огромные и позиция может повторяться раз по 100, то потом считать - это долго.
В общем у меня есть одна програмка, написанная очень умным человечком, но нужно её подредактировать:

И вот что надо:
выборку нужно произвести на слоях:технология, вода, электрика. В данном случае, нужно три раза произвести операцию. А можно ли, чтобы позиции на этих слоях выбирались сразу, за один приём.
И ещё. Итог переводится в файл .txt, а хотелось бы в Excel.

Спасибо
Нютка вне форума  
 
Непрочитано 28.03.2007, 10:13
#6
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,835
<phrase 1=


>Нютка
Цитата:
Спасибо, что отклинулись, но нужно чуть-чуть другое. Эта команда, во первых выбирает всё, а во-вторых она не считает количество, а если учесть, что планы огромные и позиция может повторяться раз по 100, то потом считать - это долго....
Программа, которую Вы применяете, недалеко ушла от тех средств,
которые Вам предложили: BCOUNT, EATTEXT (кстати с очень большими возможностями)..., я бы назвал еще несколько.
Но! Спецификацию она не делает!
Посмотрели бы поиском на этом и соседнем форумах, нашли бы много интересного...
Чтобы не повторяться, т.к. писал на эту тему неоднократно, вот одна ссылка http://www.autocad.ru/cgi-bin/f1/board.cgi?t=17698zE
См. >Alan (2005-07-06 17:43:35)
Цитата:
В двух словах.
1.Используем для чертежей Акад 200х. Блоки оборудования имеют код марки, остальная информация в базе.
2.База проектов и оборудования реализована на MS Acces.
3.Позволяется прогой считать с указанного чертежа (через СОМ-сервер) количество и марки блоков или дополнить в итерактивном режиме при работе программы с базой оборудования.
4.Генератор отчета формирует по объекту и заголовкам спецификацию. Можно на принтер или в pdf.
5.Инструкция 16 стр., считая вместе с титулом. Так что можно прочесть.
Если что-то не понятно пишите.
Выслал Вам скриншоты и образец выходного документа.
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Непрочитано 28.03.2007, 10:18
#7
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Для Нютка.
Нютка, ай-я-яй.
Владимир Громов aka Profan.
Profan вне форума  
 
Непрочитано 28.03.2007, 11:04
#8
Mercury

Инженер-конструктор
 
Регистрация: 09.04.2006
г. Запорожье Украина
Сообщений: 368
<phrase 1=


Mercury вне форума  
 
Непрочитано 28.03.2007, 11:07
#9
Mercury

Инженер-конструктор
 
Регистрация: 09.04.2006
г. Запорожье Украина
Сообщений: 368
<phrase 1=


Надобыло сразу думать.
Оборудывание сделать блоками, к ним присоединить отрибуты.Наименование и позиция, а потом все это извлеч в ексель и там обработать, можно даже позиции поставить автоматом потом когда будешь возвращать атрибуты на место.
Mercury вне форума  
 
Непрочитано 28.03.2007, 11:15
#10
Rost

Инженер-Архитектор
 
Регистрация: 20.03.2005
Сообщений: 776


Цитата:
Сообщение от Нютка
Спасибо, что отклинулись, но нужно чуть-чуть другое. Эта команда, во первых выбирает всё, а во-вторых она не считает количество, а если учесть, что планы огромные и позиция может повторяться раз по 100, то потом считать - это долго.
В общем у меня есть одна програмка, написанная очень умным человечком, но нужно её подредактировать:

И вот что надо:
выборку нужно произвести на слоях:технология, вода, электрика. В данном случае, нужно три раза произвести операцию. А можно ли, чтобы позиции на этих слоях выбирались сразу, за один приём.
И ещё. Итог переводится в файл .txt, а хотелось бы в Excel.

Спасибо
Стандартными средствами все это делается без проблем, все пересчитать, рассортировать хоть по слоям хоть из слоев как угодно можно в автокаде стандартными средствами. Т.к. можно все фильтровать по многим параметрам, (по цвету, по слою, по имени, по содержанию, по длине и т.д. и т.п.) что исчо нужно????

Гы.....
Кароче нужна прога которая сама все сделает!?!?!? Так я понимаю?
Чем станадартные средства не устраивают, не пойму???
Кучу домов общитывал, даже жилые комплексы 40 000 - 60 000м.кв., Там сотни и тысячи всяких эллементов, и енти сотни разбиты исчо на подгруппы, кроме эллеменов исчо площади и обьемы всего что можно обмерять, все эти безконечные спецификации и сводные без особого труда делаются и составляются стандартными средствами и ЭКСЕЛЕМ.

ПЫСЫ
Про EATTEXT не слыхал, ща поюзаю.
Rost вне форума  
 
Автор темы   Непрочитано 28.03.2007, 11:33
#11
Нютка

вед.инженер-технолог
 
Регистрация: 27.03.2007
Москва
Сообщений: 22


для Rost
Да можно, конечно, отсортировать! Но мне надо, чтобы выбирались элементы сразу на трёх слоях, а не по очереди!


для Mercury
А по поводу атрибутов........... Хорошая вещь, но к сожалению не могу до конца разобраться.
AutoCad изучала методом тыка, поэтому многого не знаю.
Когдя пришла работать, тут вообще всё вручную считали, поэтому на тот момент что могла, то и сделала. А сейчас у меня около 500 позиций отрисовано и переделывать - ну очень долго.

Ну скажите: как выбрать элементы сразу на трёх слоях?
Нютка вне форума  
 
Непрочитано 28.03.2007, 11:44
#12
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


>Profan №7 Ну вот, даже не успел посмотреть хорошую программу хорошего человека
>Нютка Как использовать лисп с форума (если не знаешь)
http://dwg.ru/pub/9
Код:
[Выделить все]
;|================== XLS ========================================
* Опубликовано http://www.autocad.ru/cgi-bin/f1/board.cgi?t=31371zf
               http://www.autocad.ru/cgi-bin/f1/board.cgi?t=31596eW
* Автор: Владимир Азарко aka VVA. МинскИнжПроект
* Назначение: Печать списка данных DataList в Excell
*             Вывод осуществляется в текущю книгу в новый лист. Если нет, то создается новая книга
              Вывод осуществляется в новом листе
* Аргументы:
              DataList - список списков данных (LIST) вида
                            ((Value1 Value2 ... VlalueN)(Value1 Value2 ... VlalueN)...)
                            Каждый список вида (Value1 Value2 ... VlalueN) записывается
                            в отдельную строку в соответствующие столбцы (Value1-A Value2-B и .т.д.)
                  header -  список (LIST) заголовков или nil вида ("Подпись A" "Подпись B" ...)
                            Если header nil, принимается ("X" "Y" "Z")
                 Colhide -  список буквенных названий стоблцов для скрытия или nil - не скрывать
                            ("A" "C" "D") - скрыть столбцы A, C, D
                 Name_list - имя нового листа активной книги или nil - новая книга
* Возврат: nil
* TIPS!!! : При передачи функции xls числовых вещественных данных нет необходимости проверять текущий системный
            разделитель целой и дробной части ("HKEY_CURRENT_USER\\Control Panel\\International" "sDecimal")
            Функцией на время вывода отключается использование в Excele системного разделителя, разделителем
            целой и дробной части устанавливается точка. После завершения ф-ции все восстанавливается.
Пример вызова
(xls '((1.1 1.2 1.3 1.4)(2.1 2.2 2.3 2.4)(3.1 3.2 3.3 3.4)) '("Столбец1" "Столбец2" "Столбец3" "Столбец4") '("B"))|;
(vl-load-com)
(defun xls ( DataList header Colhide Name_list / *aplexcel* *books-colection* Currsep
*excell-cells* *new-book* *sheet#1* *sheet-collection* col iz_listo row cell cols)
(defun Letter (N / Res TMP)(setq Res "")(while (> N 0)(setq TMP (rem N 26) 
  TMP (if (zerop TMP)(setq N (1- N) TMP 26) TMP)
  Res (strcat (chr (+ 64 TMP)) Res)  N   (/ N 26))) Res)
(if (null Name_list)(setq Name_list ""))   
  (setq  *AplExcel*     (vlax-get-or-create-object "Excel.Application"))
  (if (setq *New-Book*  (vlax-get-property *AplExcel* "ActiveWorkbook"))
    (setq *Books-Colection*  (vlax-get-property *AplExcel* "Workbooks")
          *Sheet-Collection* (vlax-get-property *New-Book* "Sheets")
               *Sheet#1*     (vlax-invoke-method *Sheet-Collection* "Add"))
(setq *Books-Colection*  (vlax-get-property *AplExcel* "Workbooks")
              *New-Book*     (vlax-invoke-method *Books-Colection* "Add")
          *Sheet-Collection* (vlax-get-property *New-Book* "Sheets")
               *Sheet#1*     (vlax-get-property *Sheet-Collection* "Item" 1)))
(setq *excell-cells*     (vlax-get-property *Sheet#1* "Cells"))
(setq Name_list (if (= Name_list "")
                  (vl-filename-base(getvar "DWGNAME"))
                  (strcat (vl-filename-base(getvar "DWGNAME")) "&" Name_list))
   col 0 cols nil)
(vlax-for sh *Sheet-Collection* (setq cols (cons (strcase(vlax-get-property sh 'Name)) cols)))
(setq row Name_list)  
(while (member (strcase row) cols)(setq row (strcat Name_list " (" (itoa(setq col (1+ col)))")")))
(setq Name_list row)    
(vlax-put-property *Sheet#1* 'Name Name_list)
(setq Currsep (vlax-get-property *AplExcel* "UseSystemSeparators"))  
(vlax-put-property *AplExcel* "UseSystemSeparators" :vlax-false) ;_не использовать системные установки
(vlax-put-property *AplExcel* "DecimalSeparator" ".")            ;_разделитель дробной и целой части
(vlax-put-property *AplExcel* "ThousandsSeparator" " ")          ;_разделитель тысячей
(vla-put-visible *AplExcel* :vlax-true)(setq row 1 col 1)
(if (null header)(setq header '("X" "Y" "Z")))
(repeat (length header)(vlax-put-property *excell-cells* "Item" row col
(vl-princ-to-string (nth (1- col) header)))(setq col (1+ col)))(setq  row 2 col 1)
(repeat (length DataList)(setq iz_listo (car DataList))(repeat (length iz_listo)
(vlax-put-property *excell-cells* "Item" row col (vl-princ-to-string (car iz_listo)))
(setq iz_listo (cdr iz_listo) col (1+ col)))(setq DataList (cdr DataList))(setq col 1 row (1+ row)))
(setq col (1+(length header)) row (1+ row))
(setq cell (vlax-variant-value (vlax-invoke-method *Sheet#1* "Evaluate"
	  (strcat "A1:" (letter col)(itoa row))))) ;_ end of setq
(setq cols (vlax-get-property cell  'Columns))  
(vlax-invoke-method cols 'Autofit)
(vlax-release-object cols)(vlax-release-object cell)
(foreach item ColHide (if (numberp item)(setq item (letter item)))  
(setq cell (vlax-variant-value (vlax-invoke-method *Sheet#1* "Evaluate"
	  (strcat item "1:" item "1"))))
(setq cols (vlax-get-property cell  'Columns))    
(vlax-put-property cols 'hidden 1)  
(vlax-release-object cols)(vlax-release-object cell))
(vlax-put-property *AplExcel* "UseSystemSeparators" Currsep)  
(mapcar 'vlax-release-object (list *excell-cells* *Sheet#1* *Sheet-Collection* *New-Book* *Books-Colection*
*AplExcel*))(setq *AplExcel* nil)(gc)(gc)(princ))

;|============================================================================= 
*    Функция преобразования набора, полученного через (ssget), в список 
* ename-примитивов. 
* Библиотечная функция МинскИнжПроект (С) Владимир Азарко aka VVA.
*    Параметры вызова: 
*   selset   набор примитивов 
*    Примеры вызова: 
(lib:selset-to-enamelist (ssget)) 
=============================================================================|; 
(defun lib:selset-to-enamelist (selset) 
(if selset (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset)))))

;|============================================================================= 
*    Функция преобразования набора, полученного через (ssget), в список 
* vla-примитивов.
* Библиотечная функция МинскИнжПроект (С) Владимир Азарко aka VVA.
*    Параметры вызова: 
*   selset   набор примитивов 
*    Примеры вызова: 
(lib:selset-to-vlalist (ssget)) 
=============================================================================|; 
(defun lib:selset-to-vlalist(selset) 
(if selset (mapcar 'vlax-ename->vla-object(lib:selset-to-enamelist selset))))

;| ===== mip_MakeUniqueMembersOfListWithCount =====
* Удаляет одинаковые (дубликаты) элементы из списка
* с подсчетом числа вхождений элемента
* Библиотечная функция МинскИнжПроект (С) Владимир Азарко aka VVA.
* Пример вызова: 
(mip_MakeUniqueMembersOfListWithCount '( 1 2 3 1 2 3 1 1 2 2))
* Вернет ((1 . 4) (2 . 4) (3 . 2)) |;
(defun mip_MakeUniqueMembersOfListWithCount  ( lst / OutList head count)
  (while lst
    (setq head (car lst)
	  count 0
          lst (vl-remove-if '(lambda(pt)(if (equal pt head 1e-6)(setq count (1+ count)) nil)) lst)
          OutList (append OutList (list (cons head count)))))
  OutList
  )


(defun C:Нютка ( / laylist pat ss DataList)
  (vl-load-com)
  (setq laylist '("Технология" "Вода" "Электрика")) ;;<<Список слоев для выборки
  (setq pat (apply 'strcat (mapcar '(lambda(x)(strcat x ",")) laylist)))
  (if (setq ss (ssget "_X" (list '(0 . "TEXT")(cons 8 pat))))
    (progn
      (setq DataList (mapcar 'vla-get-textstring
                             (lib:selset-to-vlalist ss))
            DataList (mip_MakeUniqueMembersOfListWithCount DataList)
            )
      (setq DataList (mapcar '(lambda(x)(list (car x)(cdr x))) DataList))
      (setq DataList (vl-sort DataList '(lambda(x y)(< (car x)(car y)))))
      (xls DataList '("Номер позиции" "Количество") nil "Специф.")
      )
    )
  (princ "\nДанные уже в Excell'е")
  (princ)
  )
(princ "\nНаберите Нютка в командной строке")

Последний раз редактировалось VVA, 19.09.2015 в 21:19.
VVA вне форума  
 
Непрочитано 28.03.2007, 11:46
#13
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Нужные слои добавлять/убирать в этой строчке
Код:
[Выделить все]
 (setq laylist '("Технология" "Вода" "Электрика")) ;;<<Список слоев для выборки
VVA вне форума  
 
Автор темы   Непрочитано 28.03.2007, 14:08
#14
Нютка

вед.инженер-технолог
 
Регистрация: 27.03.2007
Москва
Сообщений: 22


ОГРОМНОЕ СПАСИБО!
Это именно то, что нужно!
Правда я ничего не понимаю, как это работает, но работает!
А можно я ещё понаглею?
У меня просто есть форматка спецификации......а можно ли сделать так, чтобы данные вставлялись именно в неё, причём позиция вставлялась в 1-ый столбец A, а количество в 7-ой столбец G и всё это начиная с 6-ой строки.
Заранее благодарю
Нютка вне форума  
 
Непрочитано 28.03.2007, 15:39
#15
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Глянь вот сюда http://www.abok.ru/ibforum/index.php...0&#entry100286
Supermax вне форума  
 
Непрочитано 28.03.2007, 16:40
#16
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Нужна функции с VVA №12
Здесь тебе столбец A,G и 6 строка. Но новый лист.
Скопируй в этот лист шапочку форматки.
Код:
[Выделить все]
(defun C:Нютка2 ( / laylist pat ss DataList)
  (vl-load-com)
  (setq laylist '("Технология" "Вода" "Электрика")) ;;<<Список слоев для выборки
  (setq pat (apply 'strcat (mapcar '(lambda(x)(strcat x ",")) laylist)))
  (if (setq ss (ssget "_X" (list '(0 . "TEXT")(cons 8 pat))))
    (progn
      (setq DataList (mapcar 'vla-get-textstring
                             (lib:selset-to-vlalist ss))
            DataList (mip_MakeUniqueMembersOfListWithCount DataList)
            )
      (setq DataList (mapcar '(lambda(x)(list (car x)(cdr x))) DataList))
      (setq DataList (vl-sort DataList '(lambda(x y)(< (atof (car x))(atof (car y))))))
      (setq DataList (mapcar '(lambda(x)(list (cadr x) ""  "" "" "" "" (cadr x))) DataList))
      (setq DataList (append (list '("")'("")'("")'("")) Datalist))
      (xls DataList '("Номер позиции" "" "" "" "" ""  "Количество") nil "Специф.")
      )
    )
  (princ "\nДанные уже в Excell'е")
  (princ)
  )
(princ "\nНаберите Нютка2 в командной строке")
VVA вне форума  
 
Автор темы   Непрочитано 29.03.2007, 09:59
#17
Нютка

вед.инженер-технолог
 
Регистрация: 27.03.2007
Москва
Сообщений: 22


Скопировала, сделала. Теперь итоги в новой книге, в 6-строке и нужных столбцах, но итог странный, одни цифры и то не те.
Нютка вне форума  
 
Автор темы   Непрочитано 29.03.2007, 10:06
#18
Нютка

вед.инженер-технолог
 
Регистрация: 27.03.2007
Москва
Сообщений: 22


Возник ещё вопрос. Мне приходится загружать этот .lsp каждый раз, как загружаю AutoCad. А как сделать, чтобы это было автоматически
Нютка вне форума  
 
Непрочитано 29.03.2007, 11:38
#19
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Сорри, опечатоска вышла
Код:
[Выделить все]
(defun C:Нютка2 ( / laylist pat ss DataList)
  (vl-load-com)
  (setq laylist '("Технология" "Вода" "Электрика")) ;;<<Список слоев для выборки
  (setq pat (apply 'strcat (mapcar '(lambda(x)(strcat x ",")) laylist)))
  (if (setq ss (ssget "_X" (list '(0 . "TEXT")(cons 8 pat))))
    (progn
      (setq DataList (mapcar 'vla-get-textstring
                             (lib:selset-to-vlalist ss))
            DataList (mip_MakeUniqueMembersOfListWithCount DataList)
            )
      (setq DataList (mapcar '(lambda(x)(list (car x)(cdr x))) DataList))
      (setq DataList (vl-sort DataList '(lambda(x y)(< (atof (car x))(atof (car y))))))
      (setq DataList (mapcar '(lambda(x)(list (car x) ""  "" "" "" "" (cadr x))) DataList))
      (setq DataList (append (list '("")'("")'("")'("")) Datalist))
      (xls DataList '("Номер позиции" "" "" "" "" ""  "Количество") nil "Специф.")
      )
    )
  (princ "\nДанные уже в Excell'е")
  (princ)
  )
(princ "\nНаберите Нютка2 в командной строке")
Цитата:
Возник ещё вопрос. Мне приходится загружать этот .lsp каждый раз, как загружаю AutoCad. А как сделать, чтобы это было автоматически
Ссылку я кому приводил выше?
Как использовать LISP, опубликованный на форуме

Последний раз редактировалось VVA, 20.09.2015 в 08:07.
VVA вне форума  
 
Автор темы   Непрочитано 29.03.2007, 12:06
#20
Нютка

вед.инженер-технолог
 
Регистрация: 27.03.2007
Москва
Сообщений: 22


Примите извенения, естественно прочитала, но в конце уже не внимательно! Теперь всё хорошо!
Только вот, если не затруднит, можно ещё корректировочку.
В первом варианте сразу шла сортировку, хотелось бы и здесь. И ещё....хотелось бы чтобы это сразу вставлялось в файл D:\Аня\спецификация_объект лист называется Спецификация.
У меня там есть шапочка, поэтому слов позиция, количество - не надо. Только сам итог в нужные ячейки. Если это возможно, то век благодарна буду
Нютка вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Нужна програмка для спецификации

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск