Глюк с номером строки в примитиве acad_table
Реклама i
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Глюк с номером строки в примитиве acad_table

Глюк с номером строки в примитиве acad_table

Ответ
Поиск в этой теме
Непрочитано 24.07.2007, 21:07 #1
Глюк с номером строки в примитиве acad_table
Name
 
Владимир
Регистрация: 18.06.2007
Сообщений: 7

Обрабатываю табличку (примитив acad_table), происходит следующий глюк. В коде
Код:
[Выделить все]
  (repeat (- ROWS)
    (if (= (vla-GetText name_table1 row2 0) "")
      ( 
  	(vla-MergeCells name_table1 row2 row2 1 6)
  	(vla-MergeCells name_table1 row1 row2 0 0)
  	(vla-MergeCells name_table1 row1 row2 8 8)
  	(vla-SetText name_table1 row2 1 "1%")
  	(vla-SetText name_table1 row2 7 (strcat "=0.01*Sum(H"(itoa (+ row1 1))":H"(itoa row2)")"))
  	(vla-SetText name_table1 row1 8 (strcat "=Sum(H"(itoa (+ row1 1))":H"(itoa (+ row2 1))")"))
	(setq row1 (+ row2 1))
        (setq row2 row1)
     )
     ); if
    (setq row2 (+ row2 1))
  );repeat
в условии if выдает ошибку т.к. делает попытку взять значение из объединенных ячеек из строки row2-1
далее по коду в первом блоке if строку
Код:
[Выделить все]
(vla-MergeCells name_table1 row2 row2 1 6)
воспринимает как
Код:
[Выделить все]
(vla-MergeCells name_table1 (- row2 1) (- row2 1) 1 6)
причем после экспериментов выяснил что само выражение ни причем, важно что оно в блоке первое, если поставить другую строку то будет тоже самое - переменная row2 увеличится на единицу.

Сумбурно описал конечно, но я ничего уже не понимаю.
Кто нибудь помогите пожайлуста, что я не так делаю?
Просмотров: 2692
 
Непрочитано 24.07.2007, 22:44
#2
fixo

Lisp/VBA/VB.NET Hobbyist
 
Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367


Посмотри свойства :
что-то типа того сейчас проверить не могу

Код:
[Выделить все]
(if (eq :vlax-true (vla-gettitlesuppressed name_table1))
(setq row (1+ row))
)
(if (eq :vlax-true (vla-getheadersuppressed name_table1))
(setq row (1+ row))
)
~'J'~
fixo вне форума  
 
Непрочитано 24.07.2007, 23:09
#3
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,432


Попробуй нарисовать таблицу (просто нарисовать), объединить в ней ячейки и запустить такой код:
Код:
[Выделить все]
(defun test (/ tbl row_counter col_counter res res_col)
  (vl-load-com)
  (if
    (and
      (not
        (vl-catch-all-error-p
          (vl-catch-all-apply
            '(lambda () (setq tbl (car (entsel "\nSelect table <Cancel> : "))))
            ) ;_ end of vl-catch-all-apply
          ) ;_ end of vl-catch-all-error-p
        ) ;_ end of not
      tbl
      (= (cdr (assoc 0 (entget tbl))) "ACAD_TABLE")
      ) ;_ end of and
     (progn
       (setq tbl         (vlax-ename->vla-object tbl)
             row_counter 0
             col_counter -1
             ) ;_ end of setq
       (repeat (vla-get-rows tbl)
         (repeat (vla-get-columns tbl)
           (setq
             res_col (append res_col
                             (list (list (vla-gettext
                                           tbl
                                           row_counter
                                           (setq col_counter (1+ col_counter))
                                           ) ;_ end of vla-GetText
                                         row_counter
                                         col_counter
                                         ) ;_ end of list
                                   ) ;_ end of list
                             ) ;_ end of append
             ) ;_ end of setq
           ) ;_ end of repeat
         (setq col_counter -1
               row_counter (1+ row_counter)
               res         (cons res_col res)
               res_col     nil
               ) ;_ end of setq
         ) ;_ end of repeat
       ) ;_ end of progn
     ) ;_ end of if
  (reverse res)
  ) ;_ end of defun
И проанализируй результат.
Нумерация строк и столбцов идет с 0; для объединенных ячеек значения хранятся в верхней левой ячейке (в остальных текст = "").
Для GetRows учитываются строки title и header, как указал Fatty (респект, спасибо, что напомнил).
P.S. После программного объединения (для гарантии) попробуй выполнить vla-update - иногда такое требовалось для корректной дальнейшей обработки
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 25.07.2007, 10:07
#4
Name


 
Регистрация: 18.06.2007
Владимир
Сообщений: 7


Большое спасибо, все получилось и работает.
Мне стыдно за такую ошибку. Просматривая код Алексея нашел, что у меня отсутствует progn, добавил его и все работает.
Name вне форума  
 
Непрочитано 25.07.2007, 10:26
#5
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,432


Хе, я не лучше. Сам проглядел.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Глюк с номером строки в примитиве acad_table