注意要先添加程序集的引用
导出到excel:
public override IWorkbook writeExecl(string filePath, DataTable dt) { if (File.Exists(filePath)) { File.Delete(filePath); } IWorkbook wk = new XSSFWorkbook(); ; //创建一个名称为data的表 ISheet tb = wk.CreateSheet("data"); //表头 IRow row1 = tb.CreateRow(0); int k = 0; foreach (DataColumn dc in dt.Columns) { ICell cell1 = row1.CreateCell(k); cell1.SetCellValue(getChinaName(dc.ColumnName)); k = k + 1; } //表体 for (int i = 0; i < dt.Rows.Count; i++) { IRow row = tb.CreateRow(i + 1); for (int j = 0; j < dt.Columns.Count; j++) { if (j == 3) { ICell cell = row.CreateCell(j); string value = dt.Rows[i][j].ToString(); cell.SetCellValue(tranSchoolType(value)); } else { ICell cell = row.CreateCell(j); string value = dt.Rows[i][j].ToString(); cell.SetCellValue(value); } } } string uploadPath = HttpContext.Current.Server.MapPath(filePath); //打开一个xls文件,如果没有则自行创建 //如果存在myxls.xls文件则在创建是不要打开该文件! using (FileStream fs = File.OpenWrite(uploadPath)) { //向打开的这个xls文件中写入mySheet表并保存。 wk.Write(fs); } }
是用excel2003还是excel2007可以用下面这个方法:
static IWorkbook isExcelType(string filePath) { IWorkbook wk = null; FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite); if (filePath.IndexOf(".xlsx") > 0) // 2007版本 wk = new XSSFWorkbook(fs); else if (filePath.IndexOf(".xls") > 0) // 2003版本 wk = new HSSFWorkbook(fs); fs.Close(); return wk; }
从excel读取数据:
List> readExcel(string filePath) { IWorkbook wk = null; wk = isExcelType(filePath); ISheet sheet = wk.GetSheetAt(0); List names = new List ();//LastRowNum 是当前表的总行数
for (int j = 1; j <= sheet.LastRowNum; j++) { for (int j = 1; j <= sheet.LastRowNum; j++) {
//读取当前行数据 IRow row = sheet.GetRow(j); if (row != null) { //LastCellNum 是当前行的总列数 for (int k = 0; k <= row.LastCellNum; k++) {
//当前表格 ICell cell = row.GetCell(k); if (cell != null) { string name = cell.ToString(); names.Add(name); } } } } List<Dictionary<string, string>> lists = new List<Dictionary<string, string>>(); return lists; }
好了,以上就简单的完成导入导出了!