使用NPOI中的ShiftRows删除Excel中的行
ShiftRows(int startRow,int endRow,int n)
startRow 起始行,行编号和列编号都是从0开始
endRow 截止行
n 删除或增加的行数,当n大于0时增加行,在n小于0时减少行
sheet.LastRowNum 获取当前表的最后一行行编号
目标:搞懂如何删除最后一行
使用的Excel表内容
使用的代码--代码很简单
string filepath = @"E:\测试为啥删除行不对.xlsx";
string filepath_save = @"E:\3_software\3_0test\NPOI";
IWorkbook workbook = null;
FileStream fs = new FileStream(filepath, FileMode.OpenOrCreate, FileAccess.ReadWrite);
if (filepath.IndexOf(".xlsx") > 0) // 2007版本
workbook = new XSSFWorkbook(fs);
else if (filepath.IndexOf(".xls") > 0) // 2003版本
workbook = new HSSFWorkbook(fs);
int count = workbook.NumberOfSheets;
for (int k = 0; k < count; k++)
{
ISheet sheet = workbook.GetSheetAt(k);
//标题格式
for (int i = 0; i < sheet.LastRowNum; i++)
{
if (sheet.GetRow(i).GetCell(0).ToString() == "第二十一行")//需要删除的行的内容
{
sheet.ShiftRows(i, sheet.LastRowNum, -1);//i+1删除的是当前行
}
Console.WriteLine(sheet.LastRowNum);
}
}
fs.Close();
FileStream file = new FileStream(filepath_save + "\\测试为啥删除行不对.xlsx", FileMode.Create);
workbook.Write(file);
file.Close();
**结果表明:并未删除行 **
excel表中共有21行数据,LastRowNum=20,for (int i = 0; i < sheet.LastRowNum; i++),无法检查到最后一行,故修改为for (int i = 0; i < sheet.LastRowNum+1; i++)
结果表明:删除了第二十行
1.ShiftRows(int startRow,int endRow,int n)在n小于0的时候的意思是,将startRow到endRow向上移动n行,因此sheet.ShiftRows(i, sheet.LastRowNum, -1)其实删除的是第i-1行的数据,应该修改为sheet.ShiftRows(i+1, sheet.LastRowNum, -1),
2.但此时当for语句执行最后一次循环时,i=20,i+1=21, sheet.LastRowNum=20,起始行大于截止行,报错,故应该修改为sheet.ShiftRows(i+1, sheet.LastRowNum+1, -1)
**结果表明:成功 **
当n=-3市,第十八行数值清空,因为把第22行向上挪动了3行
版权归原作者 linnge 所有, 如有侵权,请联系我们删除。