我试图将excel中的单元格转换为csharp,但不确定读取它的最佳变量类型是什么。
如果我将变量设为字符串且单元格值为double,则会出现解析错误。如果我将变量设为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());
}
答案 0 :(得分:4)
将它设为一个对象,然后在从单元格中取出值后找出正确的类型。
我不知道VSTO,但是在Excel Interop程序集中,有一个Value2
和一个Text属性都返回了对象,并且可以通过多态转换为正确的类型。 VSTO不提供这些吗?
答案 1 :(得分:0)
您可以在对象上调用ToString(),然后执行double.TryParse()以查看值是数值还是文本
答案 2 :(得分:0)
简单地
double x = (double)Globals.Sheet1.Cells[7, 7].Value;
将获取double值或抛出异常(无需捕获它,如果没有任何上游捕获它,它将在Excel的对话框中正确显示)。
答案 3 :(得分:0)
我更喜欢直接获取文本值,并且不希望在大多数情况下处理基础数据类型。我得到了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;
}
答案 4 :(得分:0)
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());
}