使用Apache POI,我从Excel文件中提取值并写入另一个Excel文件。
但是我在输出Excel文件中得到空单元格。我如何:
我添加了这部分代码来删除行。我能够检测到空的行但无法将其删除。
Please tell how to implement in the above code I added.
我添加了这个
public class Nlp_health {
private static boolean isRowEmpty;
public static void main(String[] args) throws IOException, ParseException, RowsExceededException, WriteException
{
XSSFWorkbook wb = new XSSFWorkbook();
XSSFSheet sheet1 = wb.createSheet("Sheet1");
XSSFSheet sheet2 = wb.createSheet("Sheet2");
XSSFSheet sheet3 = wb.createSheet("Sheet3");
XSSFRow row_1 = sheet1.createRow((char)0);
XSSFRow row_2 = sheet2.createRow((char)0);
XSSFRow row_3 = sheet3.createRow((char)0);
row_1.createCell(0).setCellValue("Column1");
row_1.createCell(1).setCellValue("Column2");
row_2.createCell(0).setCellValue("Column1");
row_2.createCell(1).setCellValue("Column2");
row_3.createCell(0).setCellValue("Column1");
row_3.createCell(1).setCellValue("Column2");
FileOutputStream fileOut = new FileOutputStream("C:\\Users\\Master\\Desktop\\Nlp_health3.xlsx");
wb.write(fileOut);
fileOut.close();
Xls_Reader datatable = new Xls_Reader("C:\\Users\\Master\\Desktop\\SMB NLP Projects to Update 20140722.xlsx");
Xls_Reader datatable1 = new Xls_Reader("C:\\Users\\Master\\Desktop\\Nlp_health.xlsx");
int rows_count = datatable.getRowCount("Projects View");
System.out.println("Total number of rows = " + rows_count);
System.out.println();
for(int i=4; i<rows_count;i++)
{
String milestone = datatable.getCellData("Projects View", "SMB Project Health", i);
String project = datatable.getCellData("Projects View", "Name", i);
{
//System.out.println(value);
if (milestone.equals("Yellow")){
System.out.println("1st step = " + project);
datatable1.setCellData("Sheet1", "Column1", i, project);
datatable1.setCellData("Sheet1", "Column2", i, "Yellow");
//System.out.println(project);
}
if(milestone.equals("Red")){
System.out.println("2nd step = " + project);
datatable1.setCellData("Sheet1", "Column2", i, "Red");
datatable1.setCellData("Sheet1", "Column1", i, project);
}
}
}
int rows_count_new = datatable1.getRowCount("Sheet1");
System.out.println("Number of rows are" + rows_count_new );
for (int j = 0; j <= rows_count_new; j++){
String empty_cells = datatable1.getCellData("Sheet1", "Column1", j);
System.out.println("Empty step1 = " + empty_cells);
if(sheet1.getRow(j)==null){
sheet1.shiftRows(j + 1, sheet1.getLastRowNum(), -1);
j--;
continue;
}
for(int k =0; k<sheet1.getRow(j).getLastCellNum();k++){
if(sheet1.getRow(j).getCell(k).toString().trim().equals("")){
isRowEmpty=true;
}else {
isRowEmpty=false;
break;
}
}
if(isRowEmpty==true){
sheet1.shiftRows(j + 1, sheet1.getLastRowNum(), -1);
j--;
}
}
}
}
答案 0 :(得分:3)
POI Javadoc清楚地记录了XSSFSheet#removeRow()
,它将从工作表中删除整行。
还有XSSFRow#removeCell(cell)
删除单个细胞。
答案 1 :(得分:0)
假设:根据您的问题,您似乎担心空白行,而不是空行单元格中没有所有单元格空白的行。
可以通过两种方式找到空白行。
一般情况下会出现第二种情况。也许在你的情况下,它应该是原因。为此,您需要添加其他条件以检查所有单元格是否为空。
for(int i = 0; i < sheet.getLastRowNum(); i++){
if(sheet.getRow(i)==null){
// condition of blank row so do whatever you want to do in this case
// for example I have done nothing just removed that row.
sheet.shiftRows(i + 1, sheet.getLastRowNum(), -1);
i--;
continue;
}
for(int j =0; j<sheet.getRow(i).getLastCellNum();j++){
if(sheet.getRow(i).getCell(j).toString().trim().equals("")){
isRowEmpty=true;
}else {
isRowEmpty=false;
break;
}
}
if(isRowEmpty==true){
// condition of blank row so do whatever you want to do in this case
// for example I have done nothing just removed that row.
sheet.shiftRows(i + 1, sheet.getLastRowNum(), -1);
i--;
}
}