我在启动一些代码从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++) {
}
}
我无法确定构造函数应该接收的内容。非常感谢您的帮助!
答案 0 :(得分:1)
也许你想考虑使用TSV(制表符分隔值)作为逗号分隔值(CSV)格式的替代,这通常会因为需要转义逗号而导致困难。这是一个简单的java教程,它实现了一个JTable,然后使用TSV格式将其导出到MS Excel文件:How To Export Records From JTable To MS Excel
以下是导出的Excel文件(手动调整的列宽)
答案 1 :(得分:1)
我使用以下方法从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;
}
答案 2 :(得分:0)
Exporter类方法定义无效。您需要包含返回类型才能编译此代码(我假设这是您在提及构造函数应返回的内容时的含义)。
对于一个简单的实现,您可以考虑返回一个String [] [],然后您可以在双嵌套循环中将其转换为csv数据。我在过去实现过一些类似于以下结构的东西:
ExportAction
|
|--> ExportDestination
|--> ExportFormatter
ExportAction
是javax.swing.Action
的实现,并与“导出到csv”按钮相关联。它引用了两个类:
ExportDestination
:csv数据的逻辑目标。此接口提供了一个方法createWriter(),该方法由操作调用以创建一个“接收器”,用于向下喷射csv数据。 ExportDestination
的具体实现是FileDestination,但我还实现了ClipboardDestination
之类的其他实现。ExportFormatter
:负责将表格行转换为csv数据。我选择一次执行一行:ExportAction
将迭代每一行以导出调用exportFormatter.writeTableRow
并传入从导出目标创建的编写器。这使我可以灵活决定要导出哪些行(例如当前可见/当前选定/所有行)。因此,在回答您的原始问题时,我没有从我的各种导出方法中返回任何内容。相反,当调用该动作时,我会提示用户选择参数(例如文件名),然后在调用我的导出例程之前将其设置。
希望有所帮助。
答案 3 :(得分:0)
可以将导出器变成辅助类。但是,因为看起来你想要导出任何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" );