-我发现shiftRows函数存在一个导致excel中断的错误。https://bz.apache.org/bugzilla/show_bug.cgi?id=57423我不确定这是否已经修复。我已经在bugzilla上添加了一个评论来进一步了解这一点。
如果满足特定的单元格值条件,我正尝试从excel文件中删除行(而不是删除的内容)。
我成功地实现了这一点,但问题是它破坏了我的excel并且当我重新打开文件(手动)时,excel显示一个它破坏的错误,并且当我打开修复的值时,文件已经丢失了它的所有格式。下面是我用过的代码。我想罪魁祸首是鬼才。这是因为如果我使用隐藏单元格的其他选项,则excel不会中断,而且它也能正常工作。但问题是我想删除行而不是隐藏它。
void shiftRows(int startRow, int endRow, int n);
在startRow和endRow之间移动行n行数。*如果使用负数,它会向上移动行。*代码确保行不环绕。
假设我在Row1并将删除它的内容,那么我应该传递什么参数来将整个工作表移到Row1下面,1行上面。我尝试了下面的操作,但它失败了,因为T=it在第二次循环迭代时给了我null指针异常。
shiftRows(row1+1,最后一行编号值,最后一行与当前行的差值);
for(int r=sh.getFirstRowNum(); r<=sh.getLastRowNum(); r++){ //iterating through all the rows of excel
Row currentRow = sh.getRow(r); //get r'th row
if(currentRow.getCell(1).getStringCellValue().equalsIgnoreCase("Assigned to Duration")){
int tempRowNum = (currentRow.getRowNum()+1);
System.out.println("Working on Row: " + (currentRow.getRowNum()+1) + " value " + currentRow.getCell(0).getStringCellValue());
int tempValue = sh.getLastRowNum() - currentRow.getRowNum();
System.out.println("Difference: " +tempValue);
sh.removeRow(currentRow);
// currentRow.setZeroHeight(true);
sh.shiftRows(tempRowNum, sh.getLastRowNum(), tempValue);
r--;
// System.out.print(" row number below the current row is " + (tempRowNum+1) + " and value is " + sh.getRow(tempRowNum).getCell(0).getStringCellValue());
}
countfilter++;
}
System.out.println("Total Rows after removing: " + sh.getLastRowNum());
System.out.println("Loop iterated for " + countfilter + " times.");
fos = new FileOutputStream(file);
wb.write(fos);
wb.close();
fis.close();
System.out.println("Row filtering completed");
运行上述代码后遇到Excel打开错误:
相信你想要使用shiftRows的方式如下:
如果您根据单元格值1找到要删除的行,那么根据您的for循环,我们知道这是行r,因此:
if(currentRow.getCell(1).getStringCellValue().equalsIgnoreCase("Assigned to Duration")){
sh.removeRow(currentRow);
// shift rows 1 row up starting from the row after the row you just removed
shiftRows(r+1, sh.getLastRowNum(), -1);
r--;
}
我修改了一小段代码,但无法运行。我总是发现一个例外: 保存失败:保存包时出错:重复条目:docProps/core.xml 错误抛出在这行: 我认为出现了这个例外,因为我不允许在同一个工作簿上读写,但是如果没有现有的Excel文件,我如何初始化新工作簿? 代码:(来自这里(感谢发起者):如何使用ApachePOI删除行) 和 [编辑2016-06-21]: 我加了 给我的POM,现在它产生了 线程
我在excel表中有从A列到F列的数据。 我在页面中间的其他列中创建了一个按钮,比如H5 有什么方法可以保留按钮,即使整个行被删除。我尝试锁定单元格,窗格和拆分。 但运气不好。你能帮我做这件事吗?
我有一个有3000行的excel文件。我删除了2000(用ms excel应用程序),但是当我从代码中调用sheet.getLastRowNum()时,它给我3000(而不是1000)...我如何删除空白行? 我尝试从这里的代码,但它不工作......
我有一个spring 4应用程序,我试图删除一个实体的实例,从我的数据库。我有以下实体: 我定义了一个JPararePository接口: 我有一个与内存数据库(H2)一起工作的单元测试设置,我正在用两个令牌预先填充数据库: 第一个断言通过,第二个失败。我尝试了另一个测试,它更改了令牌值并将其保存到数据库中,它确实起作用了,所以我不确定为什么delete不起作用。它也不抛出任何异常,只是不将其持久
我有5张不同的表格。sheet3和sheet4我希望根据单个列单元格值删除行。在表3中,我希望根据H列单元格值删除行,如果h2=“#n/a”和h503=“#n/a”,则删除整个行。在表4中,如果b2=“320857876”、b3=“32085678”、b4=“12133435”删除b列单元格值以302开头的整个行,我希望根据b列单元格值删除行。我想删除'C'列中的所有数据我的excel表如下所示
我无法解释,因为所有其他select和insert语句都工作得很好。