CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

ObjectARX 开发指南

相关分类

数据链路代码示例

2022-12-31 20:25| 发布者: admin| 查看: 331| 评论: 0|来自: AutoCAD

下面的代码示例提供了一种方法,说明如何正确设计代码以将 AutoCAD 表数据链接到 Excel 电子表格。此处的示例假定文件的名称为“工作表 1”。

// Create a data link and set it to the cell(2,2) of a selected table.
void createAndSetDataLink()
{
	// Select a table
	AcDbTable *pTbl = NULL;
	if(NULL == (pTbl =
	AcDbTable::cast(selectEntity(_T("\nSelect a table: "))))) 
	{
		acutPrintf(ACRX_T("\nSelected entity was not a table!"));
		return;
	}
	// Get an Excel file
	//
	struct resbuf *result; 
	int rc; 
	if ( (result = acutNewRb(RTSTR)) == NULL)
	{
		pTbl->close();
		acutPrintf(ACRX_T("\nUnable to allocate buffer!")); 
		return;
	}
	result->resval.rstring=NULL; 
	rc = acedGetFileD(ACRX_T("Excel File"),	// Title
						ACRX_T("c:/temp"),	// Default pathname  
						ACRX_T("xls"),	//Default extension
						16,					// Control flags
						result);	// The path selected by the user.
	if (rc != RTNORM) 
	{
		pTbl->close();
		acutPrintf(ACRX_T("\nError in selecting an EXCEL file!")); 
		return;
	}
	// Retrieve the file name from the ResBuf.
	ACHAR fileName[MAX_PATH];
	_tcscpy(fileName, result->resval.rstring);
	rc = acutRelRb(result);
	static ACHAR sMyDataLink[MAX_PATH] = ACRX_T("MyDataLinkTest");
	// Get the Data Link Manager.
	Acad::ErrorStatus es;
	AcDbDataLinkManager* pDlMan = acdbHostApplicationServices()->workingDatabase()->getDataLinkManager();
	assert(pDlMan);
	AcDbObjectId idDL;
	AcDbDataLink *pDL = NULL;	
	// Check if a Data Link with the name already exists. If so, remove it.
	if( pDlMan->getDataLink(sMyDataLink, pDL, AcDb::kForRead) == Acad::eOk && pDL)
	{
		pDL->close();
		es = pDlMan->removeDataLink(sMyDataLink, idDL);
		if( es != Acad::eOk )
		{
			pTbl->close();
			acutPrintf(ACRX_T("\nError in removing the Data Link!"));
			return;
		}
	}
	// Create the Data Link with the name.
	es = pDlMan->createDataLink(ACRX_T("AcExcel"), sMyDataLink, ACRX_T("This is a test for Excel type data link."), fileName, idDL);
	if( es != Acad::eOk )
	{
		pTbl->close();
		acutPrintf(ACRX_T("\nError in creating Data Link!\nPlease check if there is a sheet named 'Sheet1' in the XLS file."));
		return;
	}
	// Open the Data Link.
	es = acdbOpenObject<AcDbDataLink>(pDL, idDL, AcDb::kForWrite);
	if ( es != Acad::eOk || !pDL )
	{
		pTbl->close();
		acutPrintf(ACRX_T("\nError in opening the Data Link object!")); 
		return;
	}
	//  Set options of the Data Link
	es = pDL->setOption(AcDb::kDataLinkOptionPersistCache);
	es = pDL->setUpdateOption(pDL->updateOption() | AcDb::kUpdateOptionAllowSourceUpdate);
	
	// Close the Data Link.
	pDL->close();
	// Set data link to the table object at cell(2,2).
	es = pTbl->setDataLink(2, 2, idDL, true);
	if( es != Acad::eOk )
	{
		pTbl->close();
		acutPrintf(ACRX_T("\nError in setting Data Link to the selected table!\nPlease check if there is a sheet named 'Sheet1' in the XLS file."));
		return;
	}
	// Don't forget to close the table object.
	es = pTbl->close();
}

路过

雷人

握手

鲜花

鸡蛋

最新评论

QQ|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 )

GMT+8, 2024-5-19 11:58

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部