如何使用VSTO从excel中获取单元格值?
问题描述:
我想从Excel中获取单元格到csharp,但不知道什么是最好的变量类型来读取它。如何使用VSTO从excel中获取单元格值?
如果我让变量为字符串,单元格值为双精度型,我会得到一个解析错误。如果我使变量double,那么当单元格是一个字符串它不会工作。
这里是我运行的代码:
try
{
string i = Globals.Sheet1.Cells[7, 7].Value;
double num;
if (i == null) return;
if (double.TryParse(i, out num))
{
.
.
.
}
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
答
使它成为一个对象,然后找出正确的类型,你已经得到的值出细胞后。
我不知道VSTO,但在Excel Interop程序集中,有一个Value2
和一个Text属性,它们都返回对象,并且可以通过多态性转换为正确的类型。 VSTO不提供这些吗?
答
你可以只调用对象的ToString(),然后就double.TryParse(),看看是否值是数字或文字
答
只需
double x = (double)Globals.Sheet1.Cells[7, 7].Value;
,会得到双重价值或抛出一个异常(无需捕获它,如果没有捕获它,它将在Excel的对话框中正确显示)。
答
我更喜欢直接获取文本值,并且不希望大部分处理底层数据类型。我将文本值作为TravisWhidden注释提到,这里是我的VSTO C#代码,用于实现从单元格读取并返回文本值,而不考虑基础对象。
这是我的扩展方法,其工作原理关闭工作表页的:
public static string CellGetStringValue(this WorksheetBase theSheet, int row, int column)
{
var result = string.Empty;
if (theSheet != null)
{
var rng = theSheet.Cells[row, column] as Excel.Range;
if (rng != null)
result = (string) rng.Text;
}
return result;
}
答
try
{
dynamic mycell = Globals.Sheet1.Cells[7, 7];
double num;
if (mycell.Value == null) return; //you can use mycell.Text too.
if (double.TryParse(mycell.Text, out num))
{
.
.
.
}
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
串富=((范围)MyWorksheet.Cells [2,3])Value2.ToString(); – 2012-08-08 22:18:46
尽管由于相同的问题,我没有得到这篇SO文章,但.Text问题解决了我在Value2中使用DateTime存储在单元格中的问题。相反,它向我返回了一个double值,并且使用.Text.ToString()向我返回了我想要的字段的文本值。我不知道.Text属性。谢谢。 – TravisWhidden 2013-01-31 17:23:49