数据库可以导入数据到Excel表格,Excel当然也可以取出数据,存到数据库。
思路:
一,file控件选中xls,xlsx文件,上传到服务器。
二,C# 读取文件的每行数据,存入Datatable。
三。最后存入数据库
第一步 ,上传文件大家都会,就不讲了。
第三步, 获取了Datatable后,存入数据库就简单了:
可以遍历DataRow添加,或者链接configuraion写sql语句。
主要讲第二部,解析xls文件的内容到Datatable。
使用下面这个类,就ok了,直接复制修改命名空间吧。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using NPOI; using NPOI.SS.UserModel; using System.Data; using System.IO; using NPOI.HSSF.UserModel; using NPOI.XSSF.UserModel; namespace SysAdmin.Models { static public class ImportExcel { public static DataTable GetExcelDataTable(string filePath) { IWorkbook Workbook; DataTable table = new DataTable(); try { using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read)) { //XSSFWorkbook 适用XLSX格式,HSSFWorkbook 适用XLS格式 string fileExt = Path.GetExtension(filePath).ToLower(); if (fileExt == ".xls") { Workbook = new HSSFWorkbook(fileStream); } else if (fileExt == ".xlsx") { Workbook = new XSSFWorkbook(fileStream); } else { Workbook = null; } } } catch (Exception ex) { throw ex; } //定位在第一个sheet ISheet sheet = Workbook.GetSheetAt(0); //第一行为标题行 IRow headerRow = sheet.GetRow(0); int cellCount = headerRow.LastCellNum; int rowCount = sheet.LastRowNum; //循环添加标题列 for (int i = headerRow.FirstCellNum; i < cellCount; i++) { DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue); table.Columns.Add(column); } //数据 for (int i = (sheet.FirstRowNum + 1); i <= rowCount; i++) { IRow row = sheet.GetRow(i); if (row.FirstCellNum==1) { return table; } DataRow dataRow = table.NewRow(); if (row != null) { for (int j = row.FirstCellNum; j < cellCount; j++) { if (row.GetCell(j)!=null) { dataRow[j] = GetCellValue(row.GetCell(j)); } } } table.Rows.Add(dataRow); } return table; } private static string GetCellValue(ICell cell) { if (cell == null) { return string.Empty; } switch (cell.CellType) { case CellType.Blank: return string.Empty; case CellType.Boolean: return cell.BooleanCellValue.ToString(); case CellType.Error: return cell.ErrorCellValue.ToString(); case CellType.Numeric: case CellType.Unknown: default: return cell.ToString(); case CellType.String: return cell.StringCellValue; case CellType.Formula: try { HSSFFormulaEvaluator e = new HSSFFormulaEvaluator(cell.Sheet.Workbook); e.EvaluateInCell(cell); return cell.ToString(); } catch { return cell.NumericCellValue.ToString(); } } } } }
ImportExcel.GetExcelDataTable(filePath) //调用该类下面的GetExcelDataTable()方法 就ok了
filePath //刚刚上传文件的路径