Java 如何将数据从JTable导出到CSV
我只是在开始编写一些代码从JTable中提取值时遇到了一些问题,这样我最终可以将它们作为CSV文件在Excel中查看。目前,我使用以下代码创建了一个JTable:Java 如何将数据从JTable导出到CSV,java,jtable,Java,Jtable,我只是在开始编写一些代码从JTable中提取值时遇到了一些问题,这样我最终可以将它们作为CSV文件在Excel中查看。目前,我使用以下代码创建了一个JTable: package com.alpha; import javax.swing.*; import java.awt.*; public class JTableComponent{ public static void main(String[] args) { new JTableComponent(); }
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外观的指针,该外观将通过列和行查找其中包含的值。请注意,JTable是可伸缩的,当前的JTable只是用于测试目的。我知道有些API是可用的,比如ApacheOne,但是我不想使用它们
package com.alpha;
public class Exporter extends JTableComponent
{
public changeToCSV(){
}
public changeToCSV()
{
for(int j = 0; j < table.getColumnCount(); j++) {
}
}
package com.alpha;
公共类导出器扩展了JTableComponent
{
公共变更{
}
公共变更
{
对于(int j=0;j
我很难决定构造函数应该收到什么。非常感谢您的帮助!导出器类方法定义无效。您需要包含返回类型才能编译此代码(我想这就是您提到构造函数应该返回什么时的意思)
对于一个简单的实现,您可以考虑返回一个字符串[]],然后在双嵌套循环中转换成CSV数据。在过去,我已经实现了一个类似于
的结构。ExportAction
|
|--> ExportDestination
|--> ExportFormatter
ExportAction
是javax.swing.Action
的一个实现,与“导出到csv”按钮关联。它引用了两个类:
:csv数据的逻辑目标。此接口提供了一个方法createWriter(),该方法由创建“接收器”的操作调用ExportDestination
的一个具体实现是FileDestination,但我也实现了其他一些,如ExportDestination
ClipboardDestination
:负责将表行转换为csv数据。我选择一次执行一行:ExportFormatter
将迭代每行以导出调用ExportAction
,并传入从导出目标创建的写入程序。这给了我f灵活决定要导出的行(例如,当前可见/当前选定/所有行)ExportFormatter.writeTableRow
希望对您有所帮助。Exporter可以被制作成一个helper类。但是,由于您似乎想要导出任何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
*/
}
}
然后可以按如下方式调用此方法:
<> >代码> CVSuxTurtuuts.ExpToSV(MyJTABLE,“C:/MyExuttDeave.CSV”);> P>您可能想考虑使用TSV(Tab分隔值)作为逗号分隔值(CSV)的替代方案。格式,这通常会因为需要转义逗号而造成困难。下面是一个简单的java教程,它实现了JTable,然后使用TSV格式将其导出到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;
}
公共静态布尔exportToCSV(JTable tableToExport,
字符串路径(导出到){
试一试{
TableModel model=tableToExport.getModel();
FileWriter csv=新FileWriter(新文件(路径导出到));
对于(int i=0;i
构造函数不能返回任何内容。没错,我的错误编程术语很糟糕。我应该说构造函数应该收到什么。要传递信息,可以通过构造函数进行初始化,如下所示:公共导出器(JTable myJTable){this.myJTable=myJTable;}
谢谢,我知道我需要返回一个类型,我只是粘贴了我的Exporter类,让人们知道我想要实现什么。正如我所说,我真的很想得到一些关于如何继续For循环以及Exporter类将包含什么内容的建议/指针(因为字符串不正确).Hi James,如果您能够实现这个(CSVExporterUtils.java)类,它将非常有用,人们可以将它用作csv util。