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

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

Экспорт текста в Excel

Ответ
Поиск в этой теме
Непрочитано 14.11.2007, 22:04 #1
Экспорт текста в Excel
цыркуль
 
Регистрация: 14.11.2007
Сообщений: 5

доброго времени суток. есть огромное желание автоматизировать работу, а как лучше это организовать, пока темный лес. Есть проект с оборудованием, каждый элемент подписан (для подписей отдельный слой). Соответственно, необходимо, что бы в excel`e формировалась спецификация на это оборудование. Один и тот же элемент может иметь различные параметры, поэтому два одинаковых элемента с различными параметрами не должны объединяться в одну позицию. Каждый элемент имеет своё кодовое обозначение, а в скобках или через тире\дефис\любой знак указывается его параметр. К сожалению времени на самостоятельное решение этой задачи, как всегда не хватает, поэтому буду признателен за любую посильную помощь.
Просмотров: 10760
 
Непрочитано 14.11.2007, 22:36
#2
Кулик Алексей aka kpblc
Moderator

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


Поиграйся поиском и гуглом по словам "подсчет текста" и "текст в Excel".
По-моему, темы http://dwg.ru/f/showthread.php?t=11081 и http://dwg.ru/f/showthread.php?t=11591&pp=10000, а также http://dwg.ru/dnl/86 для начала подойдут.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 15.11.2007, 00:58
#3
цыркуль


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


да уж...мозг скрипит

подпись каждой железки имеет вид: XX YY-A; XX YY-B(comments); XX YY-C(comments). В спецификации эти надписи должны иметь вид: "XX YY-A такая вот штука", "XX YY-B вот такая вот штука (левая)", "XX YY-C не такая штука (красная)"
я себе представляю эту задачу следующим образом: из объекта Text в слое "Description" берем значение Contents. Соответственно оно будет выглядеть, как XX YY-A; XX YY-B(comments); XX YY-C(comments). Затем меняем эти значения на "XX YY-A такая вот штука", "XX YY-B вот такая вот штука (левая)", "XX YY-C не такая штука (красная)" и экспортируем полученный текст в Excel.
На этом пока остановлюсь. Товарищи спецы, я в нужном русле рассуждаю или есть способы проще?
цыркуль вне форума  
 
Непрочитано 15.11.2007, 13:08
#4
VVA

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


Еще посмотри здесь Уж больно формат надписей похож
Для экспорта в exell могу предложить свою ф-цию. Публиковал на caduser.ru. Опубликую здесь с подробними каментариями:
Код:
[Выделить все]
;|================== XLS ========================================
* Опубликовано http://www.caduser.ru/cgi-bin/f1/boa...19833nl&page=2
               http://www.autocad.ru/cgi-bin/f1/board.cgi?t=31371zf
               http://www.autocad.ru/cgi-bin/f1/board.cgi?t=31596eW
* Автор: Владимир Азарко aka VVA
* Назначение: Печать списка данных Data-list в Excell
*             Для вывода создается новый лист активной книги или
              создается новая книга.
              
* Аргументы:
              Data-list — список списков данных (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 — нет ("")
                           Имя получается как конкатенация Имя_рисунка + Name_list + счетчик для уникальности
* Возврат: nil
* TIPS!!! : При передачи функции xls числовых вещественных данных нет необходимости проверять текущий системный
            разделитель целой и дробной части ("HKEY_CURRENT_USER\\Control Panel\\International" "sDecimal")
            Функцией на время вывода отключается использование в Excele системного разделителя, разделителем
            целой и дробной части устанавливается точка. После завершения ф-ции все восстанавливается.
Пример вызова:
;_ 3 строки 4 столбца Столбец B скрыт
(xls '(
       (1.1 1.2 1.3 1.4)  _;1-я Строка
       (2.1 2.2 2.3 2.4)  _;2-я Строка
       (3.1 3.2 3.3 3.4)  _;3-я Строка
       )
     '("Столбец1" ;_Столбец A
       "Столбец2" ;_Столбец B
       "Столбец3" ;_Столбец C
       "Столбец4" ;_Столбец D
       )
     '("B")       ;_Скрыть столбец B
     nil          ;_Не добавлять к имени листа суффикс
) ;_ end of xls
;_ 3 строки 5 столбцов Столбец B C пустые
(xls '(   ;_Список строк Excell'a
;_ ========= 1-я Строка =======================
       (1.1    ;_Столбец A
        ""     ;_Столбец B (пропуск)
        ""     ;_Столбец C (пропуск)
        1.2    ;_Столбец D
        1.3    ;_Столбец E
        1.4    ;_Столбец F
       )  
;_ ========= 2-я Строка =======================
     (2.1    ;_Столбец A
        ""    ;_Столбец B (пропуск)
        ""    ;_Столбец C (пропуск)
        2.2    ;_Столбец D
        2.3    ;_Столбец E
        2.4    ;_Столбец F
       )
;_ ========= 3-я Строка =======================
       (3.1    ;_Столбец A
        ""    ;_Столбец B (пропуск)
        ""    ;_Столбец C (пропуск)
        3.2    ;_Столбец D
        3.3    ;_Столбец E
        3.4    ;_Столбец F
       )  
      ) ;_ Конец списка строк Excell'a
       
     '("Столбец1" ;_Столбец A
        ""
        ""
       "Столбец4" ;_Столбец D
       "Столбец5" ;_Столбец E
       "Столбец6" ;_Столбец F
       )
     nil       ;_Скрыть столбец B
     nil          ;_Не добавлять к имени листа суффикс
) ;_ end of xls
;_ 3 строки 5 столбцов Формулы
(xls '(   ;_Список строк Excell'a
;_ ========= 1-я Строка =======================
       (1.1    ;_Столбец A
        1.2    ;_Столбец B
        1.3    ;_Столбец C
        1.4    ;_Столбец D
        "=СУММ(A2:D2)" ;_Формула
       )  
;_ ========= 2-я Строка =======================
       (2.1    ;_Столбец A
        2.2    ;_Столбец B
        2.3    ;_Столбец C
        2.4    ;_Столбец D
        "=СУММ(A3:D3)" ;_Формула
       )
;_ ========= 3-я Строка =======================
       (3.1    ;_Столбец A
        3.2    ;_Столбец B
        3.3    ;_Столбец C
        3.4    ;_Столбец D
        "=СУММ(A4:D4)" ;_Формула
       )  
      ) ;_ Конец списка строк Excell'a
       
     '("Столбец1" ;_Столбец A
       "Столбец2" ;_Столбец B
       "Столбец3" ;_Столбец C
       "Столбец4" ;_Столбец D
       "Итого"    ;_Столбец E
       )
     nil       ;_Не скрывать
     nil          ;_Не добавлять к имени листа суффикс
) ;_ end of xls
(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") nil "Вариант") ;_ end of xls
(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")
     nil
     "Вариант"
) ;_ end of xls
|;
(vl-load-com)
(defun xls (Data-list      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
                  ) ;_ end of setq
                  TMP
                ) ;_ end of if
            Res (strcat (chr (+ 64 TMP)) Res)
            N   (/ N 26)
      ) ;_ end of setq
    ) ;_ end of while
    Res
  ) ;_ end of defun
  (if (null Name_list)
    (setq Name_list "")
  ) ;_ end of if
  (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")
    ) ;_ end of setq
    (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)
    ) ;_ end of setq
  ) ;_ end of if
  (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
                    ) ;_ end of strcat
                  ) ;_ end of if
        col       0
        cols      nil
  ) ;_ end of setq
  (if (> (strlen Name_list) 26)
    (setq Name_list
           (strcat (substr Name_list 1 10)
                   "..."
                   (substr Name_list (- (strlen Name_list) 13) 14)
           ) ;_ end of strcat
    ) ;_ end of setq
  ) ;_ end of if
  (vlax-for sh *Sheet-Collection*
    (setq cols (cons (strcase (vlax-get-property sh 'Name)) cols))
  ) ;_ end of vlax-for
  (setq row Name_list)
  (while (member (strcase row) cols)
    (setq row (strcat Name_list " (" (itoa (setq col (1+ col))) ")"))
  ) ;_ end of while
  (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
  ) ;_ end of setq
  (if (null header)
    (setq header '("X" "Y" "Z"))
  ) ;_ end of if
  (repeat (length header)
    (vlax-put-property
      *excell-cells*
      "Item"
      row
      col
      (vl-princ-to-string (nth (1- col) header))
    ) ;_ end of vlax-put-property
    (setq col (1+ col))
  ) ;_ end of repeat
  (setq row 2
        col 1
  ) ;_ end of setq
  (repeat (length Data-list)
    (setq iz_listo (car Data-list))
    (repeat (length iz_listo)
      (vlax-put-property
        *excell-cells*
        "Item"
        row
        col
        (vl-princ-to-string (car iz_listo))
      ) ;_ end of vlax-put-property
      (setq iz_listo (cdr iz_listo)
            col      (1+ col)
      ) ;_ end of setq
    ) ;_ end of repeat
    (setq Data-list (cdr Data-list))
    (setq col 1
          row (1+ row)
    ) ;_ end of setq
  ) ;_ end of repeat
  (setq col (1+ (length header))
        row (1+ row)
  ) ;_ end of setq
  (setq cell (vlax-variant-value
               (vlax-invoke-method
                 *Sheet#1*
                 "Evaluate"
                 (strcat "A1:" (letter col) (itoa row))
               ) ;_ end of vlax-invoke-method
             ) ;_ end of vlax-variant-value
  ) ;_ 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))
    ) ;_ end of if
    (setq cell (vlax-variant-value
                 (vlax-invoke-method
                   *Sheet#1*
                   "Evaluate"
                   (strcat item "1:" item "1")
                 ) ;_ end of vlax-invoke-method
               ) ;_ end of vlax-variant-value
    ) ;_ end of setq
    (setq cols (vlax-get-property cell 'Columns))
    (vlax-put-property cols 'hidden 1)
    (vlax-release-object cols)
    (vlax-release-object cell)
  ) ;_ end of foreach
  (vlax-put-property *AplExcel* "UseSystemSeparators" Currsep)
  (mapcar 'vlax-release-object
          (list *excell-cells*      *Sheet#1*
                *Sheet-Collection*  *New-Book*
                *Books-Colection*   *AplExcel*
               ) ;_ end of list
  ) ;_ end of mapcar
  (setq *AplExcel* nil)(gc)(gc)(princ)
) ;_ end of defun
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 15.06.2008 в 11:39.
VVA вне форума  
 
Непрочитано 15.11.2007, 13:18
#5
VVA

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


Пример экспотра в Excell с помощью ф-ции xls
Код:
[Выделить все]
;Список текстов со слоя "Description", очищенный от шелухи (comments) и соответсвий текстам
(setq data_list
       '(
         ("XX YY-A" "такая вот штука")
         ("XX YY-B" "вот такая вот штука (левая)")
         ("XX YY-C" "не такая штука (красная)")
         )
      )
;_Экспорт в Excell
(xls data_list '("Текст" "Подпись") nil "Оборудование")
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 15.11.2007, 13:26
#6
VVA

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


Для "разделки" с коментариями (comments) в текстах могу порекомандовать ф-цию Евгения Елпанова
Код:
[Выделить все]
;|
* Ф-ция str-str-lst
* Сервисная ф-ция извлечения из строки данных, разделенных
* каким либо символом или строкой символов
* Возвращает список строк
* Аргументы [Type]:
  str - строка для разбора [STRING]
  pat - разделитель [STRING]
*  Пример запуска
  (setq str "мы;изучаем;рекурсии" pat ";")
  (setq str "мы — изучаем — рекурсии" pat " — ")
  (str-str-lst str pat)
* Читать подробнее
http://www.autocad.ru/cgi-bin/f1/board.cgi?t=25113OT
|;
(defun str-str-lst (str pat / i)
  (cond ((= str "") nil)
        ((setq i (vl-string-search pat str))
         (cons (substr str 1 i)
               (str-str-lst (substr str (+ (strlen pat) 1 i)) pat)
         ) ;_  cons
        )
        (t (list str))
  ) ;_  cond
) ;_  defun
Ну и пример использования
Код:
[Выделить все]
;_Список строк
(setq str_list '("XX YY-A" "XX YY-B(comments)" "XX YY-C(comments)"))
;_Очистка от комментариев [начинаются с "("]
(vl-load-com)
(setq str_list_clear (mapcar 'car (mapcar '(lambda(x)(str-str-lst x "(")) str_list)))
Ну а собрать воедино попробуй сам
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 15.11.2007, 21:32
#7
цыркуль


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


VVA, kpbIc, большое вам спасибо, начнем разбираться.
цыркуль вне форума  
 
Непрочитано 20.11.2007, 09:31
#8
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,149


VVA, а какой командой запустить лисп, а то XLS не работает
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 20.11.2007, 09:57
#9
VVA

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


>dextron3 Ты же уже не мальчик на этом форуме. Как-никак 630 постов накропал.
В командной строке набираешь _VLIDE, далее Ctrl+N (меню Файл->Новый файл). В открывшееся окно копируешь код из №4 и №5
И жмешь на кнопку
Миниатюры
Нажмите на изображение для увеличения
Название: Capture.jpg
Просмотров: 350
Размер:	137.8 Кб
ID:	927  
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 13.06.2008, 16:09
#10
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


VVA, если не затруднит, проведите, пожалуиста, небольшой ликбез по использованию лиспов с #4 и 5. После выполнения Ваших указаний на 2008-м КАДе+2007 excel в консоли вышло сообщение:
Цитата:
_$
_$

; 4 форм загружено из #<editor "<Без имени-0> загружается...">
_$
и ничего не произошло.
На 2007 -м КАДе+excel 2003 выдал ошибку (при копировании в блокнот не распозналась кодировка, поэтому приложил скриншот).
Имею следующую цель. Есть два столбца в КАДе в виде отдельных мтекстов: 1-й текстовый, 2-й - числовой. Задача, выделив один столбец, вставить его в excel начиная с активной (выделенной) ячейки так, чтоб один примитив-мтекст (пусть даже просто текст) занимал одну ячейку. Потом выделить второй столбец и то же самое.....
Можно ли сделать это с помощью Вашего лиспа??
Заранее спасибо
Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный.jpg
Просмотров: 123
Размер:	54.0 Кб
ID:	7488  

Последний раз редактировалось skkkk, 15.06.2008 в 14:39.
skkkk вне форума  
 
Непрочитано 15.06.2008, 11:43
#11
VVA

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


Ликбез выделил в посте #4 красным.
Ф-цией xls можно экспортировать тексты в Excell, но начиная с 1-й строки 1-го столбца.
Чтобы вставить текст в excel начиная с активной (выделенной) ячейки нужно искать другой код. Здесь такой задачи не стояло.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 15.06.2008, 16:09
#12
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Цитата:
После выполнения Ваших указаний на 2008-м КАДе+2007 excel в консоли вышло сообщение:
Цитата:
_$
_$

; 4 форм загружено из #<editor "<Без имени-0> загружается...">
_$
и ничего не произошло.
это я обманул, простите.... Просто надо было подождать.

VVA, не принципиально, чтоб вставлял в активную ячейку.... Теперь мне не обойтись без ликбеза по ликбезу. Если я безнадежен, оставьте это... Вот когда начну что-то понимать.... Мало времени получается уделять изучению лиспа.

Получил в excel результат:
Столбец1 Столбец2 Столбец3 Столбец4
1.1 1.2 1.3 1.4
2.1 2.2 2.3 2.4
3.1 3.2 3.3 3.4


Думаю, правильно получилось. Но ведь для экспорта хочется выделить набор текстов рамкой. Реально это?? А пример вызова сложноват. Намного проще вбить эти тексты сразу в excel. Догадываюсь, что в двух моих предыдущих предложениях может быть немного смысла
skkkk вне форума  
 
Непрочитано 15.06.2008, 17:14
#13
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Нашел в Dounload программу на VBA, которая экспортирует тексты в excel. Файл есть, но ссылку потерял. Хорошо работает, спасибо автору. Но если выделяю рамкой мтексты, которые стоят столбиком, в excel вставляется в строку. Можно сделать как надо, но приходится поштучно тексты клацать..... Может кто знает, как переделать чтоб результат был как на скриншоте? Или как в excel преобразовать строку в столбец? Заранее спасибо
Вложения
Тип файла: rar dnl86.rar (6.8 Кб, 354 просмотров)

Последний раз редактировалось skkkk, 21.06.2013 в 00:52.
skkkk вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Экспорт текста в Excel



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Вставка в таблицу поля, соотвествующего площади примитива Profan Готовые программы 272 06.06.2021 23:12
Координаты текста из AutoCAD в Excel Rus2007 AutoCAD 11 23.10.2007 16:36
экспорт текста в Word Anton_Uz AutoCAD 9 04.10.2006 14:44
Изменение форматированного текста посредством lisp Tramp LISP 4 03.03.2006 11:28
Экспорт параметров из штампа в Excel. Как??? pro-nick AutoCAD 8 15.12.2005 16:19