猿问

在按钮单击 Apache POI 和 JavaFX 上修改 Excel 单元格值

我正在尝试编写一个简单的程序来创建一个小应用程序,单击按钮会将值写入 Excel 电子表格。


在下面的代码中,程序会将值 25 写入单元格,然后打印“25.0”。然后它会在单击按钮时将 50 写入单元格并打印出“50.0”,但是一旦我关闭应用程序并打开电子表格,单元格内就会显示值 25。


package javafxapplication2;


import javafx.application.Application;

import javafx.event.ActionEvent;

import javafx.event.EventHandler;

import javafx.scene.Scene;

import javafx.scene.control.Button;

import javafx.scene.layout.StackPane;

import javafx.stage.Stage;

import org.apache.poi.xssf.usermodel.*;

import java.io.*;



public class JavaFXApplication2 extends Application {


@Override

public void start(Stage primaryStage) throws Exception {

    XSSFWorkbook schedule = new XSSFWorkbook();

    XSSFSheet firstSheet = schedule.createSheet("Dis a sheet");

    XSSFRow firstRow = firstSheet.createRow(0);

    XSSFCell firstCell = firstRow.createCell(0);

    firstCell.setCellValue(25);

    System.out.println(firstCell.getRawValue());


    Button btn = new Button();

    btn.setText("Say 'Hello World'");


    btn.setOnAction(new EventHandler<ActionEvent>() {

        @Override

        public void handle(ActionEvent e) {

            writeInfoToCell(firstCell,50);

            System.out.println(firstCell.getRawValue());

        }


    });


    //});

    FileOutputStream out = new FileOutputStream(new File("schedule.xlsx"));

    schedule.write(out);

    out.close();

    StackPane root = new StackPane();

    root.getChildren().add(btn);


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


    primaryStage.setTitle("Hello World!");

    primaryStage.setScene(scene);

    primaryStage.show();


}

public void writeInfoToCell(XSSFCell cell, int information){

    cell.setCellValue(information);

}

/**

 * @param args the command line arguments

 */

public static void main(String[] args) {

    launch(args);

}


}

有人可以帮我解决这个问题吗?它必须与单击按钮有关,因为如果我完全删除按钮,则值会正确写入单元格。


谢谢!


心有法竹
浏览 154回答 2
2回答

倚天杖

您的 btn 操作仅写入 ,XSSFCell但您不会写入XSSFWorkbook.尝试:btn.setOnAction(new EventHandler<ActionEvent>() {&nbsp; &nbsp; &nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp; public void handle(ActionEvent e) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; FileOutputStream out = new FileOutputStream(new File("schedule.xlsx"));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; writeInfoToCell(firstCell,50);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.out.println(firstCell.getRawValue());&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; schedule.write(out);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; out.close();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; });

繁华开满天机

抱歉,但是,您的意思是当您的应用程序再次运行时,您需要有一个空值,或者什么?如果您的问题只是“打开时保持干净”,您可以在代码或 js 上放置一个简单的 jquery 并清除输入。
随时随地看视频慕课网APP

相关分类

Java
我要回答