首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JACOB SafeArray getDoubles()方法

使用JACOB SafeArray getDoubles()方法
EN

Stack Overflow用户
提问于 2011-01-18 11:36:24
回答 1查看 1.4K关注 0票数 0

我试图从Excel工作簿中提取一个双值向量。Excel看起来不返回一维数组,而是返回多维数组(维度数为2)。

我从Excel获得的数据是SafeArray格式的(我也可以有变体,但基本上是相同的问题)。

我正在寻找一种快速的方法将双重数组提取到Java对象中,而不需要循环SafeArray中的所有值。

看看SafeArray中的方法,有一个: getDoubles(int sa_idx,int nelems,double[] ja,int ja_start)。

显然,文档是空的,而且我无法确定这个方法是干什么的,因为尝试使用它没有给我任何结果。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2011-01-19 03:00:39

我假设您的数据来自电子表格(Range对象),而不是VBA代码。

在这种情况下,Excel将给您一个变体的SafeArray ( VBA术语中的Variant()),而不是双倍的SafeArray (Double()),不管单元格的内容是什么。而且,数组总是二维的,这是正确的(或者,如果范围大小正好是1x1,它将返回一个变量)。

我不熟悉JACOB,是的,文档看起来相当缺乏。难道getDoubles()只在SafeArray是双打的SafeArray时才能工作吗?你试过使用getVariants()吗?如果你能拿回什么,我们就会知道我们走的路是对的。

记住,就性能而言,你被困住了。有人(你或图书馆)将不得不写那个循环。变体不会神奇地变成双变量;必须有人遍历数组,调用Win32 VariantChangeType()或等效方法,从变体中提取双字段(在雅各布中,您显然调用了changeType()然后getDouble()),最后将结果放入JACOB数组中。我不知道雅各布会为你做这件事,还是你自己去做。

不熟悉雅各布,我不确定我是否有道理,但我希望这能有所帮助。祝好运。

PS:

我觉得我需要澄清关于打电话给VariantChangeType()的评论。这在技术上是可选的,但我发现通过VariantChangeType()或类似的方法显式地将变体转换为我感兴趣的数据类型是有益的。将数字存储为字符串或其他东西太容易了,特别是当源是像Excel这样的自由格式时。当您使用像CDbl()这样的函数时,这个API调用就是VB/VBA所调用的。请注意,要提供一个日期而不是双倍,只需一点错误的格式设置即可。

如果您是绝对肯定的,除了肯定所有的单元格都包含数字(双)和Excel将永远不会返回其他任何东西,那么一定要直接调用雅各布的getDouble()并跳过转换步骤。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4723577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档