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.
Trang72

Xuất dữ liệu cad sang EXCEL lần lượt

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

Trang72    2

Tại bên file cad có dữ liệu. Nhờ các anh em viết hộ em lisp khi em nhập vào từ ô STT, mã số, khoảng cách, ghi chú

bấm vào oke dữ liệu của em lần lượt xuất sang excel cho đến khi nào bấm vào end lệnh kết thúc.

 

http://www.cadviet.com/upfiles/3/cad_excel.dwg

  • 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
Trang72    2

Em xin nhờ các bác: Bác Hoanh, Bác Tue_NV, bác PhanthanhBinh, bác phantuHuong, bác KSPhanthanhtu và toàn thể các bác cao thủ trên diễn đàn giúp em với .Em trân thành cám ơn các 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
Em xin nhờ các bác: Bác Hoanh, Bác Tue_NV, bác PhanthanhBinh, bác phantuHuong, bác KSPhanthanhtu và toàn thể các bác cao thủ trên diễn đàn giúp em với .Em trân thành cám ơn các bác

Bạn nên nêu rõ đầu bài và file cụ thể (thực tế) >> sẽ có cách khác nhau để giải quyết mục đích của bạn

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
Trang72    2
Tại bên file cad có dữ liệu. Nhờ các anh em viết hộ em lisp khi em nhập vào từ ô STT, mã số, khoảng cách, ghi chú

bấm vào oke dữ liệu của em lần lượt xuất sang excel cho đến khi nào bấm vào end lệnh kết thúc.

 

http://www.cadviet.com/upfiles/3/cad_excel.dwg

 

Khi ta làm việc bên file cad các dữ liệu cần xuất sang excel để thuận tiện cho việc tính toán chính xác và đạt được hiệu quả cao như vậy cần phải xuất dữ liệu sang bên excel 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
npham    75
Khi ta làm việc bên file cad các dữ liệu cần xuất sang excel để thuận tiện cho việc tính toán chính xác và đạt được hiệu quả cao như vậy cần phải xuất dữ liệu sang bên excel bác ạ.

 

Theo cái hình vẽ của bác thì có nghĩa là nhập dữ liệu trên CAD nhưng ghi kết quả qua Excel???? Sao bác không nhập thẳng trên excel luôn?

 

Hay là ý của bác có sẵn đối tượng text trên cad sau đó chọn text này để xuất qua 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
Trang72    2
Theo cái hình vẽ của bác thì có nghĩa là nhập dữ liệu trên CAD nhưng ghi kết quả qua Excel???? Sao bác không nhập thẳng trên excel luôn?

 

Hay là ý của bác có sẵn đối tượng text trên cad sau đó chọn text này để xuất qua excel?

 

Dữ liệu bên cad bác ạ và vì vậy cần phải xuất sang excel tính toán chính xác và thuận tiện hơn. Cám ơn 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
Dữ liệu bên cad bác ạ và vì vậy cần phải xuất sang excel tính toán chính xác và thuận tiện hơn. Cám ơn Bác

Nếu không phải là "bí mật quốc gia" bạn upload file cad của bạn đang làm lên diễn đàn mọi ngưòi giúp ( xóa những phần không liên quan)

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
phamthanhbinh    3.123
Nếu không phải là "bí mật quốc gia" bạn upload file cad của bạn đang làm lên diễn đàn mọi ngưòi giúp ( xóa những phần không liên quan)

Hề hề hề,

Nguoi_tho_mo chưa hiểu hết ý bạn Trang 72 rồi. Bạn ý muốn nhập số liệu từ Cad sang Excel thông qua hộp thoại cơ. Như vậy nó oai hơn cái cách chọn dữ liệu trên bản vẽ theo kiểu Pick piếc này nọ ấy mà. Những cái ấy thì diễn đàn đã có kha khá, nhưng bạn ấy chưa thích nên muốn ra cái đề mới mới hơn ấy mà.

Thực ra làm hộp thoại cũng không quá khó, song vì đang là thời gian chạy xô làm hàng cuối năm nên chưa ai giúp được bạn ấy thôi mà. Mình không rành lắm về DCL nên cũng chưa giúp được, phải ngâm đã rồi mới cứu được. Mong các bác đừng cười hỉ????

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
npham    75
Hề hề hề,

