Как наилучшим образом получить значение ячейки из Excel, используя VSTO? - PullRequest
3 голосов
/ 03 декабря 2010

Я пытаюсь получить ячейки из Excel в csharp, но не уверен, какой тип переменной лучше всего подходит для чтения.

Если я сделаю переменную строкой, а значение ячейки будет двойным, я получу ошибку разбора.Если я сделаю переменную 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());
}

Ответы [ 5 ]

4 голосов
/ 03 декабря 2010

Сделайте это объектом, затем выясните правильный тип после того, как вы получили значение из ячейки.

Я не знаю о VSTO, но в сборке Excel Interop было свойство Value2 и свойство Text, которые оба возвращали объект и могли быть преобразованы посредством полиморфизма в правильный тип. Разве VSTO не предоставляет их?

0 голосов
/ 18 апреля 2016
 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());
}
0 голосов
/ 25 февраля 2015

Я предпочитаю получать текстовое значение напрямую и не хочу иметь дело с базовым типом данных по большей части. Я получаю текстовое значение в качестве упомянутого комментария 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 голосов
/ 28 февраля 2012

Просто

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

вернет вам двойное значение или сгенерирует исключение (нет необходимости его перехватывать, оно будет правильно отображаться в диалоговом окне в Excel, если ничто не перехватит его вверх по течению).

0 голосов
/ 03 декабря 2010

Вы можете просто вызвать ToString () для объекта, а затем выполнить double.TryParse (), чтобы увидеть, является ли значение числовым или текстовым

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...