プロが教えるわが家の防犯対策術!

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

A 回答 (4件)

removeRowではなくshiftRowsを使用すると


削除したように見せることができます。

sheet.removeRow(row);

sheet.shiftRows(delrow,sheet.getLastRowNum(),-1);
    • good
    • 0
この回答へのお礼

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

もし、また行き詰まってしまったらよろしくお願いいたします。

お礼日時:2006/08/19 13:07

#2です。



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

ファイルへの保存方法は参考URLを参考にしてください。

参考URL:http://jakarta.terra-intl.com/poi/hssf/quick-gui …

この回答への補足

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

write();
でよろしいんですよね?

補足日時:2006/08/19 06:48
    • good
    • 0

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

この回答への補足

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

補足日時:2006/08/17 15:54
    • good
    • 0

org.apache.poi.poifs.filesystem.POIFSFileSystemなどは、あまり知らないのですが、普通に考えて・・Streamを最後閉じていないところが気になります。


*sheet.removeRow(row);で処理が終わってしまっている(変更の確定(保存)を行う処理が必要では?)
    • good
    • 0
この回答へのお礼

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

おっしゃる通りでした。

sheet.removeRow(row);の後に

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

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

しかし、行は削除ではなく、ただ値がクリアされただけで
テキストボックスに入力した行だけが空白になっている状態です。
ちゃんと削除したいのですがどうしたらよいでしょうか?

お礼日時:2006/08/16 15:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!