Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
修改按钮上的Excel单元格值,单击Apache POI&;JavaFX_Java_Excel_Javafx_Apache Poi - Fatal编程技术网

修改按钮上的Excel单元格值,单击Apache POI&;JavaFX

修改按钮上的Excel单元格值,单击Apache POI&;JavaFX,java,excel,javafx,apache-poi,Java,Excel,Javafx,Apache Poi,我正试图编写一个简单的程序,创建一个小应用程序,点击按钮将把一个值写入excel电子表格 在下面的代码中,程序将把值25写入单元格,然后打印“25.0”。然后它会在点击按钮时将50写入单元格,并打印出“50.0”,但一旦我关闭应用程序并打开电子表格,单元格内就会显示值25 package javafxapplication2; import javafx.application.Application; import javafx.event.ActionEvent; import javaf

我正试图编写一个简单的程序,创建一个小应用程序,点击按钮将把一个值写入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);
}

}
PackageJavaFXApplication2;
导入javafx.application.application;
导入javafx.event.ActionEvent;
导入javafx.event.EventHandler;
导入javafx.scene.scene;
导入javafx.scene.control.Button;
导入javafx.scene.layout.StackPane;
导入javafx.stage.stage;
导入org.apache.poi.xssf.usermodel.*;
导入java.io.*;
公共类JavaFXApplication2扩展了应用程序{
@凌驾
public void start(Stage primaryStage)引发异常{
XSSFWorkbook schedule=新建XSSFWorkbook();
XSSFSheet firstSheet=schedule.createSheet(“disa sheet”);
XSSFRow firstRow=firstSheet.createRow(0);
XSSFCell firstCell=firstRow.createCell(0);
firstCell.setCellValue(25);
System.out.println(firstCell.getRawValue());
按钮btn=新按钮();
btn.setText(“说‘你好,世界’”);
btn.setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent e){
写入信息单元(第一单元,50);
System.out.println(firstCell.getRawValue());
}
});
//});
FileOutputStream out=新的FileOutputStream(新文件(“schedule.xlsx”);
附表.写(出);
out.close();
StackPane root=新的StackPane();
root.getChildren().add(btn);
场景=新场景(根,300,250);
setTitle(“你好,世界!”);
初级阶段。场景(场景);
primaryStage.show();
}
public void writeInfo单元格(XSSFCell单元格,int信息){
cell.setCellValue(信息);
}
/**
*@param指定命令行参数
*/
公共静态void main(字符串[]args){
发射(args);
}
}
有人能帮我弄清楚吗?它必须与按钮的点击有关,因为如果我完全移除按钮,值将正确写入单元格


谢谢大家!

抱歉,但是,您的观点是,当应用程序再次运行时,您需要有一个空值,或者什么


如果您的问题只是“打开时保持干净”,您可以在代码或js上放置一个简单的jquery并清理输入。

您的btn操作只写入
XSSFCell
,而不是写入
xssf工作簿

尝试:

btn.setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent e){
FileOutputStream out=新的FileOutputStream(新文件(“schedule.xlsx”);
写入信息单元(第一单元,50);
System.out.println(firstCell.getRawValue());
附表.写(出);
out.close();
}
});

你能详细说明一下吗?这和小溪有关吗?事实上,我对写文件还很陌生,所以如果你能详细说明或者给我指一个非常有用的资源。还请注意,您必须捕获FileNotFoundException和IOException,这与将来使用此建议的任何人无关。正如我所说的,您的btn操作只是向XSSFCell写入数据,而不是向XSSF工作簿写入数据<代码>时间表。写(出)仅在代码中执行一次,即应用程序创建舞台和场景时执行一次。@Jeremy O'Handley:您似乎不了解
start
何时运行。它在创建阶段时运行一次。它创建工作簿,设置值25,创建按钮,在操作处理程序上设置按钮,并写入
schedule.xlsx
。然后在舞台上展示场景并完成。在按钮上,仅单击
btn
OnAction
运行,不运行其他操作。
启动
不会再次运行。“为什么要这么做?”阿克塞尔·里克特说得通。如果我希望这些操作晚于start方法,我应该把它放在另一个类或main中?@Jeremy O'Handley:吉诺的回答有什么不对?对我来说,这看起来是正确的。您可以对代码进行编程,以便在需要时随时执行所需的操作。或者点击按钮,如下所示。但也在程序流的某个地方。但是你当然需要知道程序是如何运行的。但学习这一点并不是一个问题就能解决的。这里有针对学生的教程或课程。
btn.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent e) {
            FileOutputStream out = new FileOutputStream(new File("schedule.xlsx"));                 
            writeInfoToCell(firstCell,50);
            System.out.println(firstCell.getRawValue());
            schedule.write(out);
            out.close();
            }

        });