如何使用NPOI

时间:2016-06-03 07:29:50

标签: c# npoi

我有一个Excel单元格地址,如A1,A2。如何使用C#中的NPOI框架以编程方式访问此单元?

我发现了一些Java POI示例代码:

CellReference cr = new CellReference("A1"); 
row = mySheet.getRow(cr.getRow()); 
cell = row.getCell(cr.getCol());

2 个答案:

答案 0 :(得分:7)

您找到的Java代码将1:1转换为C#:

  • 首先,将单元格描述(A1)转换为CellReference
  • 使用该CellReference中的RowCol来查找实际的单元格。

以下是一些示例代码

var workbook = new XSSFWorkbook(stream);
var sheet = workbook.GetSheetAt(0);

var cr = new CellReference("D5");
var row = sheet.GetRow(cr.Row);
var cell = row.GetCell(cr.Col);

Console.Write(cell.StringCellValue);

请注意,引用单元格会导致异常。 Excel不会在内部存储未使用的单元格,并且(N)POI不会尝试向开发人员隐藏这一事实。

答案 1 :(得分:1)

下面是一些示例代码,可帮助您获得任何价值。

var workbook = new XSSFWorkbook(stream);
var sheet = workbook.GetSheetAt(0);

var cr = new CellReference("D5");
var row = sheet.GetRow(cr.Row);
var cell = row.GetCell(cr.Col);

var val = getCellValue(cell);

private object getCellValue(ICell cell)
{
    object cValue = string.Empty;
    switch (cell.CellType)
    {
        case (CellType.Unknown | CellType.Formula | CellType.Blank):
            cValue = cell.ToString();
            break;
        case CellType.Numeric:
            cValue = cell.NumericCellValue;
            break;
        case CellType.String:
            cValue = cell.StringCellValue;
            break;
        case CellType.Boolean:
            cValue = cell.BooleanCellValue;
            break;
        case CellType.Error:
            cValue = cell.ErrorCellValue;
            break;
        default:
            cValue = string.Empty;
            break;
    }
    return cValue;
}