Javafx复制表格到Excel

问题描述:

我正在创建一个应用程序,其中我在图表和表格中显示一些数据。现在我希望用户能够从表格中复制数据并将其插入到Excel中。我的复制功能工作正常,但输出有些问题。Javafx复制表格到Excel

举例来说,如果我想复制下表:

My table

我得到在Excel中下面的输出:

enter image description here

,如果你不能告诉,该数据显示在Excel中的单个列中。

有谁知道,我怎么才能实现正确的输出,让每个数据进入一个单独的列,当粘贴到Excel?

下面是我用复制的代码:

table.getSelectionModel().setCellSelectionEnabled(true); 
table.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); 
MenuItem item = new MenuItem("Kopiér"); 
item.setOnAction(new EventHandler<ActionEvent>() { 
    @Override 
    public void handle(ActionEvent event) { 
     ObservableList<TablePosition> posList = table.getSelectionModel().getSelectedCells(); 
     int old_r = -1; 
     StringBuilder clipboardString = new StringBuilder(); 
     for (TablePosition p : posList) { 
      int r = p.getRow(); 
      int c = p.getColumn(); 
      Object cell = table.getColumns().get(c).getCellData(r); 
      if (cell == null) 
       cell = ""; 
      if (old_r == r) 
       clipboardString.append('\t'); 
      else if (old_r != -1) 
       clipboardString.append('\n'); 
      clipboardString.append(cell); 
      old_r = r; 
     } 
     final ClipboardContent content = new ClipboardContent(); 
     System.out.println(clipboardString); 
     content.putString(clipboardString.toString()); 
     Clipboard.getSystemClipboard().setContent(content); 
    } 
}); 
MenuItem item2 = new MenuItem("Kopier række"); 
item2.setOnAction(new EventHandler<ActionEvent>() { 
    @Override 
    public void handle(ActionEvent event) { 
     String rowContent = ""; 
     ObservableList<TablePosition> posList = table.getSelectionModel().getSelectedCells(); 
     System.out.println(rowContent); 
     for (TablePosition p : posList) { 
      int c = 1; 
      int row = p.getRow(); 
      System.out.println("c " +c); 
      System.out.println("row "+row); 
      for (int i = 1; i < table.getColumns().size(); i++) { 
       rowContent = rowContent +" "+table.getColumns().get(c).getCellData(row); 
       if (c < 13) { 
        c++;    
       } 
      }  
     } 
     final ClipboardContent allContent = new ClipboardContent(); 
     allContent.putString(rowContent.toString()); 
     Clipboard.getSystemClipboard().setContent(allContent); 
     System.out.println(allContent.toString()); 
     rowContent = ""; 
    } 
}); 
ContextMenu menu = new ContextMenu(); 
menu.getItems().addAll(item,item2); 

添加列之间的制表\t。 Excel应该认识到这一点并使用新的单元格。它通过使用选项卡并将其粘贴到Excel中时将其写入记事本中。

+0

谢谢你傻我:) – 2013-03-19 13:05:37