2015-02-09 58 views

回答

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

你能不能爲我添加一個代碼示例來看看這將如何完成? – NinjaLoop 2015-02-10 07:54:50

+0

你在輸入什麼?我收到WorkbookSettings的錯誤消息。 「找不到標誌」。 – NinjaLoop 2015-02-11 09:30:07

+1

請下載jxl.jar和poi.jar文件以使用此代碼 – sumitsabhnani 2015-02-11 14:21:51

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(); 
    } 
}