明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1409|回复: 3

用LISP向EXCEL写文件的格式问题

[复制链接]
发表于 2007-7-30 11:08 | 显示全部楼层 |阅读模式

各位大侠请帮看看,以下两个程序,先用程序一得出2.XLS文件,据此格式运行程序二是可行的,但如果自已用EXCEL自已建立一个2.XLS文件则程序二不能运行,请问是什么问题???如何解决???

程序一:

(defun c:lytzbsc()
;;; 在图中向文件E:\\123\\2.xls输出选中字体角点坐标程序
  (VL-LOAD-COM)
  (setq AcadObject(vlax-get-acad-object)
        AcadDocument(vla-get-ActiveDocument AcadObject)
        mSpace(vla-get-ModelSpace AcadDocument)
  )
  (setq fp1(open "E:\\123\\2.xls" "w"))
  (setq p1(getpoint "\n请输入第一点:"))
  (setq p2(getpoint "\n请输入第二点:"))
  (setq ss(ssget "W" P1 p2))
  (SETQ t1 "text=")
  (setq a1 0)
  (setq tt1(cdr(assoc 1 (entget(ssname ss a1)))))
  (setq d1(cdr(assoc 10 (entget(ssname ss a1)))))
  (princ "\t" fp1)  (princ tt1 fp1)
  (princ "\t" fp1)  (princ "x=" fp1) 
    (princ "\t" fp1)  (princ (cadr d1) fp1)
   (princ "\t" fp1)  (princ "y=" fp1)
  (princ "\t" fp1)  (princ (car d1) fp1)
  (while  (ssname ss (+ a1 1))
    (setq a1 (+ a1 1))
    (setq tt1 (cdr (assoc 1 (entget(ssname ss a1)))))
     (setq d1 (cdr (assoc 10 (entget(ssname ss a1)))))
    (print t1 fp1)
      (princ "\t" fp1)  (princ tt1 fp1)
  (princ "\t" fp1)  (princ "x=" fp1)
       (princ "\t" fp1)  (princ (cadr d1) fp1)
   (princ "\t" fp1)  (princ "y=" fp1)
  (princ "\t" fp1)  (princ (car d1) fp1)
    )
  (close fp1)
 
 )

程序二:

(defun c:lytm()
  (VL-LOAD-COM)
  (setq AcadObject(vlax-get-acad-object)
        AcadDocument(vla-get-ActiveDocument AcadObject)
        mSpace(vla-get-ModelSpace AcadDocument)
  )
  (setq fp1(open "E:\\123\\2.xls" "r"))
  (setq p1 (getpoint "\n请输入点:"))
  (command "dtext" "j" "bl" p1 20 0)
  (setq a1 (read-line fp1))(print a1)
  (while a1
    (setq  n 1)
    (setq m 0)
    (setq bb (strlen a1))      
    (repeat bb
      (if (= (substr a1 n 1) "\t") 
   (progn
      (if (= m 4)
           (progn (setq b5 n) (setq m (+ m 1))  ))
      (if (= m 3)
           (progn (setq b4 n) (setq m (+ m 1)) ))
             (if (= m 2)
           (progn (setq b3 n) (setq m (+ m 1)) ))
             (if (= m 1)
           (progn (setq b2 n) (setq m (+ m 1)) ))
             (if (= m 0)
         (progn (setq b1 n) (setq m (+ m 1)) ))      
       ))
        (setq n (+ n 1))
        )
    )
        (setq p2 (list (float (atof(substr a1 (+ b5 1) (- bb b5))))
         (float (atof(substr a1 (+ b3 1) (- b4 b3)))) 0.0))
        (setq ttt2 (substr a1 (+ b1 1) (- b2 b1 )))
        (command "copy" "l" "" p1 p2)
       (setq tt2 (entget(entlast)))  
       (setq tt2 (subst (cons 1 ttt2) (assoc 1 tt2) tt2))   
       (entmod tt2) 
       (setq p1 p2)
       (setq a1 (read-line fp1))
       )
       (close fp1)
      )

 楼主| 发表于 2007-7-30 11:13 | 显示全部楼层

不好意思,上面说得不够清楚,程序一是在一个只有文字的图层中,并关闭其他图层的环境中运行的.

发表于 2007-8-6 15:48 | 显示全部楼层

问题是你的程序1生成的其实是一个文本文件,当然程序2能够正确读取;而用microsoft Excel应用程序创建的.XLS文件为二进制文件,无法用read-line函数读取,必须通过外部链接方式打开并读取,即所谓的用Active-com方式才能解决。

哈哈哈,你的思路错了

 楼主| 发表于 2007-8-9 12:06 | 显示全部楼层
谢谢上楼的帮忙,但什么是Active-com方式,用LISP不能解决这个问题吗???
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-18 13:45 , Processed in 0.199720 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表