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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как лиспом прописать формулу exel

Как лиспом прописать формулу exel

Ответ
Поиск в этой теме
Непрочитано 18.01.2008, 11:31 #1
Как лиспом прописать формулу exel
doki
 
Регистрация: 17.01.2008
Сообщений: 28

Такой вопрос: как лиспом прописать экселевскую формулу, например "=В3*С3" только программа циклическая и формула должна меняться с определенным шагом каждый этап цикла, например "=В3*С3", "=В8*С8", "=В13*С13" и т.д. шаг в данном случае 5 строчек.
Просмотров: 4695
 
Непрочитано 18.01.2008, 12:45
#2
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Как текст и прописать в соответсующую ячейку
Код:
[Выделить все]
;;;Пример
(setq data_list ;;Исходный список данных для построчной записи в Эксел, начиная со 2-й строки. 1-я для заголовка
       '(
         (10 11) ;;Столбей A-10 B-11
         (20 21) ;;Столбей A-20 B-21
         (30 31) ;;Столбей A-30 B-31
         (40 41)
         (50 51)
         (60 61)
         (70 71)
         (80 81)
         (90 91)
         (100 101)
         )
      )
;;;К списку добавляем Столбей C с формулой (каждый пятый перемножается, каждый второй суммируется)
(setq line 2) ;;Индеск строк в Excell. Пишем со второй строки (1-я для заголовка)
(setq count 1);;Счетчик
(setq ret nil)
(foreach item data_list
  (cond ((zerop(rem count 5)) ;;Каждуй пятый
         (setq ret (append ret (list(list (car item)  ;_Столбей А
                                     (cadr item)      ;_Столбей B
                                     (strcat "=A" (itoa line) "*B" (itoa line)) ;_Столбей C
                                     "!!!Пятый"       ;_Столбей D
                                     ))
                           )
               )
         )
        ((zerop(rem count 2)) ;;Каждуй второй
         (setq ret (append ret (list(list (car item)
                                     (cadr item)
                                     (strcat "=A" (itoa line) "+B" (itoa line))
                                          "!!!Второй"       ;_Столбей D
                                     ))
                           )
               )
         )
        (t
         (setq ret (append ret (list(list (car item)
                                     (cadr item)
                                     ""
                                     ))
                           )
               )
         )
  )
  (setq line (1+ line) count (1+ count))
  )
         
(xls ret '("Столбец 1" "Столбец 2" "Операции" "Примечания") nil "Test")
Недостающая ф-ция xls и коментарии к ней здесь
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 18.01.2008, 13:30
#3
doki


 
Регистрация: 17.01.2008
Сообщений: 28


спасибо.... мне все гораздо проще нужно, но две для себя важных строчки из-за которой прога заработала я взял.. еще раз спасибо
doki вне форума  
 
Автор темы   Непрочитано 29.01.2008, 20:39
#4
doki


 
Регистрация: 17.01.2008
Сообщений: 28


не получается ввести формулу:

=2*(округлвверх(D5/300;0)+1+округлвверх(Е5/300;0)+1

при такой записи в программе

(setq row d1 colm 5 )
(vlax-put-property cll "Item" row colm (vl-princ-to-string "=2*(округлвверх(D" (itoa row) "/300;0)+1+округлвверх(E" (itoa row) "/300;0)+1"))

отавляет пустую ячейку.... а если убираешь (itoa row) то все нормально.... поправте меня если что-то неправильно...
doki вне форума  
 
Непрочитано 30.01.2008, 02:30
#5
fixo

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


Наверно, лучше так:
Код:
[Выделить все]
(setq row d1 colm 5 )
(vlax-put-property cll "Item" row colm (vl-princ-to-string "=2*(округлвверх(D" (itoa row) "/300;0)+1+округлвверх(E" (itoa row) "/300;0)+1"))
~'J'~
fixo вне форума  
 
Автор темы   Непрочитано 30.01.2008, 11:40
#6
doki


 
Регистрация: 17.01.2008
Сообщений: 28


а в чем разница?
doki вне форума  
 
Непрочитано 30.01.2008, 12:13
#7
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


По моему там strcat пропущен
Код:
[Выделить все]
(setq row 5
      colm 5
) ;_ end of setq
(vlax-put-property
  cll
  "Item"
  row
  colm
  (vl-princ-to-string
    (strcat
            "=2*(округлвверх(D"
            (itoa row)
            "/300;0)+1+округлвверх(E"
            (itoa row)
            "/300;0)+1"
    ) ;_ end of strcat
  ) ;_ end of vl-princ-to-string
) ;_ end of vlax-put-property
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 30.01.2008, 12:28
#8
doki


 
Регистрация: 17.01.2008
Сообщений: 28


и strcad не помогает
doki вне форума  
 
Непрочитано 30.01.2008, 13:10
#9
Кулик Алексей aka kpblc
Moderator

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


Меня терзают смутные подозрения, что имя функции в формуле надо прописывать английское. Было вроде такое на 97-м и 2000-м офисах (можно посмотреть, запустив запись макроса внутри Excel'a и проанализировав полученный код).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 30.01.2008, 15:17
#10
doki


 
Регистрация: 17.01.2008
Сообщений: 28


да... что-то с командой "округлвверх".... без нее все нормально записывает.... как можно ее заменить?
doki вне форума  
 
Непрочитано 30.01.2008, 16:14
#11
Кулик Алексей aka kpblc
Moderator

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


Я не смотрел лисп, у меня вопрос - а сама формула-то верно записана? Тупое копирование вызвало ошибку (пропущена скобка), и формула (представление в строке формул) должна быть такого типа (если я верно ее понял):
Код:
[Выделить все]
=2*(ОКРУГЛВВЕРХ(D5/300;0)+1+ОКРУГЛВВЕРХ(E5/300;0))+1
Для VBA-шного макроса получается нечто типа (формула вводится в ячейку F11), при использовании метода FormulaR1C1 объекта ActiveCell:
Код:
[Выделить все]
"=2*(ROUNDUP(R[-6]C[-2]/300,0)+1+ROUNDUP(R[-6]C[-1]/300,0))+1"
Можно попробовать и такое:
Код:
[Выделить все]
"=2*(ОКРУГЛВВЕРХ(D5/300;0)+1+ОКРУГЛВВЕРХ(E5/300;0))+1"
Но это уже при использовании метода FormulaLocal объекта ActiveCell.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 30.01.2008, 16:31
#12
doki


 
Регистрация: 17.01.2008
Сообщений: 28


заработала...наверно нужно было большими буквами писать.....
doki вне форума  
 
Непрочитано 30.01.2008, 16:34
#13
Кулик Алексей aka kpblc
Moderator

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


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как именно настроить параметры нового чертежа? Макс_Северянин AutoCAD 31 01.09.2010 10:16
Мониторы LCD CRT Разное 94 17.06.2008 10:51
Как в чертеже автоматически прописать полный путь? Соня AutoCAD 5 14.09.2004 16:33