2010-12-03 241 views
3

我想從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()); 
} 

回答

4

使它成爲一個對象,然後找出正確的類型,你已經得到的值出細胞後。

我不知道VSTO,但在Excel Interop程序集中,有一個Value2和一個Text屬性,它們都返回對象,並且可以通過多態性轉換爲正確的類型。 VSTO不提供這些嗎?

+1

串富=((範圍)MyWorksheet.Cells [2,3])Value2.ToString(); – 2012-08-08 22:18:46

+1

儘管由於相同的問題,我沒有得到這篇SO文章,但.Text問題解決了我在Value2中使用DateTime存儲在單元格中的問題。相反,它向我返回了一個double值,並且使用.Text.ToString()向我返回了我想要的字段的文本值。我不知道.Text屬性。謝謝。 – TravisWhidden 2013-01-31 17:23:49

0

你可以只調用對象的ToString(),然後就double.TryParse(),看看是否值是數字或文字

0

只需

double x = (double)Globals.Sheet1.Cells[7, 7].Value; 

,會得到雙重價值或拋出一個異常(無需捕獲它,如果沒有捕獲它,它將在Excel的對話框中正確顯示)。

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; 
} 
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()); 
} 
相關問題