吉网

colesafearray

导读 很多人对colesafearray不是很了解那具体是什么情况呢,现在让我们一起来瞧瞧吧!1、如何使用COleSafeArray实现二维数组将字符串写入excel

很多人对colesafearray不是很了解那具体是什么情况呢,现在让我们一起来瞧瞧吧!

1、如何使用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。

2、当变成VT_BSTR报内存不足,求指导如何修改------解决方案--------------------可以通过另外一种写法,CRange write_range = start_range.get_Offset(COleVariant((long)7),COleVariant((long)j)) ; write_range.put_Value2((COleVariant)(str[j]));。

本文【colesafearray】到此讲解完毕了,希望对大家有帮助。