Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Jin Yong

Hỏi về Lisp (thuật toán, ý tưởng, coding,...)

Các bài được khuyến nghị

ketxu    2.649

Không phải bác hạ ạ. File tạo bằng phương thức Open có thể là bất kỳ đuôi gì. Cái tạo nên loại file cho nó là cách mình đổ dữ liệu cơ ^^

Với đoạn code trên của bác thì file chưa được tạo

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tue_NV    3.841

Không phải bác hạ ạ. File tạo bằng phương thức Open có thể là bất kỳ đuôi gì. Cái tạo nên loại file cho nó là cách mình đổ dữ liệu cơ ^^

Với đoạn code trên của bác thì file chưa được tạo

Đoạn này : (setq pw (open "C:\\a.xls" "w")) (close pw))

thì file đã được tạo rồi

 

Cái kiểu này giống như file có đuôi txt mà ta đi sửa lại thành xls trong Win vậy

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Doan Van Ha    2.676

Ngộ nhỉ!

(setq pw (open "C:\\a.xls" "w")) (close pw)) thì không thấy file "a.xls" ở trong C

(setq pw (open "D:\\a.xls" "w")) (close pw)) thì thấy file "a.xls" ở trong D

Nhưng dù có thấy thì bản chất thật sự cũng không phải là file excel.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
ketxu    2.649

Ketxu đã viết nhiều ứng dụng xuất ra Excel bằng cách này không vấn đề gì, nên khái niệm "bản chất thực sự k phải Excel" là như thế nào thật ket k hiểu ^^ :) Nếu không thì bác sử dụng method New của Excell Application Object xem sao ?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Doan Van Ha    2.676

Ket ơi!

1). Đã thử ngâm cứu method New của Excell Application Object mà đang bí.

2). Tạo file theo kiểu (setq pw (open "D:\\a.xls" "w")) (close pw)) thì file "a.xls" về bản chất nó là Text (Tab delimited) chứ không phải Excel. Sau khi tạo xong, Ket mở nó ra rồi lưu lại thì sẽ thấy nó lòi "bộ mặt thật" lên ngay. Mà bác thì đang muốn 1 file excel thực sự vì còn nhiều vấn đề sau đó nữa.

3). Và tại sao thêm cái này khó hiểu nữa (đã hỏi ở trên):

(setq pw (open "C:\\a.xls" "w")) (close pw)) thì không thấy file "a.xls" ở trong C

(setq pw (open "D:\\a.xls" "w")) (close pw)) thì thấy file "a.xls" ở trong D

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
ketxu    2.649

Theo cháu thì

1+2 . Vậy thì khó đây ^^ Bác nghiên cứu cách dùng trong lisp excel của Terry nhé

3 : chắc do hàm open bác ạ ^^

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
ThuyLinh313    146

Làm sao để tạo 1 file Excel mới với tên kèm path cho trước, bằng lisp?

File này bản chất phải là xls chứ không phải csv.

Ai biết xin chỉ giùm.

Bạn tham khảo lisp này, hàm Openexcel http://web2.airmail.net/terrycad/LISP/GetExcel.lsp

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Doan Van Ha    2.676

Ái dà! Đang nghiên cứu hàm của Terry Miller đây, mà vẫn bí.

@ThuyLinh313: cám ơn bạn. Tớ đang nghiên cứu chính nó đây, mà chưa tìm ra.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tue_NV    3.841

Ái dà! Đang nghiên cứu hàm của Terry Miller đây, mà vẫn bí.

@ThuyLinh313: cám ơn bạn. Tớ đang nghiên cứu chính nó đây, mà chưa tìm ra.

Code đây bác :

Hàm creat file Excel :

(CRE "C:\\Tue_NV.xls")

