本例实现的主要功能是读取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. struts2线程安全

     struts2线程安全 2012-02-16 21:07:58 分类: 系统运维 问题:Struts 2 Action对象为每一个请求产生一个实例,因此没有线程安全问题.Spring的Ioc容器管理 ...

  2. Ajax的简单使用

    仅介绍Ajax的使用,让入门小白快速上手 //请自行引入jQuery库文件 <script type="text/javascript"> $(function() { ...

  3. Hazelcast3.2文档目录翻译

    整理google共享磁盘找到了2014年翻译的Hazelcast官方文档的目录,分享出来可能会对英语不好的同学有些帮助吧. The_Book_of_Hazelcast_r1.2-中文目录 The_Bo ...

  4. [C#网络应用编程]1、对进程的操作

    在.net中,Process类提供了对进程进行管理的各种方法. 一.获取进程集合的方法: Process[] myProcesses = Process.GetProcesses();  //获取本地 ...

  5. Git分支创建与合并

    分支管理是Git支持多人协作和版本控制的关键,参照廖雪峰对Git的介绍,对真实开发环境中Git的使用结合实践进行梳理. 摘自:廖雪峰的官方网站 在实际开发中,我们应该按照几个基本原则进行分支管理: 首 ...

  6. springboot + mybatis 前后端分离项目的搭建 适合在学习中的大学生

    人生如戏,戏子多半掉泪! 我是一名大四学生,刚进入一家软件件公司实习,虽说在大学中做过好多个实训项目,都是自己完成,没有组员的配合.但是在这一个月的实习中,我从以前别人教走到了现在的自学,成长很多. ...

  7. Mybatis 系列7

    上篇系列6中 简单地给mybatis的配置画上了一个句号.那么从本篇文章开始,将会介绍mapper映射文件的配置. 这是mybatis的核心之一 一定要学好 在mapper文件中,以mapper作为根 ...

  8. 一款C++写的tcp性能测试(压力测试)工具

    基线终于开发完了,自己写的服务器性能和压力承受能力到底怎么样,在网上没有找到合适的测试工具可以用.于是自己基于MFC写了一款测试工具. 启动界面如下: 设置参数后,运行如下: 运行完界面如下: 源码路 ...

  9. MDCC2013会议笔记

    技术性的Topic听的不多,也没记多少东西. 下面这些是产品设计论坛的笔记: 互联网为实体行业带来:数据驱动,用户参与,快速验证想法 体验整合:线上与线下,产品与服务,运营与营销,用户和利益相关方体验 ...

  10. 中文字体名称对照表(unicode码)及20个web安全字体

    在Web编码中,CSS默认应用的Web字体是有限的,虽然在新版本的CSS3,我们可以通过新增的@font-face属性来引入特殊的浏览器加载字体.但多数情况下,考虑各个因素的影响我们还是在尽量充分利用 ...