本例实现的主要功能是读取excel文档中的内容,其次是将按照读取的信息在当前cad图纸中添加相应的实体。下面先介绍实现代码:

    CString excelPath; //外部excel文档的地址
UpdateData();//将对话框中的数据复制给变量
if (m_excelPath == _T(""))
{
MessageBox(_T("地址不能为空,请选择Excel文档!"));
return;
}
else
{
excelPath = m_excelPath;//m_excelPath是与地址对话框绑定的变量
} //设置基点,作为自动排布的所有实体的基点
AcGePoint3d ptBase;
ptBase.x = m_pointX;
ptBase.y = m_pointY;
ptBase.z = m_pointZ; //打开指定的Excel文档
CoInitialize(NULL);//初始化
if (!m_excel.pApp.CreateDispatch(_T("Excel.Application")))
{
MessageBox(_T("创建Excel服务失败!"));
exit();
}
m_excel.pApp.put_Visible(FALSE);
m_excel.pBooks.AttachDispatch(m_excel.pApp.get_Workbooks(), true);
m_excel.pBook.AttachDispatch(m_excel.pBooks.Open(excelPath, vtMissing, vtMissing, vtMissing,
vtMissing, vtMissing, vtMissing, vtMissing, vtMissing, vtMissing, vtMissing, vtMissing,
vtMissing, vtMissing, vtMissing));
m_excel.pSheets.AttachDispatch(m_excel.pBook.get_Worksheets(), true);
m_excel.pSheet.AttachDispatch(m_excel.pSheets.get_Item(_variant_t("sheet1")), true);
m_excel.pRange.AttachDispatch(m_excel.pSheet.get_Cells(), true); //获得Excel文档中已经使用的行数和列数
m_excel.pRange = m_excel.pSheet.get_UsedRange();//获得列数
m_excel.pRange = m_excel.pRange.get_Columns();
int colNum = m_excel.pRange.get_Count(); m_excel.pRange = m_excel.pSheet.get_UsedRange();//获得行数
m_excel.pRange = m_excel.pRange.get_Rows();
int RowNum = m_excel.pRange.get_Count(); //读取Excel中指定单元的数据
for (int i = ; i <= RowNum; i++)
{
CString ptX = m_excel.GetCString(, i);
CString ptY = m_excel.GetCString(, i);
CString ptZ = m_excel.GetCString(, i);
CString rad = m_excel.GetCString(, i); //按照excel文档中的数据转化成中心点
AcGePoint3d ptExcel;
ptExcel = strToDouble(ptX, ptY, ptZ);//将字符串型数据转换成双精度型,其中strToDouble()函数是自己所写,这里就不另外给出
double raduis ;
raduis = strToDouble(rad);//将字符串型rad转换成双精度型 //根据Excel中的图形类型,在模型空间添加相应的实体
CString grapfType = m_excel.GetCString(,i);
if (grapfType == _T("圆"))
{
//根据选择的基点设定圆的中心点
AcGePoint3d ptCenter;
ptCenter.x = ptExcel.x + ptBase.x;
ptCenter.y = ptExcel.y + ptBase.y;
ptCenter.z = ptExcel.z + ptBase.z;
AcGeVector3d vec(,,);
//定义实体圆
AcDbCircle *pCir = new AcDbCircle(ptCenter, vec, raduis);
PostToModelSpace(pCir);
}
if (grapfType == _T("直线"))
{
CString endPointX = m_excel.GetCString(, i);
CString endPointY = m_excel.GetCString(, i);
CString endPointZ = m_excel.GetCString(, i);
AcGePoint3d ptMid = strToDouble(endPointX, endPointY, endPointZ);
//按照选择的基点设置起点和终点
AcGePoint3d startPoint;//起点
startPoint.x = ptExcel.x + ptBase.x;
startPoint.y = ptExcel.y + ptBase.y;
startPoint.z = ptExcel.z + ptBase.z;
AcGePoint3d endPoint;//终点
endPoint.x = ptMid.x + ptBase.x;
endPoint.y = ptMid.y + ptBase.y;
endPoint.z = ptMid.z + ptBase.z; //将直线添加到模型空间
AcDbLine *pLine = new AcDbLine(startPoint, endPoint);
PostToModelSpace(pLine);
}
}
//完成所有操作后一定要清除掉excel文档相关的内容
m_excel.pRange.ReleaseDispatch();
m_excel.pSheet.ReleaseDispatch();
m_excel.pSheets.ReleaseDispatch();
m_excel.pBook.ReleaseDispatch();
m_excel.pBooks.ReleaseDispatch();
m_excel.pApp.Quit();
m_excel.pApp.ReleaseDispatch();

这里只是一个简单的例子,对于excel文档的读取基本操作都有涉及到。