Nguoi_tho_mo chưa hiểu hết ý bạn Trang 72 rồi. Bạn ý muốn nhập số liệu từ Cad sang Excel thông qua hộp thoại cơ. Như vậy nó oai hơn cái cách chọn dữ liệu trên bản vẽ theo kiểu Pick piếc này nọ ấy mà. Những cái ấy thì diễn đàn đã có kha khá, nhưng bạn ấy chưa thích nên muốn ra cái đề mới mới hơn ấy mà.

Thực ra làm hộp thoại cũng không quá khó, song vì đang là thời gian chạy xô làm hàng cuối năm nên chưa ai giúp được bạn ấy thôi mà. Mình không rành lắm về DCL nên cũng chưa giúp được, phải ngâm đã rồi mới cứu được. Mong các bác đừng cười hỉ????

 

Chắc là không phải. nếu nhập như vậy thì nhập thẳng lên excel không sưóng hơn sao. Hoặc muốn "pro" thì làm cái hộp thoại trên excel mà nhập.

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
Chắc là không phải. nếu nhập như vậy thì nhập thẳng lên excel không sưóng hơn sao. Hoặc muốn "pro" thì làm cái hộp thoại trên excel mà nhập.

Mình cũng có ý như bác npham vậy?

Bạn Trang72 muốn mọi người giúp thì vui lòng làm theo ý của bạn nguoithomo và có thể nói rõ hơn được không?

Bạn có thể sử dụng phần mềm ghim cửa sổ mà ghim Excel lên trên cửa sổ CAD, khi cần cũng có thể tìm dữ liệu bên CAD dễ dàng

Nếu không phải là "bí mật quốc gia" bạn upload file cad của bạn đang làm lên diễn đàn mọi ngưòi giúp ( xóa những phần không liên quan)

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
Trang72    2
Em xin nhờ các bác: Bác Hoanh, Bác Tue_NV, bác PhanthanhBinh, bác phantuHuong, bác KSPhanthanhtu và toàn thể các bác cao thủ trên diễn đàn giúp em với .Em trân thành cám ơn các bác

 

Các Bác trên diễn đàn bận hết rồi sao ấy mà chằng giúp em. Buồn quá....

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
npham    75
Các Bác trên diễn đàn bận hết rồi sao ấy mà chằng giúp em. Buồn quá....

 

Mọi người nói bác upload cái file mẫu lên, rồi rói rõ cần xuất cái j qua cad, mọi ngưòi sẽ giúp bạn mà

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
Trang72    2
Mọi người nói bác upload cái file mẫu lên, rồi rói rõ cần xuất cái j qua cad, mọi ngưòi sẽ giúp bạn mà

 

Em đã upload file lên diễn đàn rồi mà . File nhập bên cad có 4 cọc là text khi nhập xong 4 cọc bấm oke xẽ xuất sang file bên EXcel và cứ lần lượt xuất như vậy theo thức tự nhập xuất. Khi Bấn vào end thì lệnh nhập và xuất mới kết thúc.

http://www.cadviet.com/upfiles/3/cad_excel_1.dwg

Cám ơn các bác.

  • 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
npham    75
Em đã upload file lên diễn đàn rồi mà . File nhập bên cad có 4 cọc là text khi nhập xong 4 cọc bấm oke xẽ xuất sang file bên EXcel và cứ lần lượt xuất như vậy theo thức tự nhập xuất. Khi Bấn vào end thì lệnh nhập và xuất mới kết thúc.

http://www.cadviet.com/upfiles/3/cad_excel_1.dwg

Cám ơn các bác.

 

Mình thắc mắc không hiểu sao bác lại thích như vậy. Nhưng thôi kệ. Chắc công việc của bác cần như thế.

Bác xem đoạn code dưới đây có vừa ý không.

- Copy DCL vào C:\ hoặc sửa lại đườg dẫn theo ý bác

- Nhập liệu bằng TAB- Close để kết thúc

- STT tự gia tăng. Nếu không thích bác có thể sửa code lại

