摘要
NPOI让我感受到了C#开发的魅力,用它轻松操作Excel,让数据导入变得简单。虽然选用.xls格式,但仍然兼容前版本,真是太棒了!
正文
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