C#开发设计之根据NPOI的实际操作Excel开发设计感受

近期碰到一个数据信息导进的要求,语言表达是.net framework 4.7的C#。可是,此次关键讨论NPOI的感受,标准便是往前兼容。因此选用.xls的适用。在网上的材料,我略微融合了一些。
近期碰到一个数据信息导进的要求,语言表达是.net framework 4.7的C#。可是,此次关键讨论NPOI的感受,标准便是往前兼容。因此选用.xls的适用。在网上的材料,我略微融合了一些。

#1 表格中下拉列表

在开发设计中大家会碰到为表格中设定下拉列表。一般能够撰写以下:

var cellRanges = new CellRangeAddressList(firstRow, lastRow, firstCol, latsCol);
DVConstraint constraint = DVConstraint.CreateExplicitListConstraint(stringArray);
HSSFDataValidation validate = new HSSFDataValidation(cellRanges, constraint);
validate.ShowProptBox = true;
sheet.AddValidationData(validate);

可是,假如字符串数组存有长短限定,如NPOI导出来Excel时下拉框值超出255的难题(String literals in formulas can't be bigger than 255 characters ASCII)
解决方法

根据附加新创建Excel的Sheet页储存往下拉內容,并变换为下拉列表数据信息。

ISheet hidden = workbook.CreateSheet(columnName);
IRow row = null;
ICell cell = null;
for (int i = 0; i < stringArray.Length; i  )
{
    row = hidden.CreateRow(i);
    cell = row.CreateCell(0);
    cell.SetCellValue(stringArray[i]);
}
IName namedCell = workbook.CreateName();
namedCell.NameName = column.ColumnName;
// 留意下边的英语的语法是Excel的公式计算,提议不必落掉一个`$`,许多 文本文档都需要所忽略。
namedCell.RefersToFormula = $"{columnName}!$A$1:$A${stringArray.Length}";
DVConstraint constraint =  DVConstraint.CreateFormulaListConstraint(columnName);
CellRangeAddressList addressList = new CellRangeAddressList(firstRow, lastRow, firstCol, latsCol);
HSSFDataValidation validate = new HSSFDataValidation(addressList, constraint);
sheet.AddValidationData(dataValidate);

#2 加上注释

编码以下:

HSSFPatriarch patriarch = (HSSFPatriarch)sheet.CreateDrawingPatriarch();
// 这一编码主要参数不必写出固定不动的,它用于精准定位你的注释的部位和尺寸。
HSSFComment comment = 
    (HSSFComment)patriarch.CreateCellComment(new HSSFFClientAnchor(0, 0, 255,255, col1, 0, col1   2, 5));
comment.Author = "Dison";
comment.String = new HSSFRichTextString($"內容");
cell.CellComment = comment;

#3 获取数据

怎样分析公式计算的結果

编码以下:

if (row.GetCell(i).CellType.Equals(CellType.Formula))
{
    var data = row.GetCell(i).RichStringCellValue;
}

假如期待载入公式计算还可以以下:

var data = row.GetCell(i).ToString();

可是必须留意結果沒有等于号“=”, 这儿我是演试,因此写了静态变量。

日期文件格式 MM-dd-yy 转 yyyy-MM-dd

因为Excel的数据和日期全是Numeric文件格式,;解决以下:

if (row.GetCell(i).CellType.Equals(CellType.Numeric))
{
    ICell cell = row.GetCell(i);
    short format = cell.CellStyle.DataFormat;
    if (format != 0)
    {
        var data = cell.DateCellValue.ToString("yyyy-MM-dd");
    }
    else 
    {
        var data = cell.NumericCellValue;
    }
}

总结

NPOI或是一个相对性完善的Excel实际操作库。在网上的材料的确写的较为草率。可是做为程序猿,务必学好细心,尤其是debug。

参照文本文档

  • POI导出来Excel时下拉框值超出255的难题(String literals in formulas can't be bigger than 255 characters ASCII)
  • NPOI 导出来加上注释作用
  • C# NPOI 日期文件格式

评论(0条)

刀客源码 游客评论