(defun c:input (/ filename f number)
(setq filename (getfiled "Select a File" "" "xls" 1))
 (if filename
  (progn
(setq f (open filename "w"))		
(setq id (load_dialog "C:/input.dcl"))	
(new_dialog "input" id)
(set_tile "filename" (strcat "File name:" filename))
(mode_tile "number" 2)
(action_tile "note" "(PROGN
			  (write-line (strcat
			(setq number (get_tile \"number\")) \"\t\"
			(get_tile \"code\") \"\t\"
			  (get_tile \"distance\") \"\t\"
			(get_tile \"note\") \"\t\") f)
			(set_tile \"number\" (itoa (1+ (atoi number))))
			(mode_tile \"code\" 2)
			  )")

(start_dialog)
(done_dialog)
(unload_dialog id)
(close f)	

 ))  

 )

input:dialog {
label="Write to file";
: text {key="filename";}
: boxed_row {
label="Row data";
: column {: text {label="Number";} : edit_box {key="number";edit_width=5;}}
: column {: text {label="Code";} : edit_box {key="code";edit_width=8;}}
: column {: text {label="Distance";} : edit_box {key="distance";edit_width=8;}}
: column {: text {label="Notes";} : edit_box {key="note";edit_width=20;}}
}
: button {
	label="Close";
	fixed_width=true;
	is_cancel=true;
	key="cancel";
	is_default=true;
	alignment=right;
		}
}

  • 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
Trang72    2
Mình thắc mắc không hiểu sao bác lại thích như vậy. Nhưng thôi kệ. Chắc công việc của bác cần như thế.

Bác xem đoạn code dưới đây có vừa ý không.

- Copy DCL vào C:\ hoặc sửa lại đườg dẫn theo ý bác

- Nhập liệu bằng TAB- Close để kết thúc

- STT tự gia tăng. Nếu không thích bác có thể sửa code lại

(defun c:input (/ filename f number)
(setq filename (getfiled "Select a File" "" "xls" 1))
 (if filename
  (progn
(setq f (open filename "w"))		
(setq id (load_dialog "C:/input.dcl"))	
(new_dialog "input" id)
(set_tile "filename" (strcat "File name:" filename))
(mode_tile "number" 2)
(action_tile "note" "(PROGN
			  (write-line (strcat
			(setq number (get_tile \"number\")) \"\t\"
			(get_tile \"code\") \"\t\"
			  (get_tile \"distance\") \"\t\"
			(get_tile \"note\") \"\t\") f)
			(set_tile \"number\" (itoa (1+ (atoi number))))
			(mode_tile \"code\" 2)
			  )")

(start_dialog)
(done_dialog)
(unload_dialog id)
(close f)	

 ))  

 )

input:dialog {
label="Write to file";
: text {key="filename";}
: boxed_row {
label="Row data";
: column {: text {label="Number";} : edit_box {key="number";edit_width=5;}}
: column {: text {label="Code";} : edit_box {key="code";edit_width=8;}}
: column {: text {label="Distance";} : edit_box {key="distance";edit_width=8;}}
: column {: text {label="Notes";} : edit_box {key="note";edit_width=20;}}
}
: button {
	label="Close";
	fixed_width=true;
	is_cancel=true;
	key="cancel";
	is_default=true;
	alignment=right;
		}
}

 

 

Cám ơn Bác npham đã giúp em đúng như công việc em cần . Bác Cho em hỏi 1 chút Bác có cách nào làm cho hộp hội thoại dialog của lisp này vẫn hiện trên màn hình mà vẫn thực hiện được lệnh pan hoặc Zom các đối tượng trên màn hình cad được không ạ.Bác giúp em nhé Cám ơn Bác nhiều.

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
npham    75
Cám ơn Bác npham đã giúp em đúng như công việc em cần . Bác Cho em hỏi 1 chút Bác có cách nào làm cho hộp hội thoại dialog của lisp này vẫn hiện trên màn hình mà vẫn thực hiện được lệnh pan hoặc Zom các đối tượng trên màn hình cad được không ạ.Bác giúp em nhé Cám ơn Bác nhiều.

 

Cái này thì mình bó tay nếu viết bằng lisp. Tạm thời đóng hộp thoại đi thì hoạ may.

Nhờ mấy đại ca trong 4rum chỉ giúp cho bạn ấ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
Tue_NV    3.841
Cám ơn Bác npham đã giúp em đúng như công việc em cần . Bác Cho em hỏi 1 chút Bác có cách nào làm cho hộp hội thoại dialog của lisp này vẫn hiện trên màn hình mà vẫn thực hiện được lệnh pan hoặc Zom các đối tượng trên màn hình cad được không ạ.Bác giúp em nhé Cám ơn Bác nhiều.

Về khả năng thực hiện điều mà bạn muốn thì như bác npham đã viết ở bài viết trên.

 

Bạn có thể tạo 1 button với chức năng là Zoom Realtime. Khi nhấn vào button đó thì có khả năng zoom , đương nhiên là cũng có thể pan được bằng bánh xe giữa của chuột. Khi enter để thoát khỏi lệnh Zoom thì Dialog lại hiện ra để cho bạn tiếp tục nhập số liệu

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
Trang72    2
Về khả năng thực hiện điều mà bạn muốn thì như bác npham đã viết ở bài viết trên.

 

Bạn có thể tạo 1 button với chức năng là Zoom Realtime. Khi nhấn vào button đó thì có khả năng zoom , đương nhiên là cũng có thể pan được bằng bánh xe giữa của chuột. Khi enter để thoát khỏi lệnh Zoom thì Dialog lại hiện ra để cho bạn tiếp tục nhập số liệu

 

Vậy Em nhờ Bác Tue_NV và các bác Cao Thủ giúp em với.

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
npham    75
Vậy Em nhờ Bác Tue_NV và các bác Cao Thủ giúp em với.

 

Mấy chuyện lớn sẽ nhờ tới Cao thủ, việc nhỏ nhỏ mình giúp bạn thử xem sao nhé. hê hê !

 

Lệnh zoom dưới đây swr dụng nút giữa chuột, trái phải để exit

nếu không vừa ý chổ nào bạn cứ nói nhé.

 

input:dialog {
label="Write to file";
: text {key="filename";}
: boxed_row {
label="Row data";
: column {: text {label="Number";} : edit_box {key="number";edit_width=5;}}
: column {: text {label="Code";} : edit_box {key="code";edit_width=8;}}
: column {: text {label="Distance";} : edit_box {key="distance";edit_width=8;}}
: column {: text {label="Notes";} : edit_box {key="note";edit_width=20;}}
}
: row { : spacer {width=22;}
: button {
	label="Zoom";
	fixed_width=true;	
	key="zoom";
		}
: button {
	label="Close";
	fixed_width=true;
	is_cancel=true;
	key="cancel";
	is_default=true;
	alignment=right;
		}
		}
}

 

 

(defun c:input (/ filename f number sta)
(setq filename (getfiled "Select a File" "" "xls" 1))
 (if filename
  (progn
(setq f (open filename "w"))		
(setq id (load_dialog "C:/input.dcl"))

(setq sta 2)	
(while (> sta 1)	
(new_dialog "input" id)
(set_tile "filename" (strcat "File name:" filename))
(mode_tile "number" 2)
(action_tile "note" "(PROGN
			  (write-line (strcat
			(setq number (get_tile \"number\")) \"\t\"
			(get_tile \"code\") \"\t\"
			  (get_tile \"distance\") \"\t\"
			(get_tile \"note\") \"\t\") f)
			(set_tile \"number\" (itoa (1+ (atoi number))))
			(mode_tile \"code\" 2)
			  )")
(action_tile "zoom" "(done_dialog 2)")  
(setq sta (start_dialog))
	(if (= sta 2) (command "zoom" (getpoint "\nSu dung nut giua chuot de zoom, pan :") nil))	  


 )
(done_dialog)
(unload_dialog id)
(close f)	

 ))  

 )

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
gia_bach    1.442
Mấy chuyện lớn sẽ nhờ tới Cao thủ, việc nhỏ nhỏ mình giúp bạn thử xem sao nhé. hê hê !

 

Lệnh zoom dưới đây swr dụng nút giữa chuột, trái phải để exit

nếu không vừa ý chổ nào bạn cứ nói nhé.

(defun c:input (/ filename f number sta)
(setq filename (getfiled "Select a File" "" "xls" 1))
 (if filename
  (progn
(setq f (open filename "w"))		
(setq id (load_dialog "C:/input.dcl"))	
(setq sta 2)	
(while (> sta 1)	
(new_dialog "input" id)
(set_tile "filename" (strcat "File name:" filename))
(mode_tile "number" 2)
(action_tile "note" "(PROGN
			  (write-line (strcat
			(setq number (get_tile \"number\")) \"\t\"
			(get_tile \"code\") \"\t\"
			  (get_tile \"distance\") \"\t\"
			(get_tile \"note\") \"\t\") f)
			(set_tile \"number\" (itoa (1+ (atoi number))))
			(mode_tile \"code\" 2)
			  )")
(action_tile "zoom" "(done_dialog 2)")  
(setq sta (start_dialog))
	(if (= sta 2) (command "zoom" (getpoint "\nSu dung nut giua chuot de zoom, pan :") nil))	
 )
(done_dialog)
(unload_dialog id)
(close f)	
 ))  
 )

Chào npham.

Bạn có thể thay dòng :

(if (= sta 2) (command "zoom" (getpoint "\nSu dung nut giua chuot de zoom, pan :") nil))

thành (if (= sta 2) (ssget)) cho phép sử dụng các lệnh Zoom, Pan của CAD, trở lại hộp thoại bằng phím Enter hay chuột phải.

 

LISP đã đáp ứng đuợc yêu cầu của Trang72, tuy nhiên tôi xin góp ý thêm về giao diện.

Bạn nên tạo thêm 1 button ADD có chức năng thêm dòng dữ liệu hiện tại (giá trị trên các edit_box) vào biến kiểu LISP (lưu data tạm), mỗi lần click ADD thì thêm 1 dòng dữ liệu đồng thời reset các giá trị trên các edit_box.

Khi nguời dùng Click button WriteToFile, dữ liệu của biến LISP mới thực sự đổ vào file (lúc này mới gọi hàm getfiled để chọn file).

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
Trang72    2
Chào npham.

Bạn có thể thay dòng :

(if (= sta 2) (command "zoom" (getpoint "\nSu dung nut giua chuot de zoom, pan :") nil))

thành (if (= sta 2) (ssget)) cho phép sử dụng các lệnh Zoom, Pan của CAD, trở lại hộp thoại bằng phím Enter hay chuột phải.

 

LISP đã đáp ứng đuợc yêu cầu của Trang72, tuy nhiên tôi xin góp ý thêm về giao diện.

Bạn nên tạo thêm 1 button ADD có chức năng thêm dòng dữ liệu hiện tại (giá trị trên các edit_box) vào biến kiểu LISP (lưu data tạm), mỗi lần click ADD thì thêm 1 dòng dữ liệu đồng thời reset các giá trị trên các edit_box.

Khi nguời dùng Click button WriteToFile, dữ liệu của biến LISP mới thực sự đổ vào file (lúc này mới gọi hàm getfiled để chọn file).

 

Cám ơn Bác nPham và Bác Gia Bạch đã giúp đỡ em. Chúc Các Bác Luôn Mạnh Khoẻ và hạnh Phú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
phamthanhbinh    3.123
Mấy chuyện lớn sẽ nhờ tới Cao thủ, việc nhỏ nhỏ mình giúp bạn thử xem sao nhé. hê hê !

 

Lệnh zoom dưới đây swr dụng nút giữa chuột, trái phải để exit

nếu không vừa ý chổ nào bạn cứ nói nhé.

 

input:dialog {
label="Write to file";
: text {key="filename";}
: boxed_row {
label="Row data";
: column {: text {label="Number";} : edit_box {key="number";edit_width=5;}}
: column {: text {label="Code";} : edit_box {key="code";edit_width=8;}}
: column {: text {label="Distance";} : edit_box {key="distance";edit_width=8;}}
: column {: text {label="Notes";} : edit_box {key="note";edit_width=20;}}
}
: row { : spacer {width=22;}
: button {
	label="Zoom";
	fixed_width=true;	
	key="zoom";
		}
: button {
	label="Close";
	fixed_width=true;
	is_cancel=true;
	key="cancel";
	is_default=true;
	alignment=right;
		}
		}
}

(defun c:input (/ filename f number sta)
(setq filename (getfiled "Select a File" "" "xls" 1))
 (if filename
  (progn
(setq f (open filename "w"))		
(setq id (load_dialog "C:/input.dcl"))

(setq sta 2)	
(while (> sta 1)	
(new_dialog "input" id)
(set_tile "filename" (strcat "File name:" filename))
(mode_tile "number" 2)
(action_tile "note" "(PROGN
			  (write-line (strcat
			(setq number (get_tile \"number\")) \"\t\"
			(get_tile \"code\") \"\t\"
			  (get_tile \"distance\") \"\t\"
			(get_tile \"note\") \"\t\") f)
			(set_tile \"number\" (itoa (1+ (atoi number))))
			(mode_tile \"code\" 2)
			  )")
(action_tile "zoom" "(done_dialog 2)")  
(setq sta (start_dialog))
	(if (= sta 2) (command "zoom" (getpoint "\nSu dung nut giua chuot de zoom, pan :") nil))	  


 )
(done_dialog)
(unload_dialog id)
(close f)	

 ))  

 )

Chào bác npham,

Đọc code của bác mình thấy một vài thắc mắc sau:

1/- Hàm (mode_tile "key" Value) chỉ nhận hai giá trị là 0 và 1 tức là chỉ có tác dụng tắt hay mở cái nút mang key đó mà thôi. Vậy sao ở đây bác dùng (mode_tile "number" 2). Như vậy nó có ý nghĩa gì???

2/- Key bác đặt là "code" , vậy tại sao trong hàm bác dùng (mode_tile \"code\" 2) ??? Nó có ý nghĩa ra sao???

3/- Bác đặt (setq sta (start_dialog))

Vậy làm sao có (if (= sta 2) ........

4/- Bác dùng :

(action_tile "note" "(PROGN

(write-line (strcat

(setq number (get_tile \"number\")) \"\t\"

(get_tile \"code\") \"\t\"

(get_tile \"distance\") \"\t\"

(get_tile \"note\") \"\t\") f)

(set_tile \"number\" (itoa (1+ (atoi number))))

(mode_tile \"code\" 2)

)")

Như vậy nếu cái key "note" không được kich hoạt (nhập số liệu) thì cái dòng dũ liệu đó có được nhập vào Excel hay không??? Vì thực tế có thể sẽ có những dòng dữ liệu không cần phải nhập ghi chú bác ạ...

5/- Theo mình hiểu thì cái (done_dialog) là hàm đóng hộp thoại lại. Vậy (done_dialog 2) phải chăng là vừa đóng hộp thoại vừa gán cho cái biến sta giá trị là 2 phải không bác????

 

Vài câu hỏi làm phiền bác, mong bác chớ giận và giải đáp giùm, thực tình cái dialog này mình chưa rõ lắm, nhất là việc sử dụng nó cho vòng lặp bác ạ.

Chúc bác khỏe và vui.

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
npham    75
Chào bác npham,

Đọc code của bác mình thấy một vài thắc mắc sau:

1/- Hàm (mode_tile "key" Value) chỉ nhận hai giá trị là 0 và 1 tức là chỉ có tác dụng tắt hay mở cái nút mang key đó mà thôi. Vậy sao ở đây bác dùng (mode_tile "number" 2). Như vậy nó có ý nghĩa gì???

2/- Key bác đặt là "code" , vậy tại sao trong hàm bác dùng (mode_tile \"code\" 2) ??? Nó có ý nghĩa ra sao???

3/- Bác đặt (setq sta (start_dialog))

Vậy làm sao có (if (= sta 2) ........

4/- Bác dùng :

(action_tile "note" "(PROGN

(write-line (strcat

(setq number (get_tile \"number\")) \"\t\"

(get_tile \"code\") \"\t\"

(get_tile \"distance\") \"\t\"

(get_tile \"note\") \"\t\") f)

(set_tile \"number\" (itoa (1+ (atoi number))))

(mode_tile \"code\" 2)

)")

Như vậy nếu cái key "note" không được kich hoạt (nhập số liệu) thì cái dòng dũ liệu đó có được nhập vào Excel hay không??? Vì thực tế có thể sẽ có những dòng dữ liệu không cần phải nhập ghi chú bác ạ...

5/- Theo mình hiểu thì cái (done_dialog) là hàm đóng hộp thoại lại. Vậy (done_dialog 2) phải chăng là vừa đóng hộp thoại vừa gán cho cái biến sta giá trị là 2 phải không bác????

 

Vài câu hỏi làm phiền bác, mong bác chớ giận và giải đáp giùm, thực tình cái dialog này mình chưa rõ lắm, nhất là việc sử dụng nó cho vòng lặp bác ạ.

Chúc bác khỏe và vui.

 

Mỗi người có mỗi thuật toán khác nhau và cách viết cũng khác nhau. Chắc mình là dân a-ma-tơ , không phải programmer chuyên nghiệp nên viết hơi khó hiểu xí. Mình xin giải thích mấy cái thắc mắc của bác như sau:

1. hàm mode_tile gán trạng thái cho nút điều khiển. 0: mở 1: đóng 2: Hiện hành (Tức là con trỏ nhảy vào nó nếu =2)

2. Tương tựu như 1, ở đây cái number tự gia tăng số liệu nên mình cho con trỏ nhảy vào code luôn (mode_tile "code" 2)

3. Đúng là nếu note không được kích hoạt thì dữ liệu không được ghi. Ở đây mình không tạo 1 button ghi dữ liệu nên dùng cái note này thay thế

nếu bỏ qua ghi chú thì từ distance mình TAB- TAB qua (để trống nhưng phải cho con trỏ nhảy qua nó)

4. hàm (done_dialog 2) là đóng hộp thoại và trả về giá trị 2. Mặc định nút ok trả ra 1, cancel trả ra 0

Thường dùng kiểu này nhận biết ngừoi dùng đã bấm cái gì để thoát hộp thoại-lưu vào sta (không nhất thiết phải ok, cancel mới thoát)

sau đó dùng sta để xử lý. Trong trường hợp muốn đóng tạm thời thì dùng vòng lặp (ví dụ sta < 2 (ok, cancel) mới thoat khỏi vòng lặp)

 

(setq sta 2)

(while (> sta 1)

...

(action_tile "button1" "(done_ dialog 3)")

(action_tile "button2" "(done_ dialog 31)")

(action_tile "button3" "(done_ dialog 9)")

...

(setq sta (start_dialog))

 

(cond

((= sta 0) (alert "ban da bam nut cancel"))

 

((= sta 3) (alert "ban da bam nut 1"))

((= sta 31) (alert "ban da bam nut 2"))

.....

 

)

(đone_ dialog)

(unload_dialog id) <--- mấy cái này là ví dụ cho dễ hiểu thôi nghe.

 

Hy vọng là mình nói không trật chổ nào, mấy bác khác có j chỉ giáo thêm. Thanks

  • 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
phamthanhbinh    3.123
Mỗi người có mỗi thuật toán khác nhau và cách viết cũng khác nhau. Chắc mình là dân a-ma-tơ , không phải programmer chuyên nghiệp nên viết hơi khó hiểu xí. Mình xin giải thích mấy cái thắc mắc của bác như sau:

1. hàm mode_tile gán trạng thái cho nút điều khiển. 0: mở 1: đóng 2: Hiện hành (Tức là con trỏ nhảy vào nó nếu =2)

2. Tương tựu như 1, ở đây cái number tự gia tăng số liệu nên mình cho con trỏ nhảy vào code luôn (mode_tile "code" 2)

3. Đúng là nếu note không được kích hoạt thì dữ liệu không được ghi. Ở đây mình không tạo 1 button ghi dữ liệu nên dùng cái note này thay thế

nếu bỏ qua ghi chú thì từ distance mình TAB- TAB qua (để trống nhưng phải cho con trỏ nhảy qua nó)

4. hàm (done_dialog 2) là đóng hộp thoại và trả về giá trị 2. Mặc định nút ok trả ra 1, cancel trả ra 0

Thường dùng kiểu này nhận biết ngừoi dùng đã bấm cái gì để thoát hộp thoại-lưu vào sta (không nhất thiết phải ok, cancel mới thoát)

sau đó dùng sta để xử lý. Trong trường hợp muốn đóng tạm thời thì dùng vòng lặp (ví dụ sta

 

(setq sta 2)

(while (> sta 1)

...

(action_tile "button1" "(done_ dialog 3)")

(action_tile "button2" "(done_ dialog 31)")

(action_tile "button3" "(done_ dialog 9)")

...

(setq sta (start_dialog))

 

(cond

((= sta 0) (alert "ban da bam nut cancel"))

 

((= sta 3) (alert "ban da bam nut 1"))

((= sta 31) (alert "ban da bam nut 2"))

.....

 

)

(đone_ dialog)

(unload_dialog id)

 

Hy vọng là mình nói không trật chổ nào, mấy bác khác có j chỉ giáo thêm. Thanks

Chào bác npham,

Nhờ bác chỉ dạy và tham khảo thêm các bác khác, mình làm thử cái này hơi thừa vì chưa chắc có ai cần dùng. Song mình gửi lên để mong các bác góp ý thêm xem còn chỗ nào bất hợp lý. Đề bài vẫn là của bạn Trang72 thôi, còn đáp án thì có khác chút đỉnh với của bác. Tuy cũng ra được cái hộp thoại nhưng chưa được như mong muốn nên nhờ các bác chỉ thêm.

1/- file lisp

(defun c:cvs ( )
(defun saveVars()
 (setq STT (get_tile "ebox1")
          Ma (get_tile "ebox2")
          KC (get_tile "ebox3")
          GC (get_tile "ebox4")
  )
)

(setq filename (getfiled "Select a File" "" "xls" 1))
(setq f (open filename "w")) 
(setq sta 1)
(while (> sta 0)

(setq dcl_id (load_dialog "NHAPLIEU.dcl"))
(if (not (new_dialog "NHAPLIEU" dcl_id) ) (exit))

(action_tile "cancel" "(setq ddiag 1) (done_dialog 0)")
(action_tile "accept" "(setq ddiag 2) (saveVars) (done_dialog 1)") 
(action_tile "zoom" "(setq ddiag 3) (done_dialog 2)")
(setq sta (start_dialog))

 (if (= ddiag 1)
    (progn
         (princ "\n \n ...EXAMPLE Cancelled. \n ")
    )
 )
 (if (= ddiag 2)
    (progn
    (setq retlist (strcat stt "\t" ma "\t" kc "\t" gc "\t"))
    (princ "\n")
    (princ retlist)     
    (write-line retlist f )    
    )
 )
 (if (= ddiag 3)
     (progn
     (command "zoom" "e")
     (alert "\n Khoa zoom bi nhan")
     (SSGET)
     )
 )

)
(close f )
(done_dialog)
(unload_dialog dcl_id)
(princ)

) 

 

2/- File dcl:

 

NHAPLIEU : dialog {
 label = "Nhap so lieu sang Excel";
 : column {
   : boxed_row {   
     label = "Data input";   
     : edit_box { label = "STT"; key = "ebox1"; }
     : edit_box { label = "Ma so"; key = "ebox2"; }
     : edit_box { label = "Khoang cach"; key = "ebox3"; }
     : edit_box { label = "Ghi chu"; key = "ebox4"; }
   }
   : row {
     label = "Function";
     ok_cancel; 
     : button {key = "zoom"; label = "Zoom realtime"; is_default = false; is_zoom = true; }
   }
 }
}

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
npham    75

Chưa coi kỹ lắm nhưng có mấy ý theo thiển ý của mình:

1. Biến gc trùng tên hàm autolisp

2. dùng biến sta thì không cần biến ddiag nữa.

3. key cancel và accept là mặc định nên không cần gán (done_ dialog ...)

4. Về bố cục thì đưa lệnh gọi hàm (savevar) từ chổ action... xuống chung với if (= ddiag 2) hoặc gộp chung savevar và write làm 1.

  • 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

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


×