#require 'win32ole' #require 'AcadHelper' load_assembly "Microsoft.Office.Interop.Excel" # add reference to Excel Interop Assembly include Microsoft::Office::Interop # bring the Interop module into the current scope require 'acmgd.dll' require 'acdbmgd.dll' #require 'ads_entity.rb' Ai = Autodesk::AutoCAD::Internal Aiu = Autodesk::AutoCAD::Internal::Utils Aas = Autodesk::AutoCAD::ApplicationServices Ads = Autodesk::AutoCAD::DatabaseServices Aei = Autodesk::AutoCAD::EditorInput Ag = Autodesk::AutoCAD::Geometry Ar = Autodesk::AutoCAD::Runtime def print_message(msg) app = Aas::Application doc = app.document_manager.mdi_active_document ed = doc.editor ed.write_message(msg) end def ac_pt3d(x,y,z=0) begin pt3d = Ag::Point3d.new(x, y, z) rescue Exception => e puts_ex e end pt3d end def create_line(start_pt, end_pt) app = Autodesk::AutoCAD::ApplicationServices::Application doc = app.DocumentManager.MdiActiveDocument db = doc.Database app = Autodesk::AutoCAD::ApplicationServices::Application doc = app.DocumentManager.MdiActiveDocument db = doc.Database tr = doc.TransactionManager.StartTransaction bt = tr.GetObject( db.BlockTableId, Autodesk::AutoCAD::DatabaseServices::OpenMode.ForRead) btr = tr.GetObject( db.CurrentSpaceId, Autodesk::AutoCAD::DatabaseServices::OpenMode.ForWrite) cir = Autodesk::AutoCAD::DatabaseServices::Line.new(start_pt, end_pt) #Autodesk::AutoCAD::Geometry::Point3d.new(10, 10, 0), #Autodesk::AutoCAD::Geometry::Vector3d.ZAxis, 2) btr.AppendEntity(cir) tr.AddNewlyCreatedDBObject(cir, true) tr.Commit tr.Dispose end #c_obj =System::Runtime::InteropServices::Marshal.GetActiveObject(arg) #obj = COM.new(arg) #xl = System::Runtime::InteropServices::Marshal.GetActiveObject('Excel.app') xl = Excel::ApplicationClass.new xl.visible = true filename = "C:/xl_2_acad.xlsx".to_clr_string #xl = WIN32OLE.new('Excel.Application') #xl.workbooks.methods.each{ |m| #print_message(m.to_s + "\n") #} #wb = xl.workbooks("C:/xl_2_acad.xlsx") ws = worksheet = xl.workbooks.open(filename).worksheets[1] p1 = [] p2 = [] print_message('success1') p1 << ws.range('B2'.to_clr_string).value p1 << ws.range('C2'.to_clr_string).value p2 << ws.range('B3'.to_clr_string).value p2 << ws.range('C3'.to_clr_string).value print_message('success2') pt1 = ac_pt3d(p1[0], p1[1], 0) pt2 = ac_pt3d(p2[0], p2[1], 0) print_message(pt2.to_s) print_message('success3') create_line(pt1, pt2) print_message('success4')