#####前言
读取对应的excel为2013版
使用前需要导入的dll,(百度云可以获得)
(还有一点要说的,NPoi只能读,往Excel文件中写入东西,然后保存会导致文件损坏,一直没有找到解决的办法,顾往excel写入的方法就没有写了)
//需要导入
using NPOI.HSSF.UserModel;
using NPOI.XSSF.UserModel;
using NPOI.SS.UserModel;
--------------------------------------------------------------------------------------------------------------
ISheet packOutisheet = null;
FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
XSSFWorkbook xswork = new XSSFWorkbook(fs);//获取excel文档
sheetContent = xswork.GetSheet(sheetName);//获取sheet内容 By sheetName
sheetContent = xswork.GetSheetAt(sheetIndex);//获取sheet内容 By sheetIndex
//获取行数
int rowNum = sheetName.LastRowNum;
//获取对应行的列数
int colNum = sheetName.GetRow(rowIndex).LastCellNum;
//获取单元格值
string cellValue = sheetName.GetRow(rowIndex).GetCell(colIndex).ToString();
在读取时候,还有一些问题
1.列上的字母转为列数(百度到的,出处忘了 抱歉,没有链接)
/// <summary>
/// 将列字母转换为数字
/// </summary>
/// <param name="columnName"> 列名</param>
/// <returns></returns>
public static int ToIndex(string columnName)
{
if (!Regex.IsMatch(columnName.ToUpper(), @"[A-Z]+")) { throw new Exception("invalid parameter"); }
int index = 0;
char[] chars = columnName.ToUpper().ToCharArray();
for (int i = 0; i < chars.Length; i++)
{
index += ((int)chars[i] - (int)'A' + 1) * (int)Math.Pow(26, chars.Length - i - 1);
}
return index - 1;
}
2.在读取的,excel上可能有各种格式,函数等(百度到的,出处忘了 抱歉,没有链接),无法直接获取值
public string formatCellValue(ICell cell)
{
string cellValue = "";
switch (cell.CellType)
{
case CellType.BLANK:
cellValue = string.Empty;
break;
case CellType.BOOLEAN:
cellValue = cell.BooleanCellValue.ToString();
break;
case CellType.NUMERIC:
if (DateUtil.IsCellDateFormatted(cell))//日期
{
cellValue = cell.DateCellValue.ToString();
}
else
{
cellValue = cell.NumericCellValue.ToString();
}
break;
case CellType.STRING:
cellValue = cell.StringCellValue.Trim();
break;
case CellType.ERROR:
cellValue = cell.ErrorCellValue.ToString();
break;
case CellType.FORMULA://公式
try
{
HSSFFormulaEvaluator e = new HSSFFormulaEvaluator(cell.Sheet.Workbook);
e.EvaluateInCell(cell);
cellValue = cell.ToString();
}
catch
{
if (DateUtil.IsCellDateFormatted(cell))//日期
{
cellValue = cell.DateCellValue.ToString("yyyy-MM-dd HH:mm:ss");
}
else
{
cellValue = cell.NumericCellValue.ToString();
}
}
break;
default:
cellValue = cell.ToString();
break;
}
return cellValue;
}