Excel C API 等效于 C# 中的 Interop Range.Value

Posted

技术标签:

【中文标题】Excel C API 等效于 C# 中的 Interop Range.Value【英文标题】:Excel C API equivalent of Interop Range.Value in C# 【发布时间】:2016-03-19 10:55:46 【问题描述】:

试图弄清楚如何读取引用的内容并获得与 Interop/COM 的 Range.Value 相同的结果...即返回的 object[,] 包含字符串、DateTime 和双精度值。

我正在使用 ExcelDNA(和底层 XlCall.Excel 来调用 C API)和两者...

ExcelReference.GetValue()XlCall.Excel( XlCall.xlfDeref, reference )

两者都返回一个object[,],它等效于 Interop/COM 的 Range.Value2...即返回的 object[,] 仅包含字符串和双精度值。

问题是日期以双精度返回,我无法确定该值应该是 double 还是 DateTime

【问题讨论】:

【参考方案1】:

ExcelReference.GetValue() 永远不会返回 DateTime,因为这绝不是单元格的存储值 - 它只是应用于数字(双精度)值的显示格式。货币和百分比格式类似。

您可以阅读“当前显示的单元格内容,文本形式,包括单元格格式产生的任何其他数字或符号。”使用带有 C API 的 xlfGetCell 调用,使用选项 53。但是,您必须自己确定字符串是否代表日期/时间。

您也可以将“单元格的数字格式作为文本读取(例如,“m/d/yy”或“General”)。使用xlfGetCell 选项7。

【讨论】:

以上是关于Excel C API 等效于 C# 中的 Interop Range.Value的主要内容,如果未能解决你的问题,请参考以下文章

C# 等效于 Java 中的 class.forName() [重复]

C# 等效于 Java 的 Arrays.fill() 方法[重复]

C++/CLI 等效于 C# 检查关键字

C# 等效于 SQL Server 中的 IsNull() 函数

Java 等效于 C# Linq 中的 Where 子句

C# 等效于 Java 标点正则表达式