使用Filechooser保存文件JExcel

时间:2014-03-04 16:57:46

标签: java jxl filechooser

我正在尝试使用jxl保存excel文件,但是当我尝试保存文件时必须重新输入并保存普通内容而没有内容。我正在使用一个类来生成excel文件。

public class lsheet {
    public void fillData(JTable table, File file){
        try{
           WritableWorkbook workbook1 = Workbook.createWorkbook(file);
            WritableSheet sheet1 = workbook1.createSheet("Data 1", 0);
            TableModel model = table.getModel();
            for (int i = 0; i < model.getColumnCount(); i++) {
                Label column = new Label(i, 0, model.getColumnName(i));
                sheet1.addCell(column);
            }
            int j = 0;
            for (int i = 0; i < model.getRowCount(); i++) {
                for (j = 0; j < model.getColumnCount(); j++) {
                    Label row = new Label(j, i + 1,
                            model.getValueAt(i, j).toString());
                    sheet1.addCell(row);
                }
            }
            workbook1.write();
            workbook1.close();
        }catch(Exception ex){
            ex.printStackTrace();
        }
    }
}

此操作按钮,如何显示带有表中加载数据的filechooser?

lsheet sht = new lshtCalc();
java.util.Date today = new java.util.Date();
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
try{
  String name="";
  JFileChooser file=new JFileChooser();
  file.showSaveDialog(this);
  File save =file.getSelectedFile();
  if(save !=null){
      FileWriter save = new FileWriter(save + ".xls");
      sht.fillData(tblCliente, new File("Report-Client-"+ sdf2.format(today).toString()+".xls"));
      save.close();
  }
}catch(Exception ex){
    ex.printStackTrace();
}

1 个答案:

答案 0 :(得分:0)

您传递给fillData方法的文件对象是您使用时间戳创建的文件对象,因此它将在您的工作区中使用您的JTable中的内容创建一个具有该名称的文件。

使用JFileChooser选择的文件仅用于创建文件编写器并将其关闭。因此,它会在您选择的位置创建一个空文件。

尝试此更改:

          JFileChooser file=new JFileChooser();
          file.showSaveDialog(this);
          File save =file.getSelectedFile();
          if(save !=null){

              sht.fillData(tblCliente, save);

          }
        }catch(Exception ex){
            ex.printStackTrace();
        }