以下内容从Excel电子表格中获取可转换为string
或可转换为double
的对象。麻烦的是,即使我知道对象明显是一个整数,在电子表格中格式化为“常规”,Excel.Office.Interop总是返回double
。虽然将双精度转换为最接近的int
很容易,但有没有办法将对象转换为int
?
// returns null if the cell is empty
// returns an object castable to a string if it is a string
// returns an object castable to a double if it is a floating point or integer number
internal object GetCell(int row, int column)
{
if ((row != 0) && (column != 0) && (worksheet != null))
{
string cellName = ExcelCellReference(row, column);
Microsoft.Office.Interop.Excel.Range oneCellRange;
oneCellRange = worksheet.get_Range(cellName, cellName);
object oneObject;
// contrary to MSDN, the value Empty, checkable with method IsEmpty()
// does not work if the cell was empty.
// instead, what happens is that null is returned.
oneObject =
(object)
oneCellRange.get_Value(Microsoft.Office.Interop.Excel.XlRangeValueDataType.xlRangeValueDefault);
return oneObject;
}
else
{
if (worksheet == null)
throw new Exception("null worksheet reference");
else
throw new Exception("invalid argument");
}
}
编辑:如果Excel中的每个数字都表示为一个浮点数,即使可见一个整数,那么这也可以解释这种行为,在这种情况下除了转换之外没有解决方案。
编辑:人们不断发布转化答案。这个问题是为了征求惯用的Interop
答案,而不是转换答案。
编辑:Chris在评论int i = (int)(double)GetCell(r, c)
中的回答可以说是正确的但不是我想到的,因为转换发生在Interop
之外。
答案 0 :(得分:0)
为什么不ToString()
您的对象,然后使用int.Parse(...)
或int.TryParse(...)
进行解析?
答案 1 :(得分:0)
您可以将object
转换为double
,然后转换为int
,但是您应该注意double
值比int
大得多。最好将double
转换为long
。
试试这个:
object val = /*your value*/;
double db = Convert.ToDouble(val);
long x = Convert.ToInt64(db);
答案 2 :(得分:0)
根据adrianm
,
excel单元格中没有整数这样的东西。唯一的类型 可用的是数字,文本,逻辑和错误。号码映射到 在互操作中加倍。
所以答案是将double转换为int,而Chris
指出实际上有效。请注意,如果double不等于开头的整数,您可能希望根据需要进行更合适的转换。