Đến nội dung


Hình ảnh
- - - - -

Kết hợp Excel-AutoLisp-AutoCAD


  • Please log in to reply
60 replies to this topic

#41 tuananhcmd

tuananhcmd

    biết zoom

  • Members
  • Pip
  • 10 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 05 February 2009 - 04:35 PM

còn đây là code của get_xl

;|
GET_XL.LSP
Created by Elpanov Evgeniy
842@list.ru
elpanov@gmail.com

Data reading from Microsoft Excel not using Excel.
This code, can read diverse data from all tables.

ARGUMENTS:
A string containing a complete file name, including the path.
(setq tbl "D:\\7.xls")

USAGE:
(GET_xl tbl)

RETURN VFALUES
The list of all pages in a file with all data
|;
(defun rec-rem-dupl (lst)
(if lst
(cons (car lst) (rec-rem-dupl (vl-remove (car lst) (cdr lst))))
) ;_ if
) ;_ defun
(defun GET_xl (tbl / ADOCONNECT ADORECORDSET LST)
(setq
ADOConnect (vlax-get-or-create-object "ADODB.Connection")
ADORecordset (vlax-get-or-create-object "ADODB.Recordset")
) ;_ setq
(if (not
(vl-catch-all-error-p
(vl-catch-all-apply
(function vlax-invoke-method)
(list
ADOConnect
"Open"
(strcat
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
tbl
";Extended Properties=;Excel 8.0;HDR=No"
) ;_ strcat
"admin"
""
nil
) ;_ list
) ;_ vl-catch-all-apply
) ;_ vl-catch-all-error-p
) ;_ not
(progn
(setq
lst (mapcar
(function
(lambda (l / i c)
(vlax-invoke-method
ADORecordset
"Open"
(strcat "SELECT * FROM [" l "]")
ADOConnect
1
3
nil
) ;_ vlax-invoke-method
(setq
i (length
(car
(vlax-safearray->list
(vlax-variant-value
(vlax-invoke-method
ADORecordset
"GetRows"
65535
) ;_ vlax-invoke-method
) ;_ vlax-variant-value
) ;_ vlax-safearray->list
) ;_ car
) ;_ length
) ;_ setq
(vlax-invoke-method ADORecordset "Close")
(while (not (zerop i))
(vlax-invoke-method
ADORecordset
"Open"
(strcat "SELECT * FROM [" l "a" (itoa i) ":IV" (itoa i) "]")
ADOConnect
1
3
nil
) ;_ vlax-invoke-method
(setq
c (cons
(car
(apply
(function mapcar)
(cons
'list
(mapcar
(function
(lambda (a)
(mapcar
(function
(lambda (:cheers:
(vlax-variant-value :cheers:
) ;_ lambda
) ;_ function
a
) ;_ mapcar
) ;_ lambda
) ;_ function
(vlax-safearray->list
(vlax-variant-value
(vlax-invoke-method
ADORecordset
"GetRows"
65535
) ;_ vlax-invoke-method
) ;_ vlax-variant-value
) ;_ vlax-safearray->list
) ;_ mapcar
) ;_ cons
) ;_ apply
) ;_ car
c
) ;_ cons
i (1- i)
) ;_ setq
(vlax-invoke-method ADORecordset "Close")
) ;_ while
(if (equal c '((nil) (nil)))
(list l)
(cons l c)
) ;_ if
) ;_ lambda
) ;_ function
(rec-rem-dupl
(caddr
(mapcar
(function
(lambda (a)
(mapcar
(function vlax-variant-value)
a
) ;_ mapcar
) ;_ lambda
) ;_ function
(vlax-safearray->list
(vlax-variant-value
(vlax-invoke-method
(vlax-invoke-method
ADOConnect
"OpenSchema"
4
) ;_ vlax-invoke-method
"GetRows"
65535
) ;_ vlax-invoke-method
) ;_ vlax-variant-value
) ;_ vlax-safearray->list
) ;_ apply
) ;_ caddr
) ;_ rec-rem-dupl
) ;_ mapcar
) ;_ setq
(vlax-invoke-method ADOConnect "Close")
(vlax-release-object ADORecordset)
(vlax-release-object ADOConnect)
(setq ADORecordset nil
ADOConnect nil
) ;_ setq
lst
) ;_ progn
(progn
(vl-catch-all-apply
'vlax-invoke-method
(list ADOConnect "Close")
) ;_ vl-catch-all-apply
(vlax-release-object ADORecordset)
(vlax-release-object ADOConnect)
(setq ADORecordset nil
ADOConnect nil
) ;_ setq
nil
) ;_ progn
) ;_ if
) ;_ defun
;|
GET_XL.LSP
Created by Elpanov Evgeniy
842@list.ru
elpanov@gmail.com

Data reading from Microsoft Excel not using Excel.
This code, can read diverse data from all tables.

ARGUMENTS:
A string containing a complete file name, including the path.
(setq tbl "D:\\7.xls")

USAGE:
(GET_xl tbl)

RETURN VFALUES
The list of all pages in a file with all data
|;
(defun rec-rem-dupl (lst)
(if lst
(cons (car lst) (rec-rem-dupl (vl-remove (car lst) (cdr lst))))
) ;_ if
) ;_ defun
(defun GET_xl (tbl / ADOCONNECT ADORECORDSET LST)
(setq
ADOConnect (vlax-get-or-create-object "ADODB.Connection")
ADORecordset (vlax-get-or-create-object "ADODB.Recordset")
) ;_ setq
(if (not
(vl-catch-all-error-p
(vl-catch-all-apply
(function vlax-invoke-method)
(list
ADOConnect
"Open"
(strcat
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
tbl
";Extended Properties=;Excel 8.0;HDR=No"
) ;_ strcat
"admin"
""
nil
) ;_ list
) ;_ vl-catch-all-apply
) ;_ vl-catch-all-error-p
) ;_ not
(progn
(setq
lst (mapcar
(function
(lambda (l / i c)
(vlax-invoke-method
ADORecordset
"Open"
(strcat "SELECT * FROM [" l "]")
ADOConnect
1
3
nil
) ;_ vlax-invoke-method
(setq
i (length
(car
(vlax-safearray->list
(vlax-variant-value
(vlax-invoke-method
ADORecordset
"GetRows"
65535
) ;_ vlax-invoke-method
) ;_ vlax-variant-value
) ;_ vlax-safearray->list
) ;_ car
) ;_ length
) ;_ setq
(vlax-invoke-method ADORecordset "Close")
(while (not (zerop i))
(vlax-invoke-method
ADORecordset
"Open"
(strcat "SELECT * FROM [" l "a" (itoa i) ":IV" (itoa i) "]")
ADOConnect
1
3
nil
) ;_ vlax-invoke-method
(setq
c (cons
(car
(apply
(function mapcar)
(cons
'list
(mapcar
(function
(lambda (a)
(mapcar
(function
(lambda (:s_big:
(vlax-variant-value B)
) ;_ lambda
) ;_ function
a
) ;_ mapcar
) ;_ lambda
) ;_ function
(vlax-safearray->list
(vlax-variant-value
(vlax-invoke-method
ADORecordset
"GetRows"
65535
) ;_ vlax-invoke-method
) ;_ vlax-variant-value
) ;_ vlax-safearray->list
) ;_ mapcar
) ;_ cons
) ;_ apply
) ;_ car
c
) ;_ cons
i (1- i)
) ;_ setq
(vlax-invoke-method ADORecordset "Close")
) ;_ while
(if (equal c '((nil) (nil)))
(list l)
(cons l c)
) ;_ if
) ;_ lambda
) ;_ function
(rec-rem-dupl
(caddr
(mapcar
(function
(lambda (a)
(mapcar
(function vlax-variant-value)
a
) ;_ mapcar
) ;_ lambda
) ;_ function
(vlax-safearray->list
(vlax-variant-value
(vlax-invoke-method
(vlax-invoke-method
ADOConnect
"OpenSchema"
4
) ;_ vlax-invoke-method
"GetRows"
65535
) ;_ vlax-invoke-method
) ;_ vlax-variant-value
) ;_ vlax-safearray->list
) ;_ apply
) ;_ caddr
) ;_ rec-rem-dupl
) ;_ mapcar
) ;_ setq
(vlax-invoke-method ADOConnect "Close")
(vlax-release-object ADORecordset)
(vlax-release-object ADOConnect)
(setq ADORecordset nil
ADOConnect nil
) ;_ setq
lst
) ;_ progn
(progn
(vl-catch-all-apply
'vlax-invoke-method
(list ADOConnect "Close")
) ;_ vl-catch-all-apply
(vlax-release-object ADORecordset)
(vlax-release-object ADOConnect)
(setq ADORecordset nil
ADOConnect nil
) ;_ setq
nil
) ;_ progn
) ;_ if
) ;_ defun

  • 0

#42 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 05 February 2009 - 04:43 PM

tôi hiểu cách sử dụng của nó rồi
cái mà tôi muốn hỏi là nếu dùng theo cách này thì không đưa dữ liệu từ exel vào lispvariable nguyên vẹn được:
chẳng hạn trên exel là:
tiểu khu
thì lispvariable là:
ti?u khu
và tôi ko có cách nào để lấy nguyên nó được

Ssg đã thử, kết quả nhận được từ function GetCell chẳng hạn. Trong TextWindow của Acad có thể loằng ngoằng, nhưng dùng giá trị của variable để thể hiện ra đối tượng Text thì vẫn "dấu má" đầy đủ. Bạn thử lại đi, nếu vẫn không được, ssg sẽ post file đã làm ví dụ cho bạn xem.
  • 0

#43 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 05 February 2009 - 04:56 PM

Bạn thử đoạn code và file *.xls này, chọn font trong Cad là vnsimple.shx (và nói chung là dòng họ TCVN3-ABC):


;;;---------------------------------------------------------------------
(defun wtxt (txt p / sty d h) ;;;Write txt on graphic screen, defaul setting
(setq
sty (getvar "textstyle")
d (tblsearch "style" sty)
h (cdr (assoc 40 d))
)
(if (= h 0) (setq h (cdr (assoc 42 d))))
(entmake
(list (cons 0 "TEXT") (cons 7 sty) (cons 1 txt) (cons 10 p) (cons 40 h) (assoc 41 d))
)
)
;;;---------------------------------------------------------------------
(defun C:VD()
(vl-load-com)
(setq fn (getfiled "Select Excel File" "" "xls" 0))
(getexcel fn "sheet1" "C15")
(setq x (getcell "C8"))
(wtxt x (getpoint "\nChon diem dat text lay tu cell C8:"))
)
;;;---------------------------------------------------------------------


http://www.cadviet.c...iles/vidu_1.zip

Kết quả
Nội dung cell C8 hiện ra đầy đủ dấu tiếng Việt. Nếu bạn thử không được có nghĩa là System hoặc Cad của bạn "có vấn đề"!
  • 0

#44 tuananhcmd

tuananhcmd

    biết zoom

  • Members
  • Pip
  • 10 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 05 February 2009 - 05:41 PM

sgs nói đúng
tôi dùng .VnArial thì tất cả ngon rồi
giờ đang tìm cách đưa các font khác về .Vnarial
sgs có hiểu lí do của việc buộc fải dùng .Vnarial ko?
  • 0

#45 Phiphi-

Phiphi-

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 434 Bài viết
Điểm đánh giá: 175 (tàm tạm)

Đã gửi 05 February 2009 - 06:17 PM

Các đoạn code này PP thấy trong trang http://web2.airmail.net/terrycad , ngoài ra còn có nhiều CODE khác nữa. Hope this help.
;-------------------------------------------------------------------------------
; Program Name: GetExcel.lsp [GetExcel R4]
; Created By: Terry Miller (Email: terrycadd@yahoo.com)
; (URL: [url="http://web2.airmail.net/terrycad)"]http://web2.airmail.net/terrycad)[/url]
; Date Created: 9-20-03
; Function: Several functions to get and put values into Excel cells.
;-------------------------------------------------------------------------------
; Revision History
; Rev By Date Description
;-------------------------------------------------------------------------------
; 1 TM 9-20-03 Initial version
; 2 TM 8-20-07 Rewrote GetExcel.lsp and added several new sub-functions
; including ColumnRow, Alpha2Number and Number2Alpha written
; by Gilles Chanteau from Marseille, France.
; 3 TM 12-1-07 Added several sub-functions written by Gilles Chanteau
; including Cell-p, Row+n, and Column+n. Also added his
; revision of the PutCell function.
; 4 GC 9-20-08 Revised the GetExcel argument MaxRange$ to accept a nil
; and get the current region from cell A1.
;-------------------------------------------------------------------------------
; Overview of Main functions
;-------------------------------------------------------------------------------
; GetExcel - Stores the values from an Excel spreadsheet into *ExcelData@ list
; Syntax: (GetExcel ExcelFile$ SheetName$ MaxRange$)
; Example: (GetExcel "C:\\Folder\\Filename.xls" "Sheet1" "L30")
; GetCell - Returns the cell value from the *ExcelData@ list
; Syntax: (GetCell Cell$)
; Example: (GetCell "H15")
; Function example of usage:
; (defun c:Get-Example ()
; (GetExcel "C:\\Folder\\Filename.xls" "Sheet1" "L30");<-- Edit Filename.xls
; (GetCell "H21");Or you can just use the global *ExcelData@ list
; );defun
;-------------------------------------------------------------------------------
; OpenExcel - Opens an Excel spreadsheet
; Syntax: (OpenExcel ExcelFile$ SheetName$ Visible)
; Example: (OpenExcel "C:\\Folder\\Filename.xls" "Sheet1" nil)
; PutCell - Put values into Excel cells
; Syntax: (PutCell StartCell$ Data$) or (PutCell StartCell$ DataList@)
; Example: (PutCell "A1" (list "GP093" 58.5 17 "Base" "3'-6 1/4\""))
; CloseExcel - Closes Excel session
; Syntax: (CloseExcel ExcelFile$)
; Example: (CloseExcel "C:\\Folder\\Filename.xls")
; Function example of usage:
; (defun c:Put-Example ()
; (OpenExcel "C:\\Folder\\Filename.xls" "Sheet1" nil);<-- Edit Filename.xls
; (PutCell "A1" (list "GP093" 58.5 17 "Base" "3'-6 1/4\""));Repeat as required
; (CloseExcel "C:\\Folder\\Filename.xls");<-- Edit Filename.xls
; (princ)
; );defun
;-------------------------------------------------------------------------------
; Note: Review the conditions of each argument in the function headings
;-------------------------------------------------------------------------------
; GetExcel - Stores the values from an Excel spreadsheet into *ExcelData@ list
; Arguments: 3
; ExcelFile$ = Path and filename
; SheetName$ = Sheet name or nil for not specified
; MaxRange$ = Maximum cell ID range to include or nil to get the current region from cell A1
; Syntax examples:
; (GetExcel "C:\\Temp\\Temp.xls" "Sheet1" "E19") = Open C:\Temp\Temp.xls on Sheet1 and read up to cell E19
; (GetExcel "C:\\Temp\\Temp.xls" nil "XYZ123") = Open C:\Temp\Temp.xls on current sheet and read up to cell XYZ123
;-------------------------------------------------------------------------------
(defun GetExcel (ExcelFile$ SheetName$ MaxRange$ / Column# ColumnRow@ Data@ ExcelRange^
ExcelValue ExcelValue ExcelVariant^ MaxColumn# MaxRow# Range$ Row# Worksheet)
(if (= (type ExcelFile$) 'STR)
(if (not (findfile ExcelFile$))
(progn
(alert (strcat "Excel file " ExcelFile$ " not found."))
(exit)
);progn
);if
(progn
(alert "Excel file not specified.")
(exit)
);progn
);if
(gc)
(if (setq *ExcelApp% (vlax-get-object "Excel.Application"))
(progn
(alert "Close all Excel spreadsheets to continue!")
(vlax-release-object *ExcelApp%)(gc)
);progn
);if
(setq ExcelFile$ (findfile ExcelFile$))
(setq *ExcelApp% (vlax-get-or-create-object "Excel.Application"))
(vlax-invoke-method (vlax-get-property *ExcelApp% 'WorkBooks) 'Open ExcelFile$)
(if SheetName$
(vlax-for Worksheet (vlax-get-property *ExcelApp% "Sheets")
(if (= (vlax-get-property Worksheet "Name") SheetName$)
(vlax-invoke-method Worksheet "Activate")
);if
);vlax-for
);if
(if MaxRange$
(progn
(setq ColumnRow@ (ColumnRow MaxRange$))
(setq MaxColumn# (nth 0 ColumnRow@))
(setq MaxRow# (nth 1 ColumnRow@))
);progn
(progn
(setq CurRegion (vlax-get-property (vlax-get-property
(vlax-get-property *ExcelApp% "ActiveSheet") "Range" "A1") "CurrentRegion")
);setq
(setq MaxRow# (vlax-get-property (vlax-get-property CurRegion "Rows") "Count"))
(setq MaxColumn# (vlax-get-property (vlax-get-property CurRegion "Columns") "Count"))
);progn
);if
(setq *ExcelData@ nil)
(setq Row# 1)
(repeat MaxRow#
(setq Data@ nil)
(setq Column# 1)
(repeat MaxColumn#
(setq Range$ (strcat (Number2Alpha Column#)(itoa Row#)))
(setq ExcelRange^ (vlax-get-property *ExcelApp% "Range" Range$))
(setq ExcelVariant^ (vlax-get-property ExcelRange^ 'Value))
(setq ExcelValue (vlax-variant-value ExcelVariant^))
(setq ExcelValue
(cond
((= (type ExcelValue) 'INT) (itoa ExcelValue))
((= (type ExcelValue) 'REAL) (rtosr ExcelValue))
((= (type ExcelValue) 'STR) (vl-string-trim " " ExcelValue))
((/= (type ExcelValue) 'STR) "")
);cond
);setq
(setq Data@ (append Data@ (list ExcelValue)))
(setq Column# (1+ Column#))
);repeat
(setq *ExcelData@ (append *ExcelData@ (list Data@)))
(setq Row# (1+ Row#))
);repeat
(vlax-invoke-method (vlax-get-property *ExcelApp% "ActiveWorkbook") 'Close :vlax-False)
(vlax-invoke-method *ExcelApp% 'Quit)
(vlax-release-object *ExcelApp%)(gc)
(setq *ExcelApp% nil)
*ExcelData@
);defun GetExcel
;-------------------------------------------------------------------------------
; GetCell - Returns the cell value from the *ExcelData@ list
; Arguments: 1
; Cell$ = Cell ID
; Syntax example: (GetCell "E19") = value of cell E19
;-------------------------------------------------------------------------------
(defun GetCell (Cell$ / Column# ColumnRow@ Return Row#)
(setq ColumnRow@ (ColumnRow Cell$))
(setq Column# (1- (nth 0 ColumnRow@)))
(setq Row# (1- (nth 1 ColumnRow@)))
(setq Return "")
(if *ExcelData@
(if (and (>= (length *ExcelData@) Row#)(>= (length (nth 0 *ExcelData@)) Column#))
(setq Return (nth Column# (nth Row# *ExcelData@)))
);if
);if
Return
);defun GetCell
;-------------------------------------------------------------------------------
; OpenExcel - Opens an Excel spreadsheet
; Arguments: 3
; ExcelFile$ = Excel filename or nil for new spreadsheet
; SheetName$ = Sheet name or nil for not specified
; Visible = t for visible or nil for hidden
; Syntax examples:
; (OpenExcel "C:\\Temp\\Temp.xls" "Sheet2" t) = Opens C:\Temp\Temp.xls on Sheet2 as visible session
; (OpenExcel "C:\\Temp\\Temp.xls" nil nil) = Opens C:\Temp\Temp.xls on current sheet as hidden session
; (OpenExcel nil "Parts List" nil) = Opens a new spreadsheet and creates a Part List sheet as hidden session
;-------------------------------------------------------------------------------
(defun OpenExcel (ExcelFile$ SheetName$ Visible / Sheet$ Sheets@ Worksheet)
(if (= (type ExcelFile$) 'STR)
(if (findfile ExcelFile$)
(setq *ExcelFile$ ExcelFile$)
(progn
(alert (strcat "Excel file " ExcelFile$ " not found."))
(exit)
);progn
);if
(setq *ExcelFile$ "")
);if
(gc)
(if (setq *ExcelApp% (vlax-get-object "Excel.Application"))
(progn
(alert "Close all Excel spreadsheets to continue!")
(vlax-release-object *ExcelApp%)(gc)
);progn
);if
(setq *ExcelApp% (vlax-get-or-create-object "Excel.Application"))
(if ExcelFile$
(if (findfile ExcelFile$)
(vlax-invoke-method (vlax-get-property *ExcelApp% 'WorkBooks) 'Open ExcelFile$)
(vlax-invoke-method (vlax-get-property *ExcelApp% 'WorkBooks) 'Add)
);if
(vlax-invoke-method (vlax-get-property *ExcelApp% 'WorkBooks) 'Add)
);if
(if Visible
(vla-put-visible *ExcelApp% :vlax-true)
);if
(if (= (type SheetName$) 'STR)
(progn
(vlax-for Sheet$ (vlax-get-property *ExcelApp% "Sheets")
(setq Sheets@ (append Sheets@ (list (vlax-get-property Sheet$ "Name"))))
);vlax-for
(if (member SheetName$ Sheets@)
(vlax-for Worksheet (vlax-get-property *ExcelApp% "Sheets")
(if (= (vlax-get-property Worksheet "Name") SheetName$)
(vlax-invoke-method Worksheet "Activate")
);if
);vlax-for
(vlax-put-property (vlax-invoke-method (vlax-get-property *ExcelApp% "Sheets") "Add") "Name" SheetName$)
);if
);progn
);if
(princ)
);defun OpenExcel
;-------------------------------------------------------------------------------
; PutCell - Put values into Excel cells
; Arguments: 2
; StartCell$ = Starting Cell ID
; Data@ = Value or list of values
; Syntax examples:
; (PutCell "A1" "PART NUMBER") = Puts PART NUMBER in cell A1
; (PutCell "B3" '("Dim" 7.5 "9.75")) = Starting with cell B3 put Dim, 7.5, and 9.75 across
;-------------------------------------------------------------------------------
(defun PutCell (StartCell$ Data@ / Cell$ Column# ExcelRange Row#)
(if (= (type Data@) 'STR)
(setq Data@ (list Data@))
)
(setq ExcelRange (vlax-get-property *ExcelApp% "Cells"))
(if (Cell-p StartCell$)
(setq Column# (car (ColumnRow StartCell$))
Row# (cadr (ColumnRow StartCell$))
);setq
(if (vl-catch-all-error-p
(setq Cell$ (vl-catch-all-apply 'vlax-get-property
(list (vlax-get-property *ExcelApp% "ActiveSheet") "Range" StartCell$))
);setq
);vl-catch-all-error-p
(alert (strcat "The cell ID \"" StartCell$ "\" is invalid."))
(setq Column# (vlax-get-property Cell$ "Column")
Row# (vlax-get-property Cell$ "Row")
);setq
);if
);if
(if (and Column# Row#)
(foreach Item Data@
(vlax-put-property ExcelRange "Item" Row# Column# (vl-princ-to-string Item))
(setq Column# (1+ Column#))
);foreach
);if
(princ)
);defun PutCell
;-------------------------------------------------------------------------------
; CloseExcel - Closes Excel spreadsheet
; Arguments: 1
; ExcelFile$ = Excel saveas filename or nil to close without saving
; Syntax examples:
; (CloseExcel "C:\\Temp\\Temp.xls") = Saveas C:\Temp\Temp.xls and close
; (CloseExcel nil) = Close without saving
;-------------------------------------------------------------------------------
(defun CloseExcel (ExcelFile$ / Saveas)
(if ExcelFile$
(if (= (strcase ExcelFile$) (strcase *ExcelFile$))
(if (findfile ExcelFile$)
(vlax-invoke-method (vlax-get-property *ExcelApp% "ActiveWorkbook") "Save")
(setq Saveas t)
);if
(if (findfile ExcelFile$)
(progn
(vl-file-delete (findfile ExcelFile$))
(setq Saveas t)
);progn
(setq Saveas t)
);if
);if
);if
(if Saveas
(vlax-invoke-method (vlax-get-property *ExcelApp% "ActiveWorkbook")
"SaveAs" ExcelFile$ -4143 "" "" :vlax-false :vlax-false nil
);vlax-invoke-method
);if
(vlax-invoke-method (vlax-get-property *ExcelApp% "ActiveWorkbook") 'Close :vlax-False)
(vlax-invoke-method *ExcelApp% 'Quit)
(vlax-release-object *ExcelApp%)(gc)
(setq *ExcelApp% nil *ExcelFile$ nil)
(princ)
);defun CloseExcel
;-------------------------------------------------------------------------------
; ColumnRow - Returns a list of the Column and Row number
; Function By: Gilles Chanteau from Marseille, France
; Arguments: 1
; Cell$ = Cell ID
; Syntax example: (ColumnRow "ABC987") = '(731 987)
;-------------------------------------------------------------------------------
(defun ColumnRow (Cell$ / Column$ Char$ Row#)
(setq Column$ "")
(while (< 64 (ascii (setq Char$ (strcase (substr Cell$ 1 1)))) 91)
(setq Column$ (strcat Column$ Char$)
Cell$ (substr Cell$ 2)
);setq
);while
(if (and (/= Column$ "") (numberp (setq Row# (read Cell$))))
(list (Alpha2Number Column$) Row#)
'(1 1);default to "A1" if there's a problem
);if
);defun ColumnRow
;-------------------------------------------------------------------------------
; Alpha2Number - Converts Alpha string into Number
; Function By: Gilles Chanteau from Marseille, France
; Arguments: 1
; Str$ = String to convert
; Syntax example: (Alpha2Number "ABC") = 731
;-------------------------------------------------------------------------------
(defun Alpha2Number (Str$ / Num#)
(if (= 0 (setq Num# (strlen Str$)))
0
(+ (* (- (ascii (strcase (substr Str$ 1 1))) 64) (expt 26 (1- Num#)))
(Alpha2Number (substr Str$ 2))
);+
);if
);defun Alpha2Number
;-------------------------------------------------------------------------------
; Number2Alpha - Converts Number into Alpha string
; Function By: Gilles Chanteau from Marseille, France
; Arguments: 1
; Num# = Number to convert
; Syntax example: (Number2Alpha 731) = "ABC"
;-------------------------------------------------------------------------------
(defun Number2Alpha (Num# / Val#)
(if (< Num# 27)
(chr (+ 64 Num#))
(if (= 0 (setq Val# (rem Num# 26)))
(strcat (Number2Alpha (1- (/ Num# 26))) "Z")
(strcat (Number2Alpha (/ Num# 26)) (chr (+ 64 Val#)))
);if
);if
);defun Number2Alpha
;-------------------------------------------------------------------------------
; Cell-p - Evaluates if the argument Cell$ is a valid cell ID
; Function By: Gilles Chanteau from Marseille, France
; Arguments: 1
; Cell$ = String of the cell ID to evaluate
; Syntax examples: (Cell-p "B12") = t, (Cell-p "BT") = nil
;-------------------------------------------------------------------------------
(defun Cell-p (Cell$)
(and (= (type Cell$) 'STR)
(or (= (strcase Cell$) "A1")
(not (equal (ColumnRow Cell$) '(1 1)))
);or
);and
);defun Cell-p
;-------------------------------------------------------------------------------
; Row+n - Returns the cell ID located a number of rows from cell
; Function By: Gilles Chanteau from Marseille, France
; Arguments: 2
; Cell$ = Starting cell ID
; Num# = Number of rows from cell
; Syntax examples: (Row+n "B12" 3) = "B15", (Row+n "B12" -3) = "B9"
;-------------------------------------------------------------------------------
(defun Row+n (Cell$ Num#)
(setq Cell$ (ColumnRow Cell$))
(strcat (Number2Alpha (car Cell$)) (itoa (max 1 (+ (cadr Cell$) Num#))))
);defun Row+n
;-------------------------------------------------------------------------------
; Column+n - Returns the cell ID located a number of columns from cell
; Function By: Gilles Chanteau from Marseille, France
; Arguments: 2
; Cell$ = Starting cell ID
; Num# = Number of columns from cell
; Syntax examples: (Column+n "B12" 3) = "E12", (Column+n "B12" -1) = "A12"
;-------------------------------------------------------------------------------
(defun Column+n (Cell$ Num#)
(setq Cell$ (ColumnRow Cell$))
(strcat (Number2Alpha (max 1 (+ (car Cell$) Num#))) (itoa (cadr Cell$)))
);defun Column+n
;-------------------------------------------------------------------------------
; rtosr - Used to change a real number into a short real number string
; stripping off all trailing 0's.
; Arguments: 1
; RealNum~ = Real number to convert to a short string real number
; Returns: ShortReal$ the short string real number value of the real number.
;-------------------------------------------------------------------------------
(defun rtosr (RealNum~ / DimZin# ShortReal$)
(setq DimZin# (getvar "DIMZIN"))
(setvar "DIMZIN" 8)
(setq ShortReal$ (rtos RealNum~ 2 8))
(setvar "DIMZIN" DimZin#)
ShortReal$
);defun rtosr
;-------------------------------------------------------------------------------
(princ);End of GetExcel.lsp

  • 0

#46 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 06 February 2009 - 07:39 AM

Các đoạn code này PP thấy trong trang http://web2.airmail.net/terrycad , ngoài ra còn có nhiều CODE khác nữa. Hope this help.

;-------------------------------------------------------------------------------
; Program Name: GetExcel.lsp [GetExcel R4]
; Created By: Terry Miller (Email: terrycadd@yahoo.com)
; (URL: [url="http://web2.airmail.net/terrycad)"]http://web2.airmail.net/terrycad)[/url]
; Date Created: 9-20-03
; Function: Several functions to get and put values into Excel cells.
;-------------------------------------------------------------------------------
; Revision History
; Rev By Date Description
;-------------------------------------------------------------------------------
; 1 TM 9-20-03 Initial version
; 2 TM 8-20-07 Rewrote GetExcel.lsp and added several new sub-functions
; including ColumnRow, Alpha2Number and Number2Alpha written
; by Gilles Chanteau from Marseille, France.
; 3 TM 12-1-07 Added several sub-functions written by Gilles Chanteau
; including Cell-p, Row+n, and Column+n. Also added his
; revision of the PutCell function.
; 4 GC 9-20-08 Revised the GetExcel argument MaxRange$ to accept a nil
; and get the current region from cell A1.
;-------------------------------------------------------------------------------
; Overview of Main functions
;-------------------------------------------------------------------------------
; GetExcel - Stores the values from an Excel spreadsheet into *ExcelData@ list
; Syntax: (GetExcel ExcelFile$ SheetName$ MaxRange$)
; Example: (GetExcel "C:\\Folder\\Filename.xls" "Sheet1" "L30")
; GetCell - Returns the cell value from the *ExcelData@ list
; Syntax: (GetCell Cell$)
; Example: (GetCell "H15")
; Function example of usage:
; (defun c:Get-Example ()
; (GetExcel "C:\\Folder\\Filename.xls" "Sheet1" "L30");<-- Edit Filename.xls
; (GetCell "H21");Or you can just use the global *ExcelData@ list
; );defun
;-------------------------------------------------------------------------------
; OpenExcel - Opens an Excel spreadsheet
; Syntax: (OpenExcel ExcelFile$ SheetName$ Visible)
; Example: (OpenExcel "C:\\Folder\\Filename.xls" "Sheet1" nil)
; PutCell - Put values into Excel cells
; Syntax: (PutCell StartCell$ Data$) or (PutCell StartCell$ DataList@)
; Example: (PutCell "A1" (list "GP093" 58.5 17 "Base" "3'-6 1/4\""))
; CloseExcel - Closes Excel session
; Syntax: (CloseExcel ExcelFile$)
; Example: (CloseExcel "C:\\Folder\\Filename.xls")
; Function example of usage:
; (defun c:Put-Example ()
; (OpenExcel "C:\\Folder\\Filename.xls" "Sheet1" nil);<-- Edit Filename.xls
; (PutCell "A1" (list "GP093" 58.5 17 "Base" "3'-6 1/4\""));Repeat as required
; (CloseExcel "C:\\Folder\\Filename.xls");<-- Edit Filename.xls
; (princ)
; );defun
;-------------------------------------------------------------------------------
; Note: Review the conditions of each argument in the function headings
;-------------------------------------------------------------------------------
; GetExcel - Stores the values from an Excel spreadsheet into *ExcelData@ list
; Arguments: 3
; ExcelFile$ = Path and filename
; SheetName$ = Sheet name or nil for not specified
; MaxRange$ = Maximum cell ID range to include or nil to get the current region from cell A1
; Syntax examples:
; (GetExcel "C:\\Temp\\Temp.xls" "Sheet1" "E19") = Open C:\Temp\Temp.xls on Sheet1 and read up to cell E19
; (GetExcel "C:\\Temp\\Temp.xls" nil "XYZ123") = Open C:\Temp\Temp.xls on current sheet and read up to cell XYZ123
;-------------------------------------------------------------------------------
(defun GetExcel (ExcelFile$ SheetName$ MaxRange$ / Column# ColumnRow@ Data@ ExcelRange^
ExcelValue ExcelValue ExcelVariant^ MaxColumn# MaxRow# Range$ Row# Worksheet)
(if (= (type ExcelFile$) 'STR)
(if (not (findfile ExcelFile$))
(progn
(alert (strcat "Excel file " ExcelFile$ " not found."))
(exit)
);progn
);if
(progn
(alert "Excel file not specified.")
(exit)
);progn
);if
(gc)
(if (setq *ExcelApp% (vlax-get-object "Excel.Application"))
(progn
(alert "Close all Excel spreadsheets to continue!")
(vlax-release-object *ExcelApp%)(gc)
);progn
);if
(setq ExcelFile$ (findfile ExcelFile$))
(setq *ExcelApp% (vlax-get-or-create-object "Excel.Application"))
(vlax-invoke-method (vlax-get-property *ExcelApp% 'WorkBooks) 'Open ExcelFile$)
(if SheetName$
(vlax-for Worksheet (vlax-get-property *ExcelApp% "Sheets")
(if (= (vlax-get-property Worksheet "Name") SheetName$)
(vlax-invoke-method Worksheet "Activate")
);if
);vlax-for
);if
(if MaxRange$
(progn
(setq ColumnRow@ (ColumnRow MaxRange$))
(setq MaxColumn# (nth 0 ColumnRow@))
(setq MaxRow# (nth 1 ColumnRow@))
);progn
(progn
(setq CurRegion (vlax-get-property (vlax-get-property
(vlax-get-property *ExcelApp% "ActiveSheet") "Range" "A1") "CurrentRegion")
);setq
(setq MaxRow# (vlax-get-property (vlax-get-property CurRegion "Rows") "Count"))
(setq MaxColumn# (vlax-get-property (vlax-get-property CurRegion "Columns") "Count"))
);progn
);if
(setq *ExcelData@ nil)
(setq Row# 1)
(repeat MaxRow#
(setq Data@ nil)
(setq Column# 1)
(repeat MaxColumn#
(setq Range$ (strcat (Number2Alpha Column#)(itoa Row#)))
(setq ExcelRange^ (vlax-get-property *ExcelApp% "Range" Range$))
(setq ExcelVariant^ (vlax-get-property ExcelRange^ 'Value))
(setq ExcelValue (vlax-variant-value ExcelVariant^))
(setq ExcelValue
(cond
((= (type ExcelValue) 'INT) (itoa ExcelValue))
((= (type ExcelValue) 'REAL) (rtosr ExcelValue))
((= (type ExcelValue) 'STR) (vl-string-trim " " ExcelValue))
((/= (type ExcelValue) 'STR) "")
);cond
);setq
(setq Data@ (append Data@ (list ExcelValue)))
(setq Column# (1+ Column#))
);repeat
(setq *ExcelData@ (append *ExcelData@ (list Data@)))
(setq Row# (1+ Row#))
);repeat
(vlax-invoke-method (vlax-get-property *ExcelApp% "ActiveWorkbook") 'Close :vlax-False)
(vlax-invoke-method *ExcelApp% 'Quit)
(vlax-release-object *ExcelApp%)(gc)
(setq *ExcelApp% nil)
*ExcelData@
);defun GetExcel
;-------------------------------------------------------------------------------
; GetCell - Returns the cell value from the *ExcelData@ list
; Arguments: 1
; Cell$ = Cell ID
; Syntax example: (GetCell "E19") = value of cell E19
;-------------------------------------------------------------------------------
(defun GetCell (Cell$ / Column# ColumnRow@ Return Row#)
(setq ColumnRow@ (ColumnRow Cell$))
(setq Column# (1- (nth 0 ColumnRow@)))
(setq Row# (1- (nth 1 ColumnRow@)))
(setq Return "")
(if *ExcelData@
(if (and (>= (length *ExcelData@) Row#)(>= (length (nth 0 *ExcelData@)) Column#))
(setq Return (nth Column# (nth Row# *ExcelData@)))
);if
);if
Return
);defun GetCell
;-------------------------------------------------------------------------------
; OpenExcel - Opens an Excel spreadsheet
; Arguments: 3
; ExcelFile$ = Excel filename or nil for new spreadsheet
; SheetName$ = Sheet name or nil for not specified
; Visible = t for visible or nil for hidden
; Syntax examples:
; (OpenExcel "C:\\Temp\\Temp.xls" "Sheet2" t) = Opens C:\Temp\Temp.xls on Sheet2 as visible session
; (OpenExcel "C:\\Temp\\Temp.xls" nil nil) = Opens C:\Temp\Temp.xls on current sheet as hidden session
; (OpenExcel nil "Parts List" nil) = Opens a new spreadsheet and creates a Part List sheet as hidden session
;-------------------------------------------------------------------------------
(defun OpenExcel (ExcelFile$ SheetName$ Visible / Sheet$ Sheets@ Worksheet)
(if (= (type ExcelFile$) 'STR)
(if (findfile ExcelFile$)
(setq *ExcelFile$ ExcelFile$)
(progn
(alert (strcat "Excel file " ExcelFile$ " not found."))
(exit)
);progn
);if
(setq *ExcelFile$ "")
);if
(gc)
(if (setq *ExcelApp% (vlax-get-object "Excel.Application"))
(progn
(alert "Close all Excel spreadsheets to continue!")
(vlax-release-object *ExcelApp%)(gc)
);progn
);if
(setq *ExcelApp% (vlax-get-or-create-object "Excel.Application"))
(if ExcelFile$
(if (findfile ExcelFile$)
(vlax-invoke-method (vlax-get-property *ExcelApp% 'WorkBooks) 'Open ExcelFile$)
(vlax-invoke-method (vlax-get-property *ExcelApp% 'WorkBooks) 'Add)
);if
(vlax-invoke-method (vlax-get-property *ExcelApp% 'WorkBooks) 'Add)
);if
(if Visible
(vla-put-visible *ExcelApp% :vlax-true)
);if
(if (= (type SheetName$) 'STR)
(progn
(vlax-for Sheet$ (vlax-get-property *ExcelApp% "Sheets")
(setq Sheets@ (append Sheets@ (list (vlax-get-property Sheet$ "Name"))))
);vlax-for
(if (member SheetName$ Sheets@)
(vlax-for Worksheet (vlax-get-property *ExcelApp% "Sheets")
(if (= (vlax-get-property Worksheet "Name") SheetName$)
(vlax-invoke-method Worksheet "Activate")
);if
);vlax-for
(vlax-put-property (vlax-invoke-method (vlax-get-property *ExcelApp% "Sheets") "Add") "Name" SheetName$)
);if
);progn
);if
(princ)
);defun OpenExcel
;-------------------------------------------------------------------------------
; PutCell - Put values into Excel cells
; Arguments: 2
; StartCell$ = Starting Cell ID
; Data@ = Value or list of values
; Syntax examples:
; (PutCell "A1" "PART NUMBER") = Puts PART NUMBER in cell A1
; (PutCell "B3" '("Dim" 7.5 "9.75")) = Starting with cell B3 put Dim, 7.5, and 9.75 across
;-------------------------------------------------------------------------------
(defun PutCell (StartCell$ Data@ / Cell$ Column# ExcelRange Row#)
(if (= (type Data@) 'STR)
(setq Data@ (list Data@))
)
(setq ExcelRange (vlax-get-property *ExcelApp% "Cells"))
(if (Cell-p StartCell$)
(setq Column# (car (ColumnRow StartCell$))
Row# (cadr (ColumnRow StartCell$))
);setq
(if (vl-catch-all-error-p
(setq Cell$ (vl-catch-all-apply 'vlax-get-property
(list (vlax-get-property *ExcelApp% "ActiveSheet") "Range" StartCell$))
);setq
);vl-catch-all-error-p
(alert (strcat "The cell ID \"" StartCell$ "\" is invalid."))
(setq Column# (vlax-get-property Cell$ "Column")
Row# (vlax-get-property Cell$ "Row")
);setq
);if
);if
(if (and Column# Row#)
(foreach Item Data@
(vlax-put-property ExcelRange "Item" Row# Column# (vl-princ-to-string Item))
(setq Column# (1+ Column#))
);foreach
);if
(princ)
);defun PutCell
;-------------------------------------------------------------------------------
; CloseExcel - Closes Excel spreadsheet
; Arguments: 1
; ExcelFile$ = Excel saveas filename or nil to close without saving
; Syntax examples:
; (CloseExcel "C:\\Temp\\Temp.xls") = Saveas C:\Temp\Temp.xls and close
; (CloseExcel nil) = Close without saving
;-------------------------------------------------------------------------------
(defun CloseExcel (ExcelFile$ / Saveas)
(if ExcelFile$
(if (= (strcase ExcelFile$) (strcase *ExcelFile$))
(if (findfile ExcelFile$)
(vlax-invoke-method (vlax-get-property *ExcelApp% "ActiveWorkbook") "Save")
(setq Saveas t)
);if
(if (findfile ExcelFile$)
(progn
(vl-file-delete (findfile ExcelFile$))
(setq Saveas t)
);progn
(setq Saveas t)
);if
);if
);if
(if Saveas
(vlax-invoke-method (vlax-get-property *ExcelApp% "ActiveWorkbook")
"SaveAs" ExcelFile$ -4143 "" "" :vlax-false :vlax-false nil
);vlax-invoke-method
);if
(vlax-invoke-method (vlax-get-property *ExcelApp% "ActiveWorkbook") 'Close :vlax-False)
(vlax-invoke-method *ExcelApp% 'Quit)
(vlax-release-object *ExcelApp%)(gc)
(setq *ExcelApp% nil *ExcelFile$ nil)
(princ)
);defun CloseExcel
;-------------------------------------------------------------------------------
; ColumnRow - Returns a list of the Column and Row number
; Function By: Gilles Chanteau from Marseille, France
; Arguments: 1
; Cell$ = Cell ID
; Syntax example: (ColumnRow "ABC987") = '(731 987)
;-------------------------------------------------------------------------------
(defun ColumnRow (Cell$ / Column$ Char$ Row#)
(setq Column$ "")
(while (< 64 (ascii (setq Char$ (strcase (substr Cell$ 1 1)))) 91)
(setq Column$ (strcat Column$ Char$)
Cell$ (substr Cell$ 2)
);setq
);while
(if (and (/= Column$ "") (numberp (setq Row# (read Cell$))))
(list (Alpha2Number Column$) Row#)
'(1 1);default to "A1" if there's a problem
);if
);defun ColumnRow
;-------------------------------------------------------------------------------
; Alpha2Number - Converts Alpha string into Number
; Function By: Gilles Chanteau from Marseille, France
; Arguments: 1
; Str$ = String to convert
; Syntax example: (Alpha2Number "ABC") = 731
;-------------------------------------------------------------------------------
(defun Alpha2Number (Str$ / Num#)
(if (= 0 (setq Num# (strlen Str$)))
0
(+ (* (- (ascii (strcase (substr Str$ 1 1))) 64) (expt 26 (1- Num#)))
(Alpha2Number (substr Str$ 2))
);+
);if
);defun Alpha2Number
;-------------------------------------------------------------------------------
; Number2Alpha - Converts Number into Alpha string
; Function By: Gilles Chanteau from Marseille, France
; Arguments: 1
; Num# = Number to convert
; Syntax example: (Number2Alpha 731) = "ABC"
;-------------------------------------------------------------------------------
(defun Number2Alpha (Num# / Val#)
(if (< Num# 27)
(chr (+ 64 Num#))
(if (= 0 (setq Val# (rem Num# 26)))
(strcat (Number2Alpha (1- (/ Num# 26))) "Z")
(strcat (Number2Alpha (/ Num# 26)) (chr (+ 64 Val#)))
);if
);if
);defun Number2Alpha
;-------------------------------------------------------------------------------
; Cell-p - Evaluates if the argument Cell$ is a valid cell ID
; Function By: Gilles Chanteau from Marseille, France
; Arguments: 1
; Cell$ = String of the cell ID to evaluate
; Syntax examples: (Cell-p "B12") = t, (Cell-p "BT") = nil
;-------------------------------------------------------------------------------
(defun Cell-p (Cell$)
(and (= (type Cell$) 'STR)
(or (= (strcase Cell$) "A1")
(not (equal (ColumnRow Cell$) '(1 1)))
);or
);and
);defun Cell-p
;-------------------------------------------------------------------------------
; Row+n - Returns the cell ID located a number of rows from cell
; Function By: Gilles Chanteau from Marseille, France
; Arguments: 2
; Cell$ = Starting cell ID
; Num# = Number of rows from cell
; Syntax examples: (Row+n "B12" 3) = "B15", (Row+n "B12" -3) = "B9"
;-------------------------------------------------------------------------------
(defun Row+n (Cell$ Num#)
(setq Cell$ (ColumnRow Cell$))
(strcat (Number2Alpha (car Cell$)) (itoa (max 1 (+ (cadr Cell$) Num#))))
);defun Row+n
;-------------------------------------------------------------------------------
; Column+n - Returns the cell ID located a number of columns from cell
; Function By: Gilles Chanteau from Marseille, France
; Arguments: 2
; Cell$ = Starting cell ID
; Num# = Number of columns from cell
; Syntax examples: (Column+n "B12" 3) = "E12", (Column+n "B12" -1) = "A12"
;-------------------------------------------------------------------------------
(defun Column+n (Cell$ Num#)
(setq Cell$ (ColumnRow Cell$))
(strcat (Number2Alpha (max 1 (+ (car Cell$) Num#))) (itoa (cadr Cell$)))
);defun Column+n
;-------------------------------------------------------------------------------
; rtosr - Used to change a real number into a short real number string
; stripping off all trailing 0's.
; Arguments: 1
; RealNum~ = Real number to convert to a short string real number
; Returns: ShortReal$ the short string real number value of the real number.
;-------------------------------------------------------------------------------
(defun rtosr (RealNum~ / DimZin# ShortReal$)
(setq DimZin# (getvar "DIMZIN"))
(setvar "DIMZIN" 8)
(setq ShortReal$ (rtos RealNum~ 2 8))
(setvar "DIMZIN" DimZin#)
ShortReal$
);defun rtosr
;-------------------------------------------------------------------------------
(princ);End of GetExcel.lsp

Giống như cái mà bạn tuananh đã nêu. Trong code người ta hướng dẫn rất kỹ, bạn cứ đọc sẽ hiểu cách dùng. Để hiểu tất cả các dòng code trong đó, cần phải có kiến thức tương đối sâu và rộng về lisp. Ở góc độ ứng dụng, không nhất thiết phải hiểu hết, bạn chỉ cần biết cách dùng (cung cấp đủ và đúng các arguments theo yêu cầu) là có thể phát huy hiệu quả.
Bạn có thể tham khảo thêm về quan điểm đó ở topic này:
http://www.cadviet.c...o...t=0&start=0
  • 0

#47 nguyen87

nguyen87

    Chưa sử dụng CAD

  • Members
  • Pip
  • 1 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 07 February 2009 - 08:54 AM

Cái này là VBA nhưng dùng tiện hơn lisp
http://www.cadviet.c...vao_cad_new.rar



Anh ơi
Khi nhấn vào ToAcad nó hỏi password vào VBA là gí vậy hả anh.
  • 0

#48 tuan_thietkedien

tuan_thietkedien

    biết lệnh mirror

  • Members
  • PipPipPip
  • 153 Bài viết
Điểm đánh giá: 15 (tàm tạm)

Đã gửi 07 February 2009 - 09:57 AM

Xin nhờ bác SSG giúp em lisp đưa dữ liệu từ file excel sang Acad

File excel có 2 sheet tương ứng với 2 bảng trong file acad

http://www.cadviet.c...pfiles/Acad.dwg

http://www.cadviet.c.../acad_excel.xls

Cám ơn bác nhiều lắm.
  • 0

#49 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 07 February 2009 - 10:39 AM

Xin nhờ bác SSG giúp em lisp đưa dữ liệu từ file excel sang Acad

File excel có 2 sheet tương ứng với 2 bảng trong file acad

http://www.cadviet.c...pfiles/Acad.dwg

http://www.cadviet.c.../acad_excel.xls

Cám ơn bác nhiều lắm.

Có lẽ bạn chưa hiểu hết ý. Hai nội dung cơ bản mà topic này đề cập là:

1. Trình lisp đọc data từ file *.xls, tính toán, xử lý chúng theo những yêu cầu cụ thể, xuất kết quả sang AutoCAD. Kết quả ở đây không đơn thuần là các dòng chữ và số như trong bảng Excel mà có thể biến thành các đối tượng AutoCAD (line, circle, pline, spline... hoặc tổ hợp chúng thành những components cụ thể tuỳ theo mục đích của chương trình)
2. Vận dụng các công cụ tính toán của Excel, trình lisp đọc kết quả, có thể xử lý thêm và xuất sang AutoCAD như trên.

Yêu cầu như của bạn chỉ đơn giản là "bê nguyên xi" cái bảng Excel vào Cad, chẳng cần đến chương trình gì cả. Vấn đề này đã được bàn luận rất nhiều trên diễn đàn. Ở đây ssg xin gợi ý vài cái:

a- Menu - Insert - OLE Object - Create from file - Chọn file *.xls - Open - OK -> toàn bộ bảng Excel sẽ chuyển y chang sang Cad. Bạn select nó, bấm vào các nút grips ở góc và co dãn kích thước theo ý muốn

b- Quét chọn một vùng cần quan tâm trong bảng Excel đang mở, copy. Sang AutoCAD paste vào

c- Như trên, nhưng thay vì paste, bạn vào Menu - Edit - Chọn Paste Special... - chọn "%Product Entities" với Cad đời cũ hoặc AutoCad Entities với Cad đời mới. Với Cad đời mới, bảng Excel đã thành đối tượng Table của Acad, bạn có thể gán các công thức tính toán ngay trong nó.

d- v.v... (bạn tìm thêm trên diễn đàn)
  • 0

#50 nataca

nataca

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 712 Bài viết
Điểm đánh giá: 553 (tốt)

Đã gửi 07 February 2009 - 10:44 AM

Xin nhờ bác SSG giúp em lisp đưa dữ liệu từ file excel sang Acad

File excel có 2 sheet tương ứng với 2 bảng trong file acad

http://www.cadviet.c...pfiles/Acad.dwg

http://www.cadviet.c.../acad_excel.xls

Cám ơn bác nhiều lắm.

Sao bạn không dùng chức năng table của Cad. Nó đáp ứng đủ điều kiện mà bạn vừa nêu, thập chí nó còn link kết quả cho cả 2 tức là sửa cad thì excel tự cập nhật và sửa excel thì cad tự cập nhật
  • 0

#51 Phiphi-

Phiphi-

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 434 Bài viết
Điểm đánh giá: 175 (tàm tạm)

Đã gửi 07 February 2009 - 11:09 AM

File Excel này chỉ 89KB, PP thấy xài cũng được lắm. Cách sử dụng như sau:
1. Open file này trước: DXF-OUT (có chứa VBA) http://www.cadviet.c...les/DXF_OUT.zip
2. Open file Excel muốn chuyển qua CAD
3. Highlight những gì cần chuyển qua CAD
4. Chọn Tools>.DXF-OỤT
5. Đặt tên cho file (sẽ xuất ra dưới dạng. dxf) > Save
6. Một bảng information xuất hiện> chọn thông số > click OK.
7. Run AutoCAD (nếu chưa run)
8. Open file . dxf vừa mới xuất từ Excel. (Nhớ chọn dạng .dxf thì mới thấy file)
9. Sử dụng các lệnh Property, Scale để chỉnh sửa màu, kích thước, kiểu Text vv...theo yêu cầu.
Enjoy playing!
  • 1

#52 tuan_thietkedien

tuan_thietkedien

    biết lệnh mirror

  • Members
  • PipPipPip
  • 153 Bài viết
Điểm đánh giá: 15 (tàm tạm)

Đã gửi 07 February 2009 - 01:12 PM

Sao bạn không dùng chức năng table của Cad. Nó đáp ứng đủ điều kiện mà bạn vừa nêu, thập chí nó còn link kết quả cho cả 2 tức là sửa cad thì excel tự cập nhật và sửa excel thì cad tự cập nhật


Hình như cái lệnh này chỉ có ở Cad 2007 2008, công ty mình đang dùng Cad 2004, bác nataca xem giúp mình với.
  • 0

#53 tuan_thietkedien

tuan_thietkedien

    biết lệnh mirror

  • Members
  • PipPipPip
  • 153 Bài viết
Điểm đánh giá: 15 (tàm tạm)

Đã gửi 07 February 2009 - 01:20 PM

File Excel này chỉ 89KB, PP thấy xài cũng được lắm. Cách sử dụng như sau:
1. Open file này trước: DXF-OUT (có chứa VBA) http://www.cadviet.c...les/DXF_OUT.zip
2. Open file Excel muốn chuyển qua CAD
3. Highlight những gì cần chuyển qua CAD
4. Chọn Tools>.DXF-OỤT
5. Đặt tên cho file (sẽ xuất ra dưới dạng. dxf) > Save
6. Một bảng information xuất hiện> chọn thông số > click OK.
7. Run AutoCAD (nếu chưa run)
8. Open file . dxf vừa mới xuất từ Excel. (Nhớ chọn dạng .dxf thì mới thấy file)
9. Sử dụng các lệnh Property, Scale để chỉnh sửa màu, kích thước, kiểu Text vv...theo yêu cầu.
Enjoy playing!


Chào phiphi
Mình thử chạy rồi nhưng excel báo lỗi marco gì đó, mình đã setting theo thông báo nhưng vẫn không được, phiphi có biết nguyên nhân không?

http://www.cadviet.c...files/Book2.xls
  • 0

#54 tuan_thietkedien

tuan_thietkedien

    biết lệnh mirror

  • Members
  • PipPipPip
  • 153 Bài viết
Điểm đánh giá: 15 (tàm tạm)

Đã gửi 07 February 2009 - 01:37 PM

Có lẽ bạn chưa hiểu hết ý. Hai nội dung cơ bản mà topic này đề cập là:

1. Trình lisp đọc data từ file *.xls, tính toán, xử lý chúng theo những yêu cầu cụ thể, xuất kết quả sang AutoCAD. Kết quả ở đây không đơn thuần là các dòng chữ và số như trong bảng Excel mà có thể biến thành các đối tượng AutoCAD (line, circle, pline, spline... hoặc tổ hợp chúng thành những components cụ thể tuỳ theo mục đích của chương trình)
2. Vận dụng các công cụ tính toán của Excel, trình lisp đọc kết quả, có thể xử lý thêm và xuất sang AutoCAD như trên.

Yêu cầu như của bạn chỉ đơn giản là "bê nguyên xi" cái bảng Excel vào Cad, chẳng cần đến chương trình gì cả. Vấn đề này đã được bàn luận rất nhiều trên diễn đàn. Ở đây ssg xin gợi ý vài cái:

a- Menu - Insert - OLE Object - Create from file - Chọn file *.xls - Open - OK -> toàn bộ bảng Excel sẽ chuyển y chang sang Cad. Bạn select nó, bấm vào các nút grips ở góc và co dãn kích thước theo ý muốn

b- Quét chọn một vùng cần quan tâm trong bảng Excel đang mở, copy. Sang AutoCAD paste vào

c- Như trên, nhưng thay vì paste, bạn vào Menu - Edit - Chọn Paste Special... - chọn "%Product Entities" với Cad đời cũ hoặc AutoCad Entities với Cad đời mới. Với Cad đời mới, bảng Excel đã thành đối tượng Table của Acad, bạn có thể gán các công thức tính toán ngay trong nó.

d- v.v... (bạn tìm thêm trên diễn đàn)


Chào bác Ssg

Cách c của bác là đúng 90% ý em rồi. Vấn đề còn lại khi mang qua Cad thì chiều cao text, font text, vị trí sắp xếp text không khớp với các ô trong Cad đã kẻ trước. Cái này em có thể điều chỉnh lại được nhưng nếu bác có cách nào hay xin chỉ giáo giúp em.

Cám ơn bác nhiều lắm.
  • 0

#55 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 07 February 2009 - 01:38 PM

Xin nhờ bác SSG giúp em lisp đưa dữ liệu từ file excel sang Acad

File excel có 2 sheet tương ứng với 2 bảng trong file acad

http://www.cadviet.c...pfiles/Acad.dwg

http://www.cadviet.c.../acad_excel.xls

Cám ơn bác nhiều lắm.

Nếu đơn thuần là bạn chỉ muốn đưa dữ liệu từ excel sang Acad thì chỉ cần chọn các ô trong excel -> Chọn copy -> Sang CAD -> Chọn Edit -> Paste Special-> Chọn AutoCAD Entities là OK.
Có một cách khác là bạn sử dụng file ExCel2CAD ở đây : http://www.cadviet.c...?showtopic=8679
để chuyển dữ liệu từ Excel sang CAD.
Chúc bạn thành công.
  • 1

#56 nataca

nataca

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 712 Bài viết
Điểm đánh giá: 553 (tốt)

Đã gửi 07 February 2009 - 01:52 PM

Hình như cái lệnh này chỉ có ở Cad 2007 2008, công ty mình đang dùng Cad 2004, bác nataca xem giúp mình với.

Vậy tại sao ta không dùng cad 2007, 2008 hay 2009. Chắc là liên quan đến cấu hình máy?
  • 0

#57 tuan_thietkedien

tuan_thietkedien

    biết lệnh mirror

  • Members
  • PipPipPip
  • 153 Bài viết
Điểm đánh giá: 15 (tàm tạm)

Đã gửi 07 February 2009 - 03:02 PM

Vậy tại sao ta không dùng cad 2007, 2008 hay 2009. Chắc là liên quan đến cấu hình máy?


Cái này do giám đốc công ty quyết định đó bạn nataca.
  • 0

#58 tuan_thietkedien

tuan_thietkedien

    biết lệnh mirror

  • Members
  • PipPipPip
  • 153 Bài viết
Điểm đánh giá: 15 (tàm tạm)

Đã gửi 07 February 2009 - 03:22 PM

Nếu đơn thuần là bạn chỉ muốn đưa dữ liệu từ excel sang Acad thì chỉ cần chọn các ô trong excel -> Chọn copy -> Sang CAD -> Chọn Edit -> Paste Special-> Chọn AutoCAD Entities là OK.
Có một cách khác là bạn sử dụng file ExCel2CAD ở đây : http://www.cadviet.c...?showtopic=8679
để chuyển dữ liệu từ Excel sang CAD.
Chúc bạn thành công.


Mình đang dùng thử, cám ơn bạn Tue_NV nhiều nha, cái này mình đã thấy rồi nhưng lúc đó nó hỏi password vào VBA nên mình tưởng không dùng được. Link này dùng tốt lắm. :s_big:
:cheers: :cheers:
  • 0

#59 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 07 February 2009 - 03:29 PM

Cái này do giám đốc công ty quyết định đó bạn nataca.

Thôi thì tặng bạn phần mềm Chuyển Excel sang CAD và ngược lại (Phần mềm dành cho CAD 2004)
Bạn đọc Hướng dẫn Trong Help nhé.
http://www.cadviet.c...AutoCAD2004.exe
  • 0

#60 Phiphi-

Phiphi-

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 434 Bài viết
Điểm đánh giá: 175 (tàm tạm)

Đã gửi 07 February 2009 - 04:32 PM

Chào phiphi
Mình thử chạy rồi nhưng excel báo lỗi marco gì đó, mình đã setting theo thông báo nhưng vẫn không được, phiphi có biết nguyên nhân không?

http://www.cadviet.c...files/Book2.xls

PP vẫn xài OK khi chọn Security level là MEDIUM:

Hình đã gửi
Hình đã gửi

Hình đã gửi
Hình đã gửi

Please try again.

http://www.cadviet.c.../acad_excel.zip
  • 0