本文主要是介绍NPOI-真正删除行(非清空数据)的方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
NPOI 在 .NET 中非常快速地操作 Excel,当我们需要删除某一行时,我们发现有个方法叫 RemoveRow,但是正如它的名字一样 Remove,和 Delete 是有区别的,所以 RemoveRow 只能清空行数据,不能实现删除行。
真正的做法是通过向上移动行来实现的,看下面的Demo部分代码,就知道了
/// <summary>/// 删除行/// </summary>/// <param name="sheet">处理的sheet</param>/// <param name="startRow">从第几行开始(0开始)</param>/// <param name="delCount">共删除N行</param>public static void DelRow(ISheet sheet, int startRow, int delCount){//sheet.ShiftRows(startRow + 1, sheet.LastRowNum, -1, false, false);//删除一行(为负数只能为-1)for (int i = 0; i < delCount; i++){sheet.ShiftRows(startRow + 1, sheet.LastRowNum, -1);}}
调用方法:
private void btn_remove_Click(object sender, EventArgs e){if (File.Exists(@"sps_login_New.xls")){File.Delete(@"sps_login_New.xls");}File.Copy(@"sps_login.xls", @"sps_login_New.xls");DataTable dt = new DataTable();IWorkbook workbook;using (FileStream fs = new FileStream(@"sps_login_New.xls", FileMode.Open, FileAccess.ReadWrite)){workbook = new HSSFWorkbook(fs);ISheet sheet = workbook.GetSheetAt(0);// 假设我们删除ID为41-45(第42-46行,因为带一行标题头)的几行数据DelRow(sheet, 41,5);}//把编辑过后的工作薄重新保存为excel文件FileStream fs2 = System.IO.File.Create(@"sps_login_New.xls");workbook.Write(fs2);fs2.Close();}
Demo有些乱,对付着看吧 度盘链接 提取码:s5kr
这篇关于NPOI-真正删除行(非清空数据)的方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!