Excelファイルを読み込む
続いて、XLSファイルを読み込むloadFromFileを作成しましょう。使用するクラス類は、ストリーム関係がInputStreamとなる他はそれほど大きな違いはありません。今度は、ファイルから読み込んだオブジェクトから、ワークブック、シート、行データ、セルデータといったものをとりだしてJTableのモデルに収めていく、といった流れになります。
public void loadFromFile(){
JFileChooser chooser = new JFileChooser();
int res = chooser.showOpenDialog(this);
if (res == JFileChooser.APPROVE_OPTION){
File fname = chooser.getSelectedFile();
FileInputStream input = null;
BufferedInputStream binput = null;
POIFSFileSystem poifs = null;
try {
input = new FileInputStream(fname);
binput = new BufferedInputStream(input);
poifs = new POIFSFileSystem(binput);
HSSFWorkbook workbook = new HSSFWorkbook(poifs);
HSSFSheet sheet = workbook.getSheetAt(0);
int rows = sheet.getLastRowNum();
rows = rows > (row_num - 1) ? row_num - 1 : rows;
for(int i = 0;i <= rows;i++){
HSSFRow row = sheet.getRow(i);
if (row == null) continue;
int cols = row.getLastCellNum();
cols = cols >= (col_num - 1) ? col_num - 1 : cols;
for(int j = 0;j <= cols;j++){
HSSFCell cell = row.getCell((short)j);
if (cell == null) continue;
if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING){
HSSFRichTextString val = cell.getRichStringCellValue();
table.getModel().setValueAt(val,i,j);
}
if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){
double val = cell.getNumericCellValue();
table.getModel().setValueAt(val,i,j);
}
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
binput.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
まず、JFileChooserで読み込むファイルを選択します。このあたりは、保存の場合とだいたい同じですね。唯一違うのは、呼び出すのが保存ダイアログではなく、オープンダイアログである、という点です。
JFileChooser chooser = new JFileChooser();
int res = chooser.showOpenDialog(this);
if (res == JFileChooser.APPROVE_OPTION){
File fname = chooser.getSelectedFile();
JFileChooserインスタンスを作成後、「showOpenDialog」というメソッドを呼び出していますね。これが、ファイルを選択するオープンダイアログです。後は、返値がJFileChooser.APPROVE_OPTIONがどうかを調べ、getSelectedFileで選択されたFileインスタンスを取得する、と保存の場合とまったく同じです。