• ベストアンサー
  • 困ってます

EXECLの行を削除

  • 質問No.2342691
  • 閲覧数2162
  • ありがとう数3
  • 回答数4

お礼率 74% (50/67)

こんにちは
質問があります。
以下のコードのように、
テキストボックスに入力した行数の
エクセルの行を削除したいのですが、
何も削除されません。
どなたか解決策を教えていただけないでしょうか
よろしくお願いいたします。
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());
}
}
}

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

  • 回答No.3
  • ベストアンサー

ベストアンサー率 66% (4/6)

removeRowではなくshiftRowsを使用すると
削除したように見せることができます。

sheet.removeRow(row);

sheet.shiftRows(delrow,sheet.getLastRowNum(),-1);
お礼コメント
19746999

お礼率 74% (50/67)

javakariさん、こんにちは。
おかげさまで、できるようになりました。

もし、また行き詰まってしまったらよろしくお願いいたします。
投稿日時:2006/08/19 13:07

その他の回答 (全3件)

  • 回答No.4

ベストアンサー率 43% (418/971)

#2です。

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

ファイルへの保存方法は参考URLを参考にしてください。
補足コメント
19746999

お礼率 74% (50/67)

要するに
上書きするメソッドは

write();
でよろしいんですよね?
投稿日時:2006/08/19 06:48
  • 回答No.2

ベストアンサー率 43% (418/971)

変更したらちゃんとファイルに保存しないと…
補足コメント
19746999

お礼率 74% (50/67)

Bonjinさん、こんにちは。
申し訳ございません。
もう少し具体的に教えていただけますか?
よろしくお願いします。
投稿日時:2006/08/17 15:54
  • 回答No.1

ベストアンサー率 33% (1/3)

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

お礼率 74% (50/67)

renannさん。
早速のご回答ありがとうございます。

おっしゃる通りでした。

sheet.removeRow(row);の後に

FileOutputStream fso=new FileOutputStream("c:/sample.xls");
wb1.write(fso);
fso.close();

を追記したらうまくいきました。

しかし、行は削除ではなく、ただ値がクリアされただけで
テキストボックスに入力した行だけが空白になっている状態です。
ちゃんと削除したいのですがどうしたらよいでしょうか?
投稿日時:2006/08/16 15:08
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ページ先頭へ