在autocad中动态读取excel数据(c#) - 精华帖集合
www.dimcax.com
在autocad中动态读取excel数据(c#)
在autocad中动态读取excel数据(c#) 下面的代码演示了如何连接excel文件,并读入相关的数据来更改圆的大小。
using system;
using autodesk.autocad.runtime;
using system.data.oledb;
using system.data;
using autodesk.autocad.editorinput;
using autodesk.autocad.applicationservices;
using autodesk.autocad.databaseservices;
namespace classlibrary
{
public class arxclass
{
[commandmethod("test")]
static public void test()
{
string filepath = "c:\\test.xls";//excel文件名
//excel连接字符串
string mystring = "provider = microsoft.jet.oledb.4.0 ; data source = '" + filepath + "';extended properties=excel 8.0";
oledbconnection cnnxls = new oledbconnection(mystring);
//选择test.xls中的sheet1表格,请注意在表格名最后加上$符号
oledbdataadapter myda = new oledbdataadapter("select * from [sheet1$]", cnnxls);
dataset myds = new dataset();
myda.fill(myds);
system.data.datatable table = myds.tables[0];//获取sheet1表格所对应的datatable对象,这样才能进行相关的操作
//选取sheet表格中第二行第一列的数据(请注意,datatable对象认为excel表格的第一行为表格的标题)
double radius = convert.todouble(table.rows[0][0]);
editor ed = application.documentmanager.mdiactivedocument.editor;
objectid id = ed.getentity("select circle").objectid;
database db=hostapplicationservices.workingdatabase;
using (transaction trans=db.transactionmanager.starttransaction())
{
circle cir = (circle)trans.getobject(id, openmode.forwrite);
cir.radius = radius;
trans.commit();
}
}
}
}
复制代码
圆的半径变成了excel文件中对应的数据。
坚决支持老大!
我现在还没运行程序,感觉和vba读取excel一样,都是activex,要引用ado,是这样吗?
原帖由 ahlzl 于 2006-8-14 10:16 am 发表
坚决支持老大!
我现在还没运行程序,感觉和vba读取excel一样,都是activex,要引用ado,是这样吗?
不用引用ado,也不是activex,用的技术是ado.net。
c#最适合开发autocad,因为它拥有vb容易的特点,却具有vc++的强大功能。
double radius = convert.todouble(table.rows[0][0]); 出错!!!
是 table.rows[0][0]——出错!
[ ]
程序我调试过了,没错的。excel的第一行请加入标题内容(如半径),在第二行填入半径值。
c#最适合开发autocad,因为它拥有vb容易的特点,却具有vc++的强大功能。
多谢老大指点!ok了。这是vb.net的代码,以实际行动坚持才鸟!
autodesk.autocad.applicationservices
imports autodesk.autocad.databaseservices
imports autodesk.autocad.editorinput
imports autodesk.autocad.runtime
imports system.data.oledb
public class class1
<commandmethod("test")>
public sub test()
'excel文件名
dim filepath as string = "c:\test.xls"
'excel连接字符串
dim mystring as string = "rovider = microsoft.jet.oledb.4.0 ; data source = '" & filepath & "';extended properties=excel 8.0"
dim cnnxls as oledbconnection = new oledbconnection(mystring)
'选择test.xls中的sheet1表格,请注意在表格名最后加上$符号
dim myda as oledbdataadapter = new oledbdataadapter("select * from [sheet1$]", cnnxls)
dim myds as dataset = new dataset()
myda.fill(myds)
'获取sheet1表格所对应的datatable对象,这样才能进行相关的操作
dim table as system.data.datatable = myds.tables(0)
'选取sheet表格中第二行第一列的数据(请注意,datatable对象认为excel表格的第一行为表格的标题,必须有内容,不能空白)
dim radius as double = convert.todouble(table.rows(0)(0))
dim db as database = hostapplicationservices.workingdatabase
dim ed as editor = application.documentmanager.mdiactivedocument.editor
dim id as objectid = ed.getentity("请选择一个圆:").objectid
using trans as transaction = db.transactionmanager.starttransaction
dim cir as circle = trans.getobject(id, openmode.forwrite)
cir.radius = radius
trans.commit()
end using
end sub
end class
复制代码
圆的半径变成了excel文件中对应的数据。
再问一下,老大帖子中的代码,是直接从net编程器复制过来的吗?我的怎么就没颜色了?
另,才鸟能不能开一个新贴,讲一下如何自定义控件,。
原帖由 ahlzl 于 2006-8-14 05:38 pm 发表
再问一下,老大帖子中的代码,是直接从net编程器复制过来的吗?我的怎么就没颜色了?
用的是一个.net的插件,可以在这里下载:
另,才鸟能不能开一个新贴,讲一下如何自定义控件,。
自定义控件可以放在界面编程里面,我会发相关的帖子。
c#最适合开发autocad,因为它拥有vb容易的特点,却具有vc++的强大功能。
copysourceashtml 2.0.0
copysourceashtml 2.0.0 installer (163 kb) (built and tested on microsoft visual studio 2005)
copysourceashtml 2.0.0 source (91 kb) (now includes build and installer scripts)
csah 2.0.0 is the first official release of copysourceashtml for microsoft visual studio 2005. this release has a leaner, meaner, refactored codebase that fixes a few minor defects and takes advantage of new features in visual studio 2005 and .net 2.0. derick bailey and jason haley, thank you both for releasing your port in a much more timely fashion.
e文盲,
还是不太明白
楼主的代码是在那个程序里面运行的啊
小人不才,请教楼主!!!