使用 Javafx 文件选择器保存 XSSF 工作簿



我正在尝试保存我创建的 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);

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

谢谢

此应用程序创建一个 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);
}
}

最新更新