1、在VS2010中,构建Excel表导入数据的WinForm界面,如下图所示:
2、在VS2010的解决方案管理器点击“右键—>添加引用”,将NPOI组件添加到项目中,如下图所示:
3、给导入按钮的_Click方法,编写导入的数据解释代码,主要是通过NPOI引入数据,部分代码如下: int intFirstRow = 0; if (numStartRow.Value > 0) { intFirstRow = (int)(numStartRow.Value) - 1; } dt = null; dt = Import.ImportExcel(file, ccbRepType.SelectedIndex, intFirstRow); //导入数据,首行默认0
4、通过自定义的Import类,给datatable增加动漤逗庞俄态的列,主要代码如下: int c髫潋啜缅ellCount = headerRow.LastCellNum; //一定要对单元格类型作判断 否则会报错 for (int i = headerRow.FirstCellNum; i < cellCount; i++) { if (headerRow.GetCell(i) == null || headerRow.GetCell(i).ToString().Trim() == "") //StringCellValue.Trim() == "" { // 如果遇到第一个空列,则不再继续向后读取 LJS cellCount = i + 1; break; } DataColumn column = new DataColumn(Convert.ToChar(((int)'A') + i).ToString()); table.Columns.Add(column); }
5、通过自定义的Import类,将行数据动态写入到datatable中去,部分代码如下: for (int i = HeaderRowIndex; i <= sheet.LastRowNum; i++) { HSSFRow row = (HSSFRow)sheet.GetRow(i); if (row == null || row.GetCell(0) == null || row.GetCell(0).ToString().Trim() == "") { // 如果遇到第一个空行,则不再继续向后读取 break; } DataRow dataRow = table.NewRow(); for (int j = row.FirstCellNum; j < cellCount; j++) { HSSFCell cell = (HSSFCell)row.GetCell(j); if (row.GetCell(j) != null) { switch ((HSSFCellType)cell.CellType) { case HSSFCellType.BLANK: dataRow[j] = cell.StringCellValue; break; case HSSFCellType.BOOLEAN: dataRow[j] = cell.BooleanCellValue; break; case HSSFCellType.NUMERIC: dataRow[j] = cell.NumericCellValue; break; …… } } table.Rows.Add(dataRow);
6、NPOI控件笔者以上所用的npoi版本为1.2.5版本(部分自定义修改了),对于具体npoi相关资料可以从网上查找获得。