如何读取Excel单元格值?

时间:2014-05-20 15:15:10

标签: c# excel

寻求有关如何从Excel中读取一些单元格值的帮助。我以为我会从一开始。

Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(workbookPath, 0, false, 5, "", "", false,    Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
Excel.Sheets excelSheets = excelWorkbook.Worksheets;
string currentSheet = "Sheet1";
Excel.Worksheet excelWorksheet = (Excel.Worksheet)excelSheets.get_Item(currentSheet);
var cell = (Excel.Range)excelWorksheet.Cells[1, 1];

虽然我没有运气。我希望能够读取单元格的值并将其存储在某处,然后每隔几秒检查一次该值。

3 个答案:

答案 0 :(得分:1)

你真的想看看EPPLus: http://epplus.codeplex.com/

NuGet可以在项目中使用它。到目前为止,它是C#和excel文档之间最简单,最简洁的接口方式。它也是免费的,顺便说一句。

教程: http://www.codeproject.com/Articles/680421/Create-Read-Edit-Advance-Excel-Report-in#1

private DataTable WorksheetToDataTable(ExcelWorksheet oSheet)
{
int totalRows = oSheet.Dimension.End.Row;
int totalCols = oSheet.Dimension.End.Column;
DataTable dt = new DataTable(oSheet.Name);
DataRow dr = null;
for (int i = 1; i <= totalRows; i++)
{
    if (i > 1) dr = dt.Rows.Add();
    for (int j = 1; j <= totalCols; j++)
    {
        if (i == 1)
            dt.Columns.Add(oSheet.Cells[i, j].Value.ToString());
        else
            dr[j - 1] = oSheet.Cells[i, j].Value.ToString();
    }
}
return dt;

}

这将读取EPPLus中的所有列和行。

答案 1 :(得分:0)

类似的东西:

Worksheet sheet = excelWorkbook.Worksheets["Sheet1"] as Worksheet;
Range rng = sheet.Cells[1,1] as Range;
object value = rng.Value;

......应该做你想做的事。试试这个,如果你有任何错误,请告诉我。

该值可以是stringdoubleDateTimeboolint值。

除了int之外,这些都是不言自明的。 int值表示可能的不同错误代码,例如#VALUE!

(顺便说一句,我建议使用可通过NuGet免费获得的NetOffice来引用Excel对象模型,而不是引用Excel PIA。优点是您在部署时不依赖于特定版本的Excel)

答案 2 :(得分:0)

您需要检索单元格的.Value.Value2属性:

if (cell.Value2 == null)
    // cell is blank
else if(cell.Value2 is string)
    // cell is text
else if (cell.Value is double)
    // cell is number;
else if (cell.Value2 is double)
    // cell is date

注意最后两个if.Value2将为数字和日期返回一个双精度数,但.Value将仅为数字返回一个双精度数。您检查的顺序很重要。