因最近有需求场景,实现对文件的读写操作,又不单独生成新的文件,对于源文件的修改,做了一个简单实现,如下↓
1 // 要操作的excel文件路径 2 string fileName = Server.MapPath("~/Content/test.xlsx"); 3 if (!System.IO.File.Exists(fileName)) return Content("文件不存在!"); 4 IWorkbook workbook; 5 6 //把文件内容导入到工作薄当中,然后关闭文件 7 FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite); 8 9 workbook = WorkbookFactory.Create(fs); 10 fs.Close();//编辑工作薄当中内容 11 ISheet sheet = workbook.GetSheetAt(0); 12 13 14 //workbook.GetSheetAt(0).GetRow(0).Cells[0].SetCellValue("TestCell"); 15 for (int i = 0; i <= sheet.LastRowNum; i++) 16 { 17 foreach (ICell cell in sheet.GetRow(i).Cells) 18 { 23 cell.SetCellType(cell.CellType); 24 if (cell.CellType == CellType.Numeric) 25 { 26 if (HSSFDateUtil.IsCellDateFormatted(cell))//日期类型 27 { 28 cell.SetCellValue(cell.DateCellValue.ToString()); 29 } 30 else//其他数字类型 31 { 32 cell.SetCellValue(cell.NumericCellValue.ToString()); 33 } 34 } 35 else 36 { 37 cell.SetCellValue(cell.StringCellValue.ToString()); 38 } 39 } 40 if (i != 0) 41 { 42 ICell firstCell = sheet.GetRow(i).Cells[0]; 43 firstCell.SetCellType(firstCell.CellType); 44 var cellValue = firstCell.StringCellValue.ToDecimal().ToString(); 45 firstCell.SetCellValue(cellValue); 46 } 47 } 48 49 //把编辑过后的工作薄重新保存为excel文件 50 FileStream fs2 = System.IO.File.Create(fileName); 51 workbook.Write(fs2); 52 fs2.Close(); 53 return Content("操作成功!!" + DateTime.Now);