• ベストアンサー

EXECLの行を削除

こんにちは 質問があります。 以下のコードのように、 テキストボックスに入力した行数の エクセルの行を削除したいのですが、 何も削除されません。 どなたか解決策を教えていただけないでしょうか よろしくお願いいたします。 import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; import java.util.*; import org.apache.poi.hssf.usermodel.*; import org.apache.poi.poifs.filesystem.POIFSFileSystem; class testdel { public static void main(String[] args) { testdel2 test=new testdel2(); } } class testdel2 implements ActionListener { JButton button; JTextField text; testdel2() { JFrame frame=new JFrame(); JPanel panel=new JPanel(); button=new JButton("削除"); text=new JTextField(1); button.addActionListener(this); panel.add(text); panel.add(button); Container ct=frame.getContentPane(); ct.add(panel); frame.pack(); frame.setVisible(true); } public void actionPerformed(ActionEvent e) { if(e.getSource()==button) { int del_row=Integer.parseInt(text.getText()); Delete del=new Delete(del_row); } } } class Delete { Delete(int delrow) { try {System.out.println(delrow); FileInputStream fis = new FileInputStream("c:/sample.xls"); POIFSFileSystem fs = new POIFSFileSystem(fis); HSSFWorkbook wb1 = new HSSFWorkbook(fs); HSSFSheet sheet = wb1.getSheetAt(0); HSSFRow row=sheet.getRow(delrow); sheet.removeRow(row); System.exit(0); } catch(Exception e) { System.err.println(e.toString()); } } }

質問者が選んだベストアンサー

  • ベストアンサー
  • javakari
  • ベストアンサー率66% (4/6)
回答No.3

removeRowではなくshiftRowsを使用すると 削除したように見せることができます。 sheet.removeRow(row); ↓ sheet.shiftRows(delrow,sheet.getLastRowNum(),-1);

19746999
質問者

お礼

javakariさん、こんにちは。 おかげさまで、できるようになりました。 もし、また行き詰まってしまったらよろしくお願いいたします。

その他の回答 (3)

  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.4

#2です。 >もう少し具体的に教えていただけますか? 提示されたソースコードではワークシートに変更を加えてからファイルへ保存を行っていないので内容が変更されません。変更が加わっているのはあくまでメモリ上にあるデータに対してだけです。 ファイルへの保存方法は参考URLを参考にしてください。

参考URL:
http://jakarta.terra-intl.com/poi/hssf/quick-guide.html#NewWorkbook
19746999
質問者

補足

要するに 上書きするメソッドは write(); でよろしいんですよね?

  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.2

変更したらちゃんとファイルに保存しないと…

19746999
質問者

補足

Bonjinさん、こんにちは。 申し訳ございません。 もう少し具体的に教えていただけますか? よろしくお願いします。

  • renann
  • ベストアンサー率33% (1/3)
回答No.1

org.apache.poi.poifs.filesystem.POIFSFileSystemなどは、あまり知らないのですが、普通に考えて・・Streamを最後閉じていないところが気になります。 *sheet.removeRow(row);で処理が終わってしまっている(変更の確定(保存)を行う処理が必要では?)

19746999
質問者

お礼

renannさん。 早速のご回答ありがとうございます。 おっしゃる通りでした。 sheet.removeRow(row);の後に FileOutputStream fso=new FileOutputStream("c:/sample.xls"); wb1.write(fso); fso.close(); を追記したらうまくいきました。 しかし、行は削除ではなく、ただ値がクリアされただけで テキストボックスに入力した行だけが空白になっている状態です。 ちゃんと削除したいのですがどうしたらよいでしょうか?

関連するQ&A

専門家に質問してみよう