【问题标题】:Save XSSF workbook using Javafx Filechooser使用 Javafx Filechooser 保存 XSSF 工作簿
【发布时间】:2023-03-30 03:52:01
【问题描述】:

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

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

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

现在我想使用文件选择器保存它。我希望用户选择文件路径尝试这样做:

     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);

这选择了一个保存路径,但我不知道如何将它与工作簿连接以便可以保存它。 有什么想法吗?

谢谢

【问题讨论】:

  • 在第一个代码块中做同样的事情有什么问题?从所选文件创建一个FileOutputStream 并将其传递给wb.write(...)

标签: excel javafx filechooser


【解决方案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);
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多