对于Excel值,无法将类型“double”转换为“string”

时间:2014-02-05 09:43:40

标签: c# visual-studio-2010 excel

我正在加载一个Excel文件,如网上许多地方所示。

OpenFileDialog chooseFile = new OpenFileDialog();
            chooseFile.Filter = "Excel files (*.xls,*.xlsl)|*.xls;*.xlsx";
            if (chooseFile.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                selectedFileName = chooseFile.FileName;                
                textBox1.Text = selectedFileName;
                Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
                Workbook wb = excel.Workbooks.Open(selectedFileName);                
                Sheets excelSheets = wb.Worksheets;
                string currentSheet = "Sheet 1";
                excelWorksheet = (Worksheet)excelSheets.get_Item(currentSheet);
                Range usedRange = excelWorksheet.UsedRange;
                Range lastCell = usedRange.SpecialCells(XlCellType.xlCellTypeLastCell, Type.Missing);
                lastRow = lastCell.Row;
                lastColumn = lastCell.Column;

                //release com object you won't need.
                Marshal.ReleaseComObject(excel);
                Marshal.ReleaseComObject(wb);

            }

当我尝试从具有此功能的单元格中获取单个值时出现问题:

private string getCellValue(Worksheet Sheet, int Row, int Column)
        {            
            var cellValue = (string)(Sheet.Cells[Row, Column] as Range).Value;            
            return cellValue;
        }

这段代码适用于很多单元格,但突然陷入一个提升此异常的单元格:

  

无法将'double'类型转换为'string'

这很奇怪,因为它完美地适用于所有其他单元格并将所有内容转换为字符串。似乎甚至没有给空白细胞带来任何麻烦。我还指定excel文件中的每个单元格都是“text”,但实际上并不知道这种行为。

也尝试以这种方式进行显式转换。

private string getCellValue(Worksheet Sheet, int Row, int Column)
        {            
            string cellValue = Sheet.Cells[Row, Column].Value.ToString();
            return cellValue;
        }

现在引发的例外是:

  

无法对空引用执行运行时绑定

4 个答案:

答案 0 :(得分:12)

Text属性可用于从Cell中检索文本内容。因此,您可以尝试按如下方式使用该属性:

private string getCellValue(Worksheet Sheet, int Row, int Column)
    {            
        string cellValue = Sheet.Cells[Row, Column].Text.ToString();
        return cellValue;
    }

答案 1 :(得分:4)

试试这个

private string getCellValue(Worksheet Sheet, int Row, int Column)
{
    object cellValue = Sheet.Cells(Row, Column).Value;
    if (cellValue != null) {
        return Convert.ToString(cellValue);
    } else {
        return string.Empty;
    }
}

答案 2 :(得分:1)

尝试使用以下代码:

private string getCellValue(Worksheet Sheet, int Row, int Column)
{            
    string cellValue = Sheet.Cells[Row, Column].Text.ToString();
    return cellValue;
}

希望它有效!

答案 3 :(得分:0)

尝试:

double dbl =(double)cell.Value;
isDouble = String.Format("{0:0}", dbl).ToString();

这适合我。