使用Javafx Filechooser保存XSSF工作簿

时间:2017-07-10 23:06:48

标签: excel javafx filechooser

我正在尝试保存我创建的XSSF工作簿。 与

    FileOutputStream out = new FileOutputStream(new File("example.xlsx"));
    wb.write(out);
    out.close();

我能够将它保存到工作区。 wb是工作手册。

现在我想使用filechooser保存它。我希望用户选择尝试此文件的文件路径:

     FileChooser fileChooser = new FileChooser();
     Stage stage = new Stage();
     fileChooser.setTitle("Save Image");

     FileChooser.ExtensionFilter xlsxFilter = new 
     FileChooser.ExtensionFilter("XLSX files (*.xlsx)", "*.xlsx");
     FileChooser.ExtensionFilter xlsFilter = new 
     FileChooser.ExtensionFilter("XLS files (*.xls)", "*.xls");

     fileChooser.getExtensionFilters().add(xlsFilter);
     fileChooser.getExtensionFilters().add(xlsxFilter);

     System.out.println("save");
     File file = fileChooser.showSaveDialog(stage);

这会选择保存路径,但我不知道如何将其与工作簿连接以便可以保存。 任何想法?

由于

1 个答案:

答案 0 :(得分:1)

此应用程序创建一个Excel工作簿并写入它。然后使用FileChooser

保存工作簿
import java.io.*;
import java.util.logging.*;
import javafx.application.*;
import javafx.event.*;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.*;
import org.apache.poi.xssf.usermodel.*;

/**
 *
 * @author Sedrick
 */
public class JavaFXApplication57 extends Application {

    @Override
    public void start(Stage primaryStage)
    {
        XSSFWorkbook workbook = new XSSFWorkbook();
        XSSFSheet sheet = workbook.createSheet("Java Books");

        //Data to write to Excel file.
        Object[][] bookData = {
            {"Head First Java", "Kathy Serria", 79},
            {"Effective Java", "Joshua Bloch", 36},
            {"Clean Code", "Robert martin", 42},
            {"Thinking in Java", "Bruce Eckel", 35},};

        int rowCount = 0;

        for (Object[] aBook : bookData) {
            XSSFRow row = sheet.createRow(++rowCount);

            int columnCount = 0;

            for (Object field : aBook) {
                XSSFCell cell = row.createCell(++columnCount);
                if (field instanceof String) {
                    cell.setCellValue((String) field);
                }
                else if (field instanceof Integer) {
                    cell.setCellValue((Integer) field);
                }
            }

        }

        Button btn = new Button();
        btn.setText("Save File");
        btn.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent event)
            {
                FileChooser fileChooser = new FileChooser();

                //Set extension filter to .xlsx files
                FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("Excel files (*.xlsx)", "*.xlsx");
                fileChooser.getExtensionFilters().add(extFilter);

                //Show save file dialog
                File file = fileChooser.showSaveDialog(primaryStage);

                //If file is not null, write to file using output stream.
                if (file != null) {
                    try (FileOutputStream outputStream = new FileOutputStream(file.getAbsolutePath())) {
                        workbook.write(outputStream);
                    }
                    catch (IOException ex) {
                        Logger.getLogger(JavaFXApplication57.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            }
        });

        StackPane root = new StackPane();
        root.getChildren().add(btn);

        Scene scene = new Scene(root, 300, 250);

        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args)
    {
        launch(args);
    }

}