(defun cre(exf / saveas xlCells xlApp)
 ;;;ex: (Cre "C:\\Tue_NV.xls")
 (defun saveas (xlApp f)
(vlax-invoke-method (vlax-get-property xlApp "ActiveWorkbook")
 	"SaveAs" f -4143 "" "" :vlax-false :vlax-false nil)
 )
 (setq xlApp (vlax-get-or-create-object "Excel.Application")
   xlCells (vlax-get-property
         (vlax-get-property
       	(vlax-get-property
         	(vlax-invoke-method
           (vlax-get-property xlApp "Workbooks")
           "Add")
         	"Sheets")
       	"Item" 1)
         "Cells"))
(vlax-put-property xlCells 'Item 1 1 "")
(vla-put-visible xlApp :vlax-true)
(if (findfile exf)
  (progn (initget "Y N") (setq key (getkword "Tep da co. Luu de Y/N ?"))
     	(if (= key "Y") (saveas xlApp exf))
  )
  (saveas xlApp exf)
)
 (vlax-invoke-method (vlax-get-property xlapp "ActiveWorkbook") 'Close :vlax-true)
 (vlax-invoke-method xlapp 'Quit)

(mapcar
(function (lambda (x)
       (vl-catch-all-apply
         (function (lambda ()(if x (vlax-release-object x)))))))
(list xlCells xlApp))
 (gc) (gc)
)

  • Vote tăng 3

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
TRUNGNGAMY    91

(setq pw (open "C:\\a.xls" "w")) (close pw)) thì không thấy file "a.xls" ở trong C

Cái này mình nghĩ do vđ bảo mật, từ winxp trở về trước thì bình thường. các win sau này kg cho những hàm open thông thường ghi file vào đĩa hệ thống có lẽ nghi virus. Viết trên VC++ và Delphi cũng bị như vậy. Có lẽ nó cần xin phép hệ thống mới đc nhưng mình cũng chưa biết xin phép như thế nào. Mình nghĩ vậy, kg biết đúng kg

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tue_NV    3.841

Cái này mình nghĩ do vđ bảo mật, từ winxp trở về trước thì bình thường. các win sau này kg cho những hàm open thông thường ghi file vào đĩa hệ thống có lẽ nghi virus. Viết trên VC++ và Delphi cũng bị như vậy. Có lẽ nó cần xin phép hệ thống mới đc nhưng mình cũng chưa biết xin phép như thế nào. Mình nghĩ vậy, kg biết đúng kg

Máy Laptop của Tue_NV dùng Win7 : sử dụng (setq pw (open "C:\\a.xls" "w")) (close pw)) thì thấy file "a.xls" ở trong C

Máy cơ quan sử dụng Winxp cũng thấy file "a.xls" ở trong C

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
t031285    1

Các bác cho e hỏi trong đoạn lisp dưới đây:

(Defun c:Tmu (/ d1 d2 d3 d4);(THEPSAN) (setvar "angbase" 0) ;(setvar "clayer" ....) (command "ortho" "on") (setq d1 (getpoint "\nDiem thu nhat:")) (setq d2 (getpoint d1"\nDiem thu hai:")) (setq goc (angle d1 d2)) (setvar "osmode" 0) (setq d3 (POLAR d1 (+ goc (/ pi 2)) 3)) (setq d4 (polar d3 goc (distance d1 d2))) (Command "_.pline" d1 d3 d4 d2 "" ) (setvar "osmode" 641) (princ) )

Đoạn :

(Command "_.pline" d1 d3 d4 d2 "" )

là vẽ đoạn thẳng bằng polyline.Nay nếu vẽ đoạn này bằng line thì khi vẽ xong thêm dòng lệnh nào để join chúng lại?Thanks.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
t031285    1

Mỗi một lần command bạn sẽ lấy lại ename đối tượng vừa tạo bằng (entlast), cho vào trong một list ename rồi sau đó làm gì tùy bạn

Mình không hiểu.

Đoạn : (Command "_.pline" d1 d3 d4 d2 "" ) nếu sửa thành :

(Command "line" d1 d3 d4 d2 "" ) thì nó sẽ vẽ hình dạng này là các đường line tạo thành 1 hình.Giờ thêm đoạn gì để nó JOIN các line này thành một.Thanks.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
AutocadLisp    4

Mình k có CAD ở đây, nói qua thế này nhé :

Bạn thêm dòng (setq e (entlast)) trước dòng command

Sau dòng command thì thêm (while (setq e (entnext e))(setq lstName (cons e lstName)))

lstName là danh sách toàn bộ các ename của các Line bạn vừa tạo ra

Sau đó bạn dùng command pedit để join các Line này lại. Cách viết command Pedit ra sao thì bạn nên thực hiện thử để tìm.

Có thể là (command "pedit" "m" (acet-list-to-ss lstName) "" "" "j" "0" "" "") hoặc gần như vậy, mình k nhớ chính xác (còn phụ thuộc biến peditaccept của bạn nữa)

Ngoài ra, thay vì cho tất cả vòa list lstName, bạn cũng có thể dùng ssadd e để tạo luôn tập chọn.

Chưa biết khả năng lisp của bạn, nên mình phác ra vậy, bạn nên thử tìm hiểu trước nhé, Không được thì hỏi tiếp, các bác trên này sẽ giúp bạn

 

P/s : có 1 điều lạ là khi nối vào nó sẽ thành Pline, không khác gì dùng Pline, vậy mục đích của bạn là gì ?? Bạn thích trèo qua đỉnh chứ k đi hầm xuyên núi à ?

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
hugo75    4

Hugo007 thử đổi thành "VHELVCN_0.TTF" xem có lỗi không. Tôi cũng có font "VHELVCN.TTF" nhưng vẫn lỗi. Sửa lại "VHELVCN_0.TTF" thì không lỗi, nhưng chưa tìm ra nguyên nhân vì sao.

Bác Ha ơi mình cũng bị lỗi như vậy sau khi vào trong thư mục font của cad đổi tên VHELVCN.TTF thành VHELVCN_0.TTF khi vào cad nó vẫn báo là font không tồn tại.

Specify full font name or font filename (TTF or SHX) <txt>: VHELVCN.TTF

Font file doesn't exist.

Bác có cách nào giúp e với.Thanks.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Doan Van Ha    2.676

Bác Ha ơi mình cũng bị lỗi như vậy sau khi vào trong thư mục font của cad đổi tên VHELVCN.TTF thành VHELVCN_0.TTF khi vào cad nó vẫn báo là font không tồn tại.

Specify full font name or font filename (TTF or SHX) <txt>: VHELVCN.TTF

Font file doesn't exist.

Bác có cách nào giúp e với.Thanks.

Bạn up bản vẽ lên xem nhé! Hugo007 và Hugo75 bà con nhau à?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Code đây bác :

Hàm creat file Excel :

(CRE "C:\\Tue_NV.xls")

(defun cre(exf / saveas xlCells xlApp)
 ;;;ex: (Cre "C:\\Tue_NV.xls")
 (defun saveas (xlApp f)
(vlax-invoke-method (vlax-get-property xlApp "ActiveWorkbook")
 	"SaveAs" f -4143 "" "" :vlax-false :vlax-false nil)
 )
 (setq xlApp (vlax-get-or-create-object "Excel.Application")
   xlCells (vlax-get-property
         (vlax-get-property
       	(vlax-get-property
         	(vlax-invoke-method
           (vlax-get-property xlApp "Workbooks")
           "Add")
         	"Sheets")
       	"Item" 1)
         "Cells"))
(vlax-put-property xlCells 'Item 1 1 "")
(vla-put-visible xlApp :vlax-true)
(if (findfile exf)
  (progn (initget "Y N") (setq key (getkword "Tep da co. Luu de Y/N ?"))
     	(if (= key "Y") (saveas xlApp exf))
  )
  (saveas xlApp exf)
)
 (vlax-invoke-method (vlax-get-property xlapp "ActiveWorkbook") 'Close :vlax-true)
 (vlax-invoke-method xlapp 'Quit)

(mapcar
(function (lambda (x)
       (vl-catch-all-apply
         (function (lambda ()(if x (vlax-release-object x)))))))
(list xlCells xlApp))
 (gc) (gc)
)

bác Tue ơi, cái này dùng để gọi file .xls? vậy em muốn gọi 1 file .xls có trong ổ C thì lệnh là CRE?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tue_NV    3.841

bác Tue ơi, cái này dùng để gọi file .xls? vậy em muốn gọi 1 file .xls có trong ổ C thì lệnh là CRE?

Cái đó là tạo 1 file excell mới toanh trong ổ C theo câu hỏi của bác DoanVanHa

Còn gọi file .xls, tức là kêu file excell ra thì dùng cái này :

 

(if (findfile "C:\\Tue_NV.xls") (command "ai_editcustfile" "C:\\Tue_NV.xls"))

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
TRUNGNGAMY    91

Bác Ha ơi mình cũng bị lỗi như vậy sau khi vào trong thư mục font của cad đổi tên VHELVCN.TTF thành VHELVCN_0.TTF khi vào cad nó vẫn báo là font không tồn tại.

Specify full font name or font filename (TTF or SHX) <txt>: VHELVCN.TTF

Font file doesn't exist.

Bác có cách nào giúp e với.Thanks.

Nên dùng cái tên hệ thống đặt cho nó. Thay vì viết VHELVCN.TTF hay hay VHELVCN_0.TTF bạn hãy dùng VNI-Helve-Condense

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Cái đó là tạo 1 file excell mới toanh trong ổ C theo câu hỏi của bác DoanVanHa

Còn gọi file .xls, tức là kêu file excell ra thì dùng cái này :

 

(if (findfile "C:\\Tue_NV.xls") (command "ai_editcustfile" "C:\\Tue_NV.xls"))

vậy phải thêm (Defun c: Tue () (if (findfile "C:\\Tue_NV.xls") (command "ai_editcustfile" "C:\\Tue_NV.xls")))

vào đây nữa phải không bác mà em gọi Tue_NV.xls đã tạo sẵn trong ổ C mà gọi không được, nó báo nil

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tue_NV    3.841

vậy phải thêm (Defun c: Tue () (if (findfile "C:\\Tue_NV.xls") (command "ai_editcustfile" "C:\\Tue_NV.xls")))

vào đây nữa phải không bác mà em gọi Tue_NV.xls đã tạo sẵn trong ổ C mà gọi không được, nó báo nil

Chú ý trước (Defun c: thì không có khoảng trắng. Bạn viết có khoảng trắng rồi đấy

Dòng

(Defun c:Tue () (if (findfile "C:\\Tue_NV.xls") (command "ai_editcustfile" "C:\\Tue_NV.xls")))

gọi file Tue_NV.xls ra bình thường.

Giờ ý bạn muốn thêm là thêm tên lệnh à?

Thêm tên lệnh thì như trên là ok

 

Hoặc có 1 điều nữa là lệnh "ai_editcustfile" trong máy bạn sử dụng không được

Bạn thử lệnh "ai_editcustfile" trong máy của bạn chưa? Có hoạt động không?

Nếu không hoạt động thì mình sẽ viết kiểu khác, không dùng command nữa

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

à đúng rồi, tại em cứ gõ như tiếng việt nên sau dấu : là phải cách cho nên mới sai. nhưng mà em dùng lệnh

Command: ai_editcustfile

Custom File to edit:

File could not be found.

nó vẫn chạy mà sao dùng:

Command: tue

nil (vẫn báo mà không hiện gì cả)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay


×