0

最後の列のセル値を検索しています。セルの値が「無効」または「該当なし」の場合、行全体を削除します。

これまでに書いたコードは次のとおりです。

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.ss.usermodel.Workbook;

public class Column
{
    public static void main(String[] args) throws InvalidFormatException, FileNotFoundException, IOException
    {
        try
        {
            Workbook wb = WorkbookFactory.create(new FileInputStream("C:/Users/Excel1.xlsx"));
            Sheet sheet = wb.getSheet("Retail-All");

            Workbook wb2 = new HSSFWorkbook();
            wb2 = wb;

            Row row;
            row = sheet.getRow(0);
            int getLastCell=row.getLastCellNum()-1;
            int lastIndex = sheet.getLastRowNum();

            for (int i=0; i<=lastIndex; i++)
            {
                row=sheet.getRow(i);
                if(row.getCell(getLastCell)!=null && (row.getCell(getLastCell).toString().equalsIgnoreCase("Not valid) || row.getCell(getLastCell).toString().equalsIgnoreCase("Not Applicable")))
                {
                    sheet.removeRow(row);
                    //sheet.shiftRows(i, lastIndex, -1);
                }
            }
            FileOutputStream fileOut = new FileOutputStream("C:/Users/shiftRows.xlsx");
            wb2.write(fileOut);
            fileOut.close();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}

上記のコードでは、row.setZeroHeight(true); を使用しています。メソッドで行を非表示にできます。

上記のコードでは、sheet.removeRow(row); を使用しています。method 特定の行のすべてのセルを空にすることができます。

ネットでいくつかのコードを見つけましたが、行を完全に削除するコードはありません。私の要件は、行を完全に削除することです。私の要件を満たすようにコーディングする方法は?

4

4 に答える 4

0

これを試してみてください...

 SVTableModel model = new SVTableModel(sheet);
 int lastIndex = model.getRowCount();
 for (int i=1; i<=lastIndex; i++)
   {
  row=sheet.getRow(i);
  if((row.getCell(getLastCell)!=null) && (row.getCell(getLastCell).toString().equalsIgnoreCase("Not valid") ||  row.getCell(getLastCell).toString().equalsIgnoreCase("Not Applicable")))
  {
      row.setZeroHeight(true);
      sheet.removeRow(row);
  }
于 2013-08-01T14:01:15.003 に答える
0

おそらく、VBA マクロを使用すると、この状況でより役立つでしょうか? VBA マクロはスプレッドシートに埋め込むことができるので、実行がずっと簡単になります。

VBA を始めるのに適した場所は次のとおりです。

http://msdn.microsoft.com/en-us/library/office/ee814737(v=office.14).aspx

于 2013-08-01T13:49:26.373 に答える