本例实现的主要功能是读取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. navicat for mysql远程连接ubuntu服务器的mysql数据库

    经常玩服务器上的mysql数据库,但是基于linux操作Mysql多有不便,于是就想着使用GUI工具来远程操作mysql数据库.已经不是三次使用navicat-for-mysql了,但是每次连接远程服 ...

  2. CSS3概述

    首先我们了解下什么是css3,css3是css技术的一个升级.css3中并没有采用总体结构,而是采用分工协作的模块化结构. css3中的模块 模块名称 功能描述 basic box model 定义各 ...

  3. Java---SSH(MVC)面试题

    1.        谈谈你mvc的理解 MVC是Model-View-Controler的简称.即模型-视图-控制器.MVC是一种设计模式,它强制性的把应用程序的输入.处理和输出分开. MVC中的模型 ...

  4. tomcat6 高并发配置 与优化

    server.xml配置 1.  <Connectorport="8080"protocol="HTTP/1.1" 2.  maxThreads=&quo ...

  5. 初识java——java的基础语法

    标识符:计算机语言中各种符号表示某个特定含义的符号. 表示符的命名规则:1,不能用关键字或者true,false,null; 2,标识符可以包含数字,字母,下划线,美元符号. 3,标识符的首字符必须是 ...

  6. 【.Net架构】BIM软件架构03:Web管控平台MVC架构

    一.前言        上一篇讲述的是将BIM平台后台架构CoreService.sln,该解决方案主要作用是对管控平台的核心业务进行封装,然后让前端的ApiController去调用该解决方案中的对 ...

  7. STL读书笔记

    vector - 会自动增长的数组 vector又称为向量数组,他是为了解决程序中定义的数组是不能动态改变大小这个缺点而出现的.一般程序实现是在类创建的时候同时创建一个定长数组,随着数据不断被写入,一 ...

  8. JavaScript 中的undefined and null 学习

    JavaScript 中的undefined and null learn record from the definitive guide to html5 JavaScript 中有两个特殊值:u ...

  9. 【也许CTO并不是终点开篇】CTO也只不过是CTO罢了

    不想做将军的士兵不是好士兵,这句话可以有很功利的理解方式,对应到我们自己很可能是:不想做CTO的程序员不是好程序员!几年前对这句话的理解与现在有很多不同,因为我现在已经是一名中小型公司的CTO了,这句 ...

  10. 使用 Babylon.js 在 HTML 页面加载 3D 对象

    五一 Windwos Blogs 推了一篇博客, Babylon.js v3.2 发布了.因为一直有想要在自己博客上加载 3D 对象的冲动,这两天正好看到了,就动手研究研究.本人之前也并没有接触过 W ...