2012-03-20 95 views
1

我必须阅读C#中的.xlsx文件。我正在做如下。但我的行可以有字符串或双。如何检查C#中输入(xls)文件的内容类型?

Input Excel 
Test file 

1 v1 c1 -3.99 

代码:

private void button1_Click(object sender, EventArgs e) 
{ 
    Excel.Application xlApp; 
    Excel.Workbook xlWorkBook; 
    Excel.Worksheet xlWorkSheet; 
    Excel.Range range; 

    string str; 
    int rCnt = 0; 
    int cCnt = 0; 

    xlApp = new Excel.ApplicationClass(); 
    xlWorkBook = xlApp.Workbooks.Open("csharp.net-informations.xls", 0, true, 5, "", "", true, XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); 
    xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); 

    range = xlWorkSheet.UsedRange; 

    for (rCnt = 1; rCnt <= range.Rows.Count; rCnt++) 
    { 
     for (cCnt = 1; cCnt <= range.Columns.Count; cCnt++) 
     { 
      str = (string)(range.Cells[rCnt, cCnt] as Excel.Range).Value2 ; 
      MessageBox.Show(str); 
     } 
    } 

    xlWorkBook.Close(true, null, null); 
    xlApp.Quit(); 
} 

现在我得到一个错误在下面的语句:如何检查行对象是否是双或字符串?

string str = (string)(range.Cells[rCnt, cCnt] as Excel.Range).Value2; 

回答

1
object value = x.Value2; 

string str = value as string; 
if (str != null) { 
    // I am string 
} 

double? d = value as double?; 
if (d != null) { 
    // d.Value is double 
} 
+0

非常感谢! – 2012-03-20 12:17:09

+0

@Csharp_learner:真的很高兴帮助! :) – abatishchev 2012-03-20 12:18:59

-1

,你可以尝试,如果它不能使用字符串,它解析为双:

if(!double.TryParse(input, out result)) 
    resultString = input.ToString(); 

,那么你可以检查是否resultString.IsNullOrEmpty决定是否使用双重效果或字符串resultString。

+0

对不起,但对我来说没有意义。为什么不使用'result',以及将字符串'input'再次转换为字符串是什么? – abatishchev 2012-03-20 12:00:35

+0

此外'double.TryParse'只接受字符串输入,即'input'必须是'string',不能是'object'。 – abatishchev 2012-03-20 12:02:43

+0

您可以尝试使用'try {double d = double.Parse(objectValue); } catch {}'但它比运行速度慢得多,比如''或'is'。 – abatishchev 2012-03-20 12:04:24