java - 将 javafx 中的表格上传到 Excel 工作表

标签 java javafx

我一直在尝试找到一种将简单的 JavaFX 表上传到 Excel 工作表中的方法。我在任何地方都找不到将 JavaFX 表上传到 Excel 工作表的简单解决方案。我需要一个按钮,单击该按钮,当前表格将转到 Excel 工作表。

我一直在尝试一些教程以及我在 youtube 和其他来源上找到的其他东西。但我一直试图找到的一切都与我需要的有所不同。

public class Main extends Application {

    Stage window;
    TableView<Person> table;
    TextField nameInput, middlenameInput, backnameInput, adressInput, housenumberInput, zipcodeInput, residenceInput, dateofbirthInput, emailInput, phoneInput;

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        window = primaryStage;
        window.setTitle("thenewboston - JavaFX");

        TableColumn<Person, String> nameColumn = new TableColumn<>("name");
        nameColumn.setMinWidth(150);
        nameColumn.setCellValueFactory(new PropertyValueFactory<>("name"));


        TableColumn<Person, String> middlenameColumn = new TableColumn<>("t.v.");
        middlenameColumn.setMinWidth(75);
        middlenameColumn.setCellValueFactory(new PropertyValueFactory<>("Middlename"));


        TableColumn<Person, String> backnameColumn = new TableColumn<>("last name");
        backnameColumn.setMinWidth(150);
        backnameColumn.setCellValueFactory(new PropertyValueFactory<>("backname"));


        TableColumn<Person, String> adressColumn = new TableColumn<>("adress");
        adressColumn.setMinWidth(150);
        adressColumn.setCellValueFactory(new PropertyValueFactory<>("adress"));


        TableColumn<Person, String> housenumberColumn = new TableColumn<>("Nr");
        housenumberColumn.setMinWidth(30);
        housenumberColumn.setCellValueFactory(new PropertyValueFactory<>("housenumber"));


        TableColumn<Person, String> zipcodeColumn = new TableColumn<>("zipcode");
        zipcodeColumn.setMinWidth(75);
        zipcodeColumn.setCellValueFactory(new PropertyValueFactory<>("zipcode"));


        TableColumn<Person, String> residenceColumn = new TableColumn<>("place");
        residenceColumn.setMinWidth(150);
        residenceColumn.setCellValueFactory(new PropertyValueFactory<>("residence"));


        TableColumn<Person, String> dateofbirthColumn = new TableColumn<>("date of birth");
        dateofbirthColumn.setMinWidth(100);
        dateofbirthColumn.setCellValueFactory(new PropertyValueFactory<>("dateofbirth"));


        TableColumn<Person, String> emailColumn = new TableColumn<>("Email");
        emailColumn.setMinWidth(200);
        emailColumn.setCellValueFactory(new PropertyValueFactory<>("email"));


        TableColumn<Person, String> phoneColumn = new TableColumn<>("phone");
        phoneColumn.setMinWidth(150);
        phoneColumn.setCellValueFactory(new PropertyValueFactory<>("phone"));


        nameInput = new TextField();
        nameInput.setPromptText("name");
        nameInput.setMinWidth(100);

        middlenameInput = new TextField();
        middlenameInput.setPromptText("t.v.");

        backnameInput = new TextField();
        backnameInput.setPromptText("lastName");


        adressInput = new TextField();
        adressInput.setPromptText("Adress");


        housenumberInput = new TextField();
        housenumberInput.setPromptText("nr");


        zipcodeInput = new TextField();
        zipcodeInput.setPromptText("zipcode");


        residenceInput = new TextField();
        residenceInput.setPromptText("place");


        dateofbirthInput = new TextField();
        dateofbirthInput.setPromptText("date of birth");


        emailInput = new TextField();
        emailInput.setPromptText("Email");


        phoneInput = new TextField();
        phoneInput.setPromptText("phone number");


        Button addButton = new Button("Add");
        addButton.setOnAction(e -> addButtonClicked());

