找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 5502|回复: 31

[分享]:一个表格类,提供.h文件供参考

[复制链接]
发表于 2005-11-3 09:21:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
包内有例子程序及该表格类的.h文件,提供大家一个思路,供参考。该类现可输出excel表格,可以扩充生成word表格,在cad里出表等。各位有什么高见,欢迎探讨。
创建表格见下帖贴图。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
 楼主| 发表于 2005-11-3 09:25:09 | 显示全部楼层
创建表格语句,该类还可轻松实现数据行之间的错格显示。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-3 09:48:07 | 显示全部楼层
包内的.h文件,并不是一个完整的类。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-3 10:30:02 | 显示全部楼层
当然,我没有上传对应的.cpp文件,我只是想提供一个思路,excel表格还可以这样绘制。也希望大家留下自己的高见。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-5 01:36:00 | 显示全部楼层
在实际的工作中,我们经常要对一些表格数据进行处理,如果先把这些表格数据通过Excel处理,再导入到AutoCAD,那绝对会起到事半功倍的效果。随着Automation编程技术的出现,我们可以很方便地实现这一点了,我编的TrueTable就是采用了这个技术,下面是其中动态读取Excel数据的模块,不过进行了些简化,功能是动态关联Excel,然后读取其数据,并将这些数据打印在文本域中。
??
??//动态从Excel读取数据
??int DynamicReadFromExcel()
??{
?? //常用变量定义
?? _Application app;
?? Workbooks books;
?? _Workbook book;
?? Worksheets sheets;
?? _Worksheet sheet;
?? Range range;
?? Range iCell;
??
?? LPDISPATCH lpDisp;
?? COleVariant
?? covTrue((short)TRUE),
?? covFalse((short)FALSE),
?? covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
?? COleVariant vResult;
??
?? //采用MFC方式初始化COM库,程序结束时COM库会自动释放
?? if(!AfxOleInit())
?? {
?? MessageBox(NULL,"初始化COM支持库失败!\n无法控制Excel!", \
?? "TrueTable",MB_ICONERROR | MB_OK);
?? return RTERROR;
?? }
??
?? //关联已经运行的Excel实例
?? CLSID clsid;
?? CLSIDFromProgID(L"Excel.Application", &clsid);
?? IUnknown *pUnk = NULL;
?? IDispatch *pRunDisp = NULL;
??
?? for(long i=1;i<=5;i++) //做5次尝试
?? {
?? HRESULT hr = GetActiveObject(clsid, NULL, (IUnknown**)&pUnk);
?? if(SUCCEEDED(hr))
?? {
?? hr = pUnk->QueryInterface(IID_IDispatch, (void **)&pRunDisp);
?? break;
?? }
?? ::Sleep(10);
?? }
??
?? if (!pRunDisp)
?? {
?? ::MessageBox(NULL, "没有发现Excel!", "TrueTable", MB_ICONHAND);
?? return RTERROR;
?? }
??
?? if (pUnk) pUnk->Release();
??
?? //关联Excel
?? app.AttachDispatch (pRunDisp);
??
?? //得到当前活跃sheet
?? //如果有单元格正处于编辑状态中,此操作不能返回,会一直等待
?? lpDisp=app.GetActiveSheet();
?? if(lpDisp==NULL)
?? {
?? MessageBox(NULL, "没有发现有效的表格!", \
?? "TrueTable",MB_ICONERROR | MB_OK);
?? app.ReleaseDispatch ();
??
?? return RTERROR;
?? }
?? sheet.AttachDispatch(lpDisp);
??
?? //已经使用的行数:
?? long row_num;
?? range.AttachDispatch(sheet.GetUsedRange());
?? range.AttachDispatch(range.GetRows());
?? row_num=range.GetCount();
??
??
?? //已经使用的列数:
?? long col_num;
?? range.AttachDispatch(sheet.GetUsedRange());
?? range.AttachDispatch(range.GetColumns());
?? col_num=range.GetCount();
??
?? //已经使用区域的起始行、列:
?? range.AttachDispatch(sheet.GetUsedRange());
?? long StartRow=range.GetRow(); //起始行
?? long StartCol=range.GetColumn(); //起始列
??
?? //读取sheet名
?? CString SheetName=sheet.GetName();
?? //ads_printf("\n%s",SheetName);
?? if(col_num<2 && row_num<2) //此sheet为空
?? {
?? MessageBox(NULL,"\n当前表格没有数据!", \
?? "TrueTable",MB_ICONERROR | MB_OK);
?? app.ReleaseDispatch ();
??
?? return RTERROR;
??
?? }
?? else
?? {
?? ads_printf("\n表格%s共%d行,%d列",SheetName,row_num,col_num);
?? }
??
??
??
?? //得到全部Cells,此时,range是cells的集合
?? range.AttachDispatch(sheet.GetCells());
??
??
?? //读写数据了
?? CString cstr;
?? ads_printf("\n");
?? for(long i=StartRow;i?? {
??
?? for(long j=StartCol;j?? {
??
?? //读取单元格文本
?? iCell.AttachDispatch(range.GetItem (COleVariant(i),COleVariant(j)).pdispVal );
?? vResult =iCell.GetText();
?? cstr=vResult.bstrVal;
??
?? //写单元格文本
?? ads_printf("%s ",(LPTSTR)cstr);
??
?? }
?? ads_printf("\n");
?? }
??
??
?? //释放Dispatch
?? iCell.ReleaseDispatch ();
?? range.ReleaseDispatch ();
?? sheet.ReleaseDispatch ();
?? sheets.ReleaseDispatch ();
?? book.ReleaseDispatch ();
?? books.ReleaseDispatch ();
?? app.ReleaseDispatch ();
??
?? return RTNORM;
??
??}
??
?? 是不是很简单,如果要输出到Excel的话,只要稍加修改就OK了,输出的关键函数就是:
?? iCell.SetItem(COleVariant(i),COleVariant(j),COleVariant(cstr));
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-5 09:26:58 | 显示全部楼层
欢迎大家多讨论,请一楼给出程序!大家共同研究,共同进步!利用EXcel技术也没有什么好保密的,否则你就不要收爱心币.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-7 09:15:47 | 显示全部楼层
这个类,只是将设定单元格内容(或画表格)的语句封装了,没什么技术可言,提供大家个思路,适合开发者用。我认为和5楼的TrueTable的适用范围有些区别的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-7 09:19:36 | 显示全部楼层
没有完整的类吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-7 09:24:20 | 显示全部楼层
xysyr  


,最好提供详细的代码,供大家共同探讨
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-7 11:17:28 | 显示全部楼层
欢迎大家多讨论,
恳请xysyr 给出程序!以便大家共同研究,共同进步!利用EXcel技术也没有什么好保密的,否则你就不要收爱心币.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-3-30 13:48:50 | 显示全部楼层
就是,要多讨论呀,技术才会进步的!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-5-26 09:00:57 | 显示全部楼层
前不久看了一个在CAD下关联Excel的软件,
在Excel里面编辑的情况,可以实时的在CAD里面显示出来,
实在做得太完美了,用途当然是大大的有,
但是就是不知道,哪种效果是怎样实现的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-5-26 09:36:31 | 显示全部楼层
实际上用objectarx自己有一个表格类acdbtable,也有一个acdbdatatable数据表类,只要把他们使用好了,基本上也够用了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-5-26 11:22:16 | 显示全部楼层
学习一下
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-5-28 08:26:22 | 显示全部楼层
acdbtable有具体的例子学习的么?
EXCEl和CAD关联写出ARX程序还是停方便的。:)
最好哪个大侠贴个例子出来学习下就好了,方便大家进步!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-11 06:39 , Processed in 0.479312 second(s), 61 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表