我試圖找出將數據從JTable導出爲CSV或XLSX等excel格式的最簡單方式 問題是數據是動態的,所以基本上用戶可以運行動態查詢,並且他/她需要導出該數據。如何將數據導出爲CSV:動態SQL查詢和動態列名稱和JTable上的數據(Java/Netbeans)
1
A
回答
1
最簡單的方法是從JTable讀取所有行並使用POI庫創建一個excel文件。
您可以使用下面您可以在列表或東西保存方法獲取表中的數據: table.getModel().getValueAt(rowIndex, columnIndex);
我們創建EXCEL文件,你可以使用下面的代碼從POI庫
WorkbookSettings ws = new WorkbookSettings();
ws.setLocale(new Locale("en", "EN"));
WritableWorkbook workbook = null;
File newFile = new File(dir.getPath() + "\\" + fileName);
workbook = Workbook.createWorkbook(newFile, ws);
WritableSheet s = workbook.createSheet("mySheet", 0);
for (int i = 1; i <= <columncount>; ++i) {
Label l = new Label(i - 1, 0, <columnname>, cf);
s.addCell(l);
}
for (int j = 1; j <= <rowcount>; j++) {
for (int i = 1; i <= <columncount>; i++) {
Label m = new Label(i - 1, j, <rowvalue>, cf);
s.addCell(m);
}
}
workbook.write();
workbook.close();`
0
這裏的我用來做這個伎倆的課程。它完全按照在視圖中呈現給用戶的方式導出JTable(包括行和列的順序)。如果使用它們,它也可以直接從JLabel自定義渲染器中提取文本。我發的帖子一些小的修改無需編譯,所以告訴我,如果有問題...
請注意,這是一個問題 How to export a JTable to a .csv file? 和 How to export data from JTable to CSV 重複雖然答案只含有僞代碼。
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.JLabel;
import javax.swing.JTable;
public class JTableCSVExporter {
protected char columnDelimiter = ',';
public char getColumnDelimiter() {
return columnDelimiter;
}
public void setColumnDelimiter(char columnDelimiter) {
this.columnDelimiter = columnDelimiter;
}
protected char rowDelimiter = '\n';
public char getRowDelimiter() {
return rowDelimiter;
}
public void setRowDelimiter(char rowDelimiter) {
this.rowDelimiter = rowDelimiter;
}
protected char quote = '"';
public char getQuote() {
return quote;
}
public void setQuote(char quote) {
this.quote = quote;
}
protected boolean useRenderers = true;
public boolean isUseRenderers() {
return useRenderers;
}
/**
* If true, the value provided by table renderers (if they are JLabel) is used as value for CSV.
* If false, or the renderer is not JLabel, the class uses toString of the cell value.
*/
public void setUseRenderers(boolean useRenderers) {
this.useRenderers = useRenderers;
}
protected boolean translateBools = true;
public boolean isTranslateBools() {
return translateBools;
}
/**
* If true, bools are translated to "yes" a "no". Otherwise toString() is used
*/
public void setTranslateBools(boolean translateBools) {
this.translateBools = translateBools;
}
/**
* Exports table to file.
* @throws IOException
*/
public void exportCSV(JTable table, File file) throws IOException {
FileWriter out = new FileWriter(file);
for (int i = 0; i < table.getColumnCount(); i++) {
int columnIndex = table.convertColumnIndexToView(i);
if (columnIndex != -1) {
out.write(table.getColumnName(columnIndex) + columnDelimiter);
}
}
out.write(rowDelimiter);
for (int rowIndex = 0; rowIndex < table.getRowCount(); rowIndex++) {
for (int j = 0; j < table.getColumnCount(); j++) {
int columnIndex = table.convertColumnIndexToView(j);
if (columnIndex != -1) {
String toWrite;
Object value = table.getValueAt(rowIndex, columnIndex);
java.awt.Component rendererComponent = table.getCellRenderer(rowIndex, columnIndex).getTableCellRendererComponent(table, value, false, false, rowIndex, columnIndex);
if (isUseRenderers() && rendererComponent instanceof JLabel) {
toWrite = ((JLabel) rendererComponent).getText();
} else {
if (isTranslateBools() && value instanceof Boolean) {
if (value.equals(Boolean.TRUE)) {
toWrite = "yes";
} else {
toWrite = "no";
}
} else {
if (value == null) {
toWrite = "";
} else {
toWrite = value.toString();
}
}
}
out.write(quote + toWrite.replace(Character.toString(quote), "\\" + quote) + quote + columnDelimiter);
}
}
out.write(rowDelimiter);
}
out.close();
}
}
相關問題
- 1. 動態數據庫和SQL查詢
- 2. 如何使服務器名稱和數據庫名稱動態
- 3. 動態加入SQL查詢數據和Rest服務數據
- 4. SQL查詢中使用其動態行數據的列名
- 5. 使用動態SQL查詢「導出數據集操作」
- 6. 如何動態檢索列和數據
- 7. 導出ActiveAdmin CSV中的動態列數
- 8. 如何使用sql查詢動態分組和動態分列?
- 9. SQL Server - 動態數據透視查詢
- 10. 輸出數據,動態sql
- 11. TSQL - 動態數據查詢
- 12. SQL命令名稱是數據庫名稱;使用動態SQL?
- 13. primefaces導出數據表動態列
- 14. 動態參數和查詢
- 15. 如何使用動態表和字段名稱連接數據
- 16. SQL查詢 - 無效的列名稱和參數 - 數據.ES
- 17. 動態sql查詢PHP和
- 18. rails從動態url導入csv數據
- 19. 將Hive數據庫(所有表和列名稱)導出爲文本或csv
- 20. 更新查詢的動態列名稱
- 21. php導出mysql數據與動態列csv
- 22. 將動態輸入名稱的數據保存到數據庫?
- 23. 從LINQ動態sql查詢檢索和打印數據
- 24. 選擇varchar值作爲動態sql查詢中的列名稱
- 25. 如何將數據從JTable導出爲CSV
- 26. 如何在SQL查詢中包含動態列名稱
- 27. 如何列出來自SSRS數據集中動態SQL查詢的字段
- 28. 使用動態SQL SELECT列名和相關數據UNPIVOT
- 29. 動態SQL - 根據參數查詢不同的數據庫
- 30. 通過PHP從動態表格數據導出爲CSV
你能不能爲我添加一個代碼示例來看看這將如何完成? – NinjaLoop 2015-02-10 07:54:50
你在輸入什麼?我收到WorkbookSettings的錯誤消息。 「找不到標誌」。 – NinjaLoop 2015-02-11 09:30:07
請下載jxl.jar和poi.jar文件以使用此代碼 – sumitsabhnani 2015-02-11 14:21:51