С# чтение данных из файла excel приводит к ###

я читаю данные из файла excel с помощью этого кода

        Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet;
        Microsoft.Office.Interop.Excel.Range range;

        int rCnt = 0;
        int cCnt = 0;
        string[,] data;

        xlWorkSheet = (Worksheet)wb.Worksheets.get_Item(sheetId);

        range = xlWorkSheet.UsedRange;

        data = new string[range.Rows.Count, range.Columns.Count];

        for (rCnt = 1; rCnt <= range.Rows.Count; rCnt++)
        {
            for (cCnt = 1; cCnt <= range.Columns.Count; cCnt++)
            {          
                data[rCnt - 1, cCnt - 1] = (string)
                (range.Cells[rCnt, cCnt] as Range).Text;
            }
        }

Теперь я иногда сталкиваюсь с ячейками, где значение в excel отображается как ###, потому что пространство столбца недостаточно велико для отображения числа. В Excel, конечно, я вижу правильное значение в строке вверху, когда я нажимаю на ячейку, но в моей программе я получаю значение ### вместо правильного числа.

Любой совет здесь?


person Gobliins    schedule 25.04.2012    source источник


Ответы (3)


Попробуйте использовать Range.Value свойство вместо Text.

Итак, вместо

(range.Cells[rCnt, cCnt] as Range).Text;

ты бы написал

(range.Cells[rCnt, cCnt] as Range).Value;
person Dmitrii Erokhin    schedule 25.04.2012

Я видел множество примеров, когда диапазон читается с использованием свойства Value ИЛИ Value2.
Не могли бы вы попробовать это?

data[rCnt - 1, cCnt - 1] = (string)(range.Cells[rCnt, cCnt] as Range).Value.ToString();

Свойство Value2 похоже на значение, но плохо переводит столбцы даты, поэтому лучше использовать значение, если в файле Excel есть столбцы даты. см. здесь статью о различиях между Value и Value2.

person Steve    schedule 25.04.2012

use (string) (range.Cells[rCnt, cCnt] as Range).Value as Value вернет фактическое значение ячейки. Текст вернет то, что вы действительно видите в электронной таблице.

person Brijesh Mishra    schedule 25.04.2012