ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 777|回复: 5

求 xll 编程高手指导:c++, xll中返回数组的问题。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-4-18 19:58 | 显示全部楼层 |阅读模式
我编写了一个 xll 中返回 数组 的函数, 返回及参数标为  "QU"
函数体如下:
__declspec(dllexport) LPXLOPER12 WINAPI tstarray(long arg1)

{

        static XLOPER12 xlArray;
        static XLOPER12 xlValues[4];
        int i;
        for (i = 0; i < 4; ++i)
        {
                //carr[i]=i*2;
                xlValues[i].val.num = i + 10.1;
                xlValues[i].xltype = xltypeNum;
        }
        //this will generate array with 4 element 10,11,12,13

        xlArray.xltype = xltypeMulti;
        xlArray.val.array.lparray = xlValues;//&xlValues[0];
        xlArray.val.array.rows = 4;
        xlArray.val.array.columns = 1;
       
        return (LPXLOPER12)&xlArray;
}

期望在excel中连续4行返回,分别显示
10.1
11.1
12.1
13.1

可是只有第一个有显示, 就是输入 ' = tstarray() ' 的那个单元格, 如何显示全部啊,分别在4个单元格中

跪拜感谢!!!!!  




TA的精华主题

TA的得分主题

 楼主| 发表于 2018-4-18 20:00 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
我是在 excel2016中进行测试的, 分别用了2007年和2013年的sdk, 结果都一样

TA的精华主题

TA的得分主题

发表于 2018-4-25 17:06 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
你要在四个单元格中一起输入{=tstarray()}才行,这才是数组公式。

TA的精华主题

TA的得分主题

发表于 2018-4-25 17:07 | 显示全部楼层
据我所知LPXLOPER12这种类型在excel2007还不支持。它只能用LPXLOPER

TA的精华主题

TA的得分主题

发表于 2018-5-3 14:45 | 显示全部楼层
                        xl->xltype = xltypeMulti;
                        xl->val.array.rows = readDoubleWord(is);
                        xl->val.array.columns = readDoubleWord(is);
                        if(is.valid()) {
                                len = xl->val.array.rows * xl->val.array.columns+2;
                                xl->val.array.lparray = (LPXLOPER) malloc(sizeof(XLOPER) * len);
                                for(UINT i = 0; i < len-2; i++) {
                                        decode(name, is, &xl->val.array.lparray[i]);
                                }
                                LPXLOPER xlop = &xl->val.array.lparray[len-2];
                                xlop->xltype = xltypeInt;
                                xlop->val.w = 4;
                                xlop = &xl->val.array.lparray[len - 1];
                                xlop->xltype = xltypeInt;
                                xlop->val.w = 5;               
                        }

测试在填充数据时,选择了格子区域,输入公式(生成数组的函数)后加了ctrl+shirt+enter,指定的区域才显示了数据, 觉得不只量xloper结构体记录了格子区域位置,估计excel也记录了,新加了一行数据也没有生效

TA的精华主题

TA的得分主题

发表于 2018-5-3 14:51 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
用excel sdk手册中的例子,
short WINAPI xlSetExample(short int iVal)
{
   XLOPER12 xRef, xValue;

   xRef.xltype = xltypeSRef;
   xRef.val.sref.count = 1;
   xRef.val.sref.ref.rwFirst = 204;
   xRef.val.sref.ref.rwLast = 205;
   xRef.val.sref.ref.colFirst = 1;
   xRef.val.sref.ref.colLast = 1;
   xValue.xltype = xltypeInt;
   xValue.val.w = iVal;
   Excel12(xlSet, 0, 2, (LPXLOPER12)&xRef, (LPXLOPER12)&xValue);
   return 1;
}
xlSet填充网格偶尔才正常,多数情况都不正常,原因不明
有老外用com方式来实现,参考http://excelmvf.sourceforge.net/,感觉与xll方式差异太多,没有细看
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-26 09:46 , Processed in 0.040819 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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