        Button deleteButton = new Button("Delete");
        deleteButton.setOnAction(e -> deleteButtonClicked());


        HBox hBox = new HBox();
        hBox.setPadding(new Insets(10,10,10,10));
        hBox.setSpacing(10);
        hBox.getChildren().addAll(nameInput, middlenameInput, backnameInput, adressInput, housenumberInput, zipcodeInput, residenceInput, dateofbirthInput, emailInput, phoneInput, addButton, deleteButton);

        table = new TableView<>();
        table.setItems(getPerson());
        table.getColumns().addAll(nameColumn, middlenameColumn, backnameColumn, adressColumn, housenumberColumn, zipcodeColumn, residenceColumn, dateofbirthColumn, emailColumn, phoneColumn);

        VBox vBox = new VBox();
        vBox.getChildren().addAll(table, hBox);

        Scene scene = new Scene(vBox);
        window.setScene(scene);
        window.show();
    }


    //Add button clicked
    public void addButtonClicked(){
        Person product = new Person();
        product.setName(nameInput.getText());
        product.setMiddlename(middlenameInput.getText());
        product.setBackname(backnameInput.getText());
        product.setAdress(adressInput.getText());
        product.setHousenumber(housenumberInput.getText());
        product.setZipcode(zipcodeInput.getText());
        product.setResidence(residenceInput.getText());
        product.setDateofbirth(dateofbirthInput.getText());
        product.setEmail(emailInput.getText());
        product.setPhone(phoneInput.getText());


        table.getItems().add(product);
        nameInput.clear();
        middlenameInput.clear();
        backnameInput.clear();
        adressInput.clear();
        housenumberInput.clear();
        zipcodeInput.clear();
        residenceInput.clear();
        dateofbirthInput.clear();
        emailInput.clear();
        phoneInput.clear();

    }

    //Delete button clicked
    public void deleteButtonClicked(){
        ObservableList<Person> PersonSelected, allPersons;
        allPersons = table.getItems();
        PersonSelected = table.getSelectionModel().getSelectedItems();

        PersonSelected.forEach(allPersons::remove);
    }

    public ObservableList<Person> getPerson(){
        ObservableList<Person> persons = FXCollections.observableArrayList();
        persons.add(new Person("testName", "" , "lastName", "adressName", "nr", "zipcode", "place", "dateOfBirth", "email@gmail.com", "phoneNumber"));
        persons.add(new Person("testName", "" , "lastName", "adressName", "nr", "zipcode", "place", "dateOfBirth", "email@gmail.com", "phoneNumber"));
        persons.add(new Person("testName", "" , "lastName", "adressName", "nr", "zipcode", "place", "dateOfBirth", "email@gmail.com", "phoneNumber"));
        return persons;
    }

}

这只是一个包含一些常见信息的表格。我需要通过按钮上传到 Excel 工作表

最佳答案

您无法将整个 JavaFx 表直接粘贴到 Microsoft Excel 工作表中。您必须使用 Apache POI 库来写入 Excel 工作表。单击 JavaFx 按钮时,您必须获取所需对象模型的所有字段(例如您案例中的 Person 对象),并使用 Apache POI 库写入 excel 工作表。请参阅下面的链接。

https://poi.apache.org/

关于java - 将 javafx 中的表格上传到 Excel 工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56382761/

相关文章:

java - JDBC 结果集 - 无法检索别名列

java - 在 JavaFX 中运行线程

java - Eclipse Collections 通过自定义类似比较器的函数对 IntList 进行排序,无需装箱

java - 在 SOLR 中获取仅计数为 1 的面孔的匹配项

java - 您如何与部署为弹性 beanstalk 上的工作人员的 docker 容器共享特权信息?

css - JavaFX:CSS 变量

JavaFX:从运行时加载的模态获取数据

java - 加载映射文件 Hibernate 4

JavaFX 导航栏和内容 Pane

java - 在再次打开之前检查阶段是否已经打开 javafx