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