按照excel文档中的内容在当前cad图纸中自动排布实体的更多相关文章

  1. struts2中利用POI导出Excel文档并下载

    1.项目组负责人让我实现这个接口,因为以前做过类似的,中间并没有遇到什么太困难的事情.其他不说,先上代码: package com.tydic.eshop.action.feedback; impor ...

  2. VSTO 得到Office文档的选中内容(Word、Excel、PPT、Outlook)

    原文:VSTO 得到Office文档的选中内容(Word.Excel.PPT.Outlook) 目的:得到在Word.Excel.PPT.Outlook中选中的一段内容. Word: private ...

  3. Python实现读取Excel文档中的配置并下载软件包

    问题:现在遇到这样一个问题,服务器存储了很多软件包,这些包输入不同的产品,每个产品都有自己的配置,互相交叉,那么到底某一产品所有配置的软件包下载后,占用多大空间呢? 分析:从这个问题入手,了解到:软件 ...

  4. C#编程实现Excel文档中搜索文本

    有了在Word文档中编程实现搜索文本的经验,在Excel中实现这个功能也并非难事. 打开Excel的VBA帮助,查看Excel的对象模型,很容易找到完成这个功能需要的几个集合和对象:Applicati ...

  5. 在MFC中怎么获得Excel文档中已经使用了的行数和列数

    _Worksheet ws;Range range; range = ws.GetUsedRange();//获得Worksheet已使用的范围range = range.GetRows();   / ...

  6. excel文档中嵌入对象(excel、word等)

    //测试环境office2016.office365 string InsertPath= @"E:\\新建文件夹\\2.xls";//插入的文档路径 string openfil ...

  7. C# 设置Excel打印选项及打印excel文档

    C# 设置Excel打印选项及打印excel文档 打印Excel文档是一个很常见的操作,但有时候我们会碰到各种不同的打印需求,例如只打印一个Excel工作表的其中一部分,或打印时每页都有表头,或把工作 ...

  8. 基于DevExpress实现对PDF、Word、Excel文档的预览及操作处理

    http://www.cnblogs.com/wuhuacong/p/4175266.html 在一般的管理系统模块里面,越来越多的设计到一些常用文档的上传保存操作,其中如PDF.Word.Excel ...

  9. C# 保护Excel文档

    C# 保护Excel文档 说到保护excel文档,我们首先想到的是密码保护的方式,但excel与word有点不一样,一般情况下,每个excel工作薄都或多或少地含有一定数量的工作表,因此保护excel ...

随机推荐

  1. Jmeter(二十四)_服务器性能监控

    下载插件 1.访问网址http://jmeter-plugins.org/downloads/all/,下载三个文件.其中JMeterPlugins-Standard和JMeterPlugins-Ex ...

  2. C# /VB.NET 创建PDF项目符号列表和多级编号列表

    使用项目符号和编号,可以让文档的层次结构更清晰.更有条理,也更容易突出重点.在编辑文档的过程中,我个人也比较偏爱项目标号来标注文章重点信息.在之前的文章中,介绍了如何在Word中来创建项目标号和编号列 ...

  3. [Other]在 Docker 当中搭建 Docfx 站点

    一.简介 Docfx 是微软开发的一款开源的文档生成工具,其默认支持 C# 与 VB.Net 这两种项目的文档生成,支持 DotNetCore 项目,并且还可以打包成一个静态的 Web 站点,而且还支 ...

  4. Spring定时任务(一):SpringTask使用

    背景:在日常开发中,经常会用到任务调度这类程序.实现方法常用的有:A. 通过java.util.Timer.TimerTask实现. B.通过Spring自带的SpringTask. C. 通过Spr ...

  5. Day5_模块与包(import)(form......import....)

    一个文件中定义了很多模块,然后可以再别的文件中调用这几个模块. #导入模块(import) #1,执行源文件 #2,产生以源文件为基础的全局名称空间.

  6. GitHub awesome Resource

    各种Awesome技术资源的资源聚合: https://github.com/sindresorhus/awesome Contents Platforms Programming Languages ...

  7. DjangoUeditor项目的集成

    DjangoUeditor这个项目,出品人已经不再提供维护支持. 最近在一个使用到aliyun oss的项目里集成了一次这个东西,当然我之前在普通文件上传的北京下已经集成过很多次了. 主要修改的东西就 ...

  8. Neo4j安装后的密码修改

    首先默认用户名/密码是neo4j/neo4j. 在安全验证打开的时候,你访问服务器/db/data之类的地址可能会提示您以下信息: { "password_change" : &q ...

  9. SQL Server 表的管理_关于事务的处理的详解(案例代码)

    SQL Server 表的管理_关于事务的处理的详解(案例代码) 一.SQL 事务 1.1SQL 事务 ●事务是在数据库上按照一定的逻辑顺序执行的任务序列,既可以由用户手动执行,也可以由某种数据库程序 ...

  10. 学习CountDownLatch

    对比 使用CyclicBarrier 上次用Barrier方式实现了线程等待一组完成,这次用CountDownLatch来实现 我的理解CountDownLatch 采用的方式是计数器方式,每执行完一 ...