如何将数据从JTable导出到CSV

我只是在启动一些代码从JTable中提取值时遇到问题,这样我最终可以将它们称为CSV文件,以便在Excel上查看。 目前我使用以下代码创建了一个JTable:

package com.alpha; import javax.swing.*; import java.awt.*; public class JTableComponent{ public static void main(String[] args) { new JTableComponent(); } public JTableComponent(){ JFrame frame = new JFrame("Whiteboard Test"); JPanel panel = new JPanel(); String data[][] = {{"Company A","1000","1"},{"Company B","2000","2"}, {"Company C","3000","3"},{"Company D","4000","4"}}; String col[] = {"Company Name","Shares","Price"}; JTable table = new JTable(data,col); panel.add(table,BorderLayout.CENTER); frame.add(panel); frame.setSize(300,200); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } 

我已经启动了一个新类,只要按下“导出到CSV”按钮就会调用它。 我将在稍后阶段实现按钮监听器等,现在我想要一些关于如何创建for look的指针,这些指针将遍历列和行以查找其中包含的值。 请注意,JTable是可扩展的,当前的JTable仅用于测试目的。 我知道有一些API可用,例如Apache,但我不想使用它们。

 package com.alpha; public class Exporter extends JTableComponent { public changeToCSV(){ } public changeToCSV() { for(int j = 0; j < table.getColumnCount(); j++) { } } 

我无法确定构造函数应该接收的内容。 非常感谢您的帮助!

也许你想考虑使用TSV(制表符分隔值)作为逗号分隔值(CSV)格式的替代,这通常会因为需要转义逗号而导致困难。 这是一个简单的java教程,它实现了JTable,然后使用TSV格式将其导出到MS Excel文件: 如何将记录从JTable导出到MS Excel

在此处输入图像描述

下面是导出的excel文件(手动调整的列宽)

在此处输入图像描述

我使用以下方法从JTable中提取数据为csv,希望这对某人有帮助

 public static boolean exportToCSV(JTable tableToExport, String pathToExportTo) { try { TableModel model = tableToExport.getModel(); FileWriter csv = new FileWriter(new File(pathToExportTo)); for (int i = 0; i < model.getColumnCount(); i++) { csv.write(model.getColumnName(i) + ","); } csv.write("\n"); for (int i = 0; i < model.getRowCount(); i++) { for (int j = 0; j < model.getColumnCount(); j++) { csv.write(model.getValueAt(i, j).toString() + ","); } csv.write("\n"); } csv.close(); return true; } catch (IOException e) { e.printStackTrace(); } return false; } 

Exporter类方法定义无效。 您需要包含返回类型才能编译此代码(我假设这是您在提及构造函数应返回的内容时的含义)。

对于一个简单的实现,您可以考虑返回一个String [] [],然后您可以在双嵌套循环中将其转换为csv数据。 我在过去实现过一些类似于以下结构的东西:

 ExportAction | |--> ExportDestination |--> ExportFormatter 

ExportActionjavax.swing.Action的实现,并与“Export to csv”按钮相关联。 它引用了两个类:

  • ExportDestination :csv数据的逻辑目标。 此接口提供了一个createWriter()方法,该方法由操作调用以创建一个“sink”,用于向下喷射csv数据。 ExportDestination的具体实现是FileDestination,但我也实现了其他如ClipboardDestination
  • ExportFormatter :负责将表行转换为csv数据。 我选择一次执行一行: ExportAction将遍历每一行以导出调用exportFormatter.writeTableRow并传入从导出目标创建的writer。 这使我可以灵活地决定要导出哪些行(例如,当前可见/当前选择的行/所有行)。

因此,在回答您的原始问题时,我没有从我的各种导出方法中返回任何内容。 相反,当调用动作时,我会提示用户选择参数(例如文件名),然后在调用我的导出例程之前将其设置。

希望有所帮助。

出口商可以成为帮助类。 但是,因为看起来你想要导出任何JTable,你可以做的事情就是简单地切换到实用程序方法。

 public class CSVExporterUtils{ public static void exportToCSV( JTable tableToExport, String pathToExportTo ){ // Pseudocode below /* Open file and test if valid path Loop through each table line Loop through each column Get value at line, column Add value to StringBuilder plus a comma Write contents of StringBuilder to file And add return using System.getProperty("line.separator") End Loop Close file */ } } 

然后,您可以按如下方式调用此方法:

CSVExporterUtils.exportToCSV( myJTable, "c:/myExportedData.csv" );