按照excel文档中的内容在当前cad图纸中自动排布实体
本例实现的主要功能是读取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图纸中自动排布实体的更多相关文章
- struts2中利用POI导出Excel文档并下载
1.项目组负责人让我实现这个接口,因为以前做过类似的,中间并没有遇到什么太困难的事情.其他不说,先上代码: package com.tydic.eshop.action.feedback; impor ...
- VSTO 得到Office文档的选中内容(Word、Excel、PPT、Outlook)
原文:VSTO 得到Office文档的选中内容(Word.Excel.PPT.Outlook) 目的:得到在Word.Excel.PPT.Outlook中选中的一段内容. Word: private ...
- Python实现读取Excel文档中的配置并下载软件包
问题:现在遇到这样一个问题,服务器存储了很多软件包,这些包输入不同的产品,每个产品都有自己的配置,互相交叉,那么到底某一产品所有配置的软件包下载后,占用多大空间呢? 分析:从这个问题入手,了解到:软件 ...
- C#编程实现Excel文档中搜索文本
有了在Word文档中编程实现搜索文本的经验,在Excel中实现这个功能也并非难事. 打开Excel的VBA帮助,查看Excel的对象模型,很容易找到完成这个功能需要的几个集合和对象:Applicati ...
- 在MFC中怎么获得Excel文档中已经使用了的行数和列数
_Worksheet ws;Range range; range = ws.GetUsedRange();//获得Worksheet已使用的范围range = range.GetRows(); / ...
- excel文档中嵌入对象(excel、word等)
//测试环境office2016.office365 string InsertPath= @"E:\\新建文件夹\\2.xls";//插入的文档路径 string openfil ...
- C# 设置Excel打印选项及打印excel文档
C# 设置Excel打印选项及打印excel文档 打印Excel文档是一个很常见的操作,但有时候我们会碰到各种不同的打印需求,例如只打印一个Excel工作表的其中一部分,或打印时每页都有表头,或把工作 ...
- 基于DevExpress实现对PDF、Word、Excel文档的预览及操作处理
http://www.cnblogs.com/wuhuacong/p/4175266.html 在一般的管理系统模块里面,越来越多的设计到一些常用文档的上传保存操作,其中如PDF.Word.Excel ...
- C# 保护Excel文档
C# 保护Excel文档 说到保护excel文档,我们首先想到的是密码保护的方式,但excel与word有点不一样,一般情况下,每个excel工作薄都或多或少地含有一定数量的工作表,因此保护excel ...
随机推荐
- WebService学习--(一)webservice相关概念
一.序言 大家或多或少都听过 WebService(Web服务),有一段时间很多计算机期刊.书籍和网站都大肆的提及和宣传WebService技术,其中不乏很多吹嘘和做广告的成 分.但是不得不承认的是W ...
- HashMap实现原理及源码分析(JDK1.7)
转载:https://www.cnblogs.com/chengxiao/p/6059914.html 哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技 ...
- Convert Sorted Array to Binary Search Tree(将一个有序数组转换成一颗二叉搜索树)
Given an array where elements are sorted in ascending order, convert it to a height balanced BST. Fo ...
- javascript学习(三)——常用方法(2)
一.兼容性较高的浏览器页面关闭 //关闭网页,不支持火狐(火狐返回上次浏览页面) //FireFox非window.open()等弹出页面,需要在地址栏中输入about:config, 然后将do ...
- JavaScript中对象数组 根据某个属性值进行排序
将下列对象数组,通过工资属性,由高到低排序 var BaiduUsers = [], WechatUsers = []; var User = function(id, name, phone, ge ...
- Java Selenium 定位元素 实现的一个注册功能
import java.util.List; import java.util.concurrent.TimeUnit; import org.openqa.selenium.Alert; impor ...
- 移动App开发基本技术面
1.UI布局 1.1.熟悉系统布局基本机制和使用方法 2.界面效果 2.1.熟悉系统提供的所有界面组件 2.2.熟悉各种功能界面效果的实现途径 2,3.动画等特殊UI效果的实现机制 3.网络请求 3. ...
- [开源]基于ffmpeg和libvlc的视频剪辑、播放器
[开源]基于ffmpeg和libvlc的视频剪辑.播放器 以前研究的时候,写过一个简单的基于VLC的视频播放器.后来因为各种项目,有时为了方便测试,等各种原因,陆续加了一些功能,现在集成了视频播放.视 ...
- Yii2数据接口
写接口之前先确认那你已经安装了Yii2的basic版或者advanced版,如果还没有,赶快去看这篇文章:composer安装Yii2. 现在默认你已经安装了basic版或者advanced版了,并且 ...
- css中的行高line-height
“行高”顾名思意指一行文字的高度.具体来说是指两行文字间基线之间的距离.基线实在英文字母中用到的一个概念,我们刚学英语的时使用的那个英语本子每行有四条线,其中底部第二条线就是基线,是a,c,z,x等字 ...