怎么使用COleSafeArray实现二维数组将字符串写入excel

 我来答
就烦条0o
2016-01-11 · 知道合伙人软件行家
就烦条0o
知道合伙人软件行家
采纳数:33315 获赞数:46497
从事多年系统运维,喜欢编写各种小程序和脚本。

向TA提问 私信TA
展开全部
如何使用COleSafeArray实现二维数组将字符串写入excel
// VARTYPE vt = VT_BSTR ; /*数组元素的类型,string*/
VARTYPE vt = VT_I4; /*数组元素的类型,long*/

SAFEARRAYBOUND sabWrite[2]; /*用于定义数组的维数和下标的起始值*/

sabWrite[0].cElements = 1;

sabWrite[0].lLbound = 0;

sabWrite[1].cElements = 3;

sabWrite[1].lLbound = 0;

COleSafeArray olesaWrite;

olesaWrite.Create(vt, sizeof(sabWrite)/sizeof(SAFEARRAYBOUND), sabWrite);

/*通过指向数组的指针来对二维数组的元素进行间接赋值*/

long (*pArray)[2] = NULL;

olesaWrite.AccessData((void **)&pArray);

memset(pArray, 0, sabWrite[0].cElements * sabWrite[1].cElements * sizeof(long));

/*释放指向数组的指针*/

olesaWrite.UnaccessData();

pArray = NULL;

/*对二维数组的元素进行逐个赋值*/

long index[2] = {0, 0};

long lFirstLBound = 0;

long lFirstUBound = 0;

long lSecondLBound = 0;

long lSecondUBound = 0;

olesaWrite.GetLBound(1, &lFirstLBound);

olesaWrite.GetUBound(1, &lFirstUBound);

olesaWrite.GetLBound(2, &lSecondLBound);

olesaWrite.GetUBound(2, &lSecondUBound);

for (long i = lFirstLBound; i <= lFirstUBound; i++)

{

index[0] = i ;

for (long j = lSecondLBound; j <= lSecondUBound; j++)

{

index[1] = j;

long lElement = str[j];

//CString lElement = ch;

olesaWrite.PutElement(index, &lElement);

}

}

/*把ColesaWritefeArray变量转换为VARIANT,并写入到Excel表格中*/

VARIANT varWrite = (VARIANT)olesaWrite;

range.put_Value2(varWrite);
这样能将输入的整形写入excel,当变成VT_BSTR报内存不足,求指导如何修改
------解决方案--------------------
可以通过另外一种写法,
CRange write_range = start_range.get_Offset(COleVariant((long)7),COleVariant((long)j)) ;
write_range.put_Value2((COleVariant)(str[j]));
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式