2015-10-28 25 views
0
我在從我的節目導出到Excel一個JTable問題

,我用這個方法,因爲事實上,我不能用POI出口問題的java表到excel

public void exportTable(File file)throws IOException{ 
    FileWriter out = new FileWriter(file); 
    BufferedWriter bw = new BufferedWriter(out); 
    for(int i = 0; i < myTable.getColumnCount(); i++){ 
     bw.write(myTable.getColumnName(i) + "\t"); 
    } 
    bw.write("\n"); 
    for(int i = 0; i < myTable.getRowCount(); i++){ 
     for(int j = 0; j < myTable.getColumnCount(); j++){ 
      bw.write(myTable.getValueAt(i, j).toString() +"\t"); 
     } 
     bw.write("\n"); 
    } 
    bw.close(); 
    JOptionPane.showMessageDialog(rootPane, "Your table have been exported to " + file); 
} 

而且我用這個方法與此:

try{ 
    Date date = new Date(); 
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy_HH-mm-ss"); 
    String desktop = System.getProperty("user.home") + "/Desktop"; 
    String name = desktop + "/MyTable" + dateFormat.format(date)+ ".csv"; 
    exportTable(new File(name)); 
}catch(IOException e){ 
    e.getMessage(); 
} 

嗯,這是工作不錯,但問題是,在一排每列都被寫在第一列,這一翻譯被寫在不同的專欄中,我認爲「\ t」會解決這個問題,但是,不知道我該如何解決這個問題?

+1

爲了更快得到更好的幫助,請發佈[MCVE]或[簡短,獨立,正確的示例](http://www.sscce.org/)。順便說一句 - 在過去的幾天裏你沒有問過這個問題嗎? –

+0

我發佈了一個類似的問題,但我可以解決這個問題,現在我有一個不同的問題 – Diego

+0

順便說一句 - 得到這個硬編碼數組的工作,它應該爲Swing JTable工作,所以這真的表明這與Swing或JTable無關。我懷疑在刪除的問題上我會提到相同的東西! –

回答

3

因此,您的代碼可以正常工作,所以問題在於您的代碼中哪些地方沒有與我們分享。考慮提供一個runnable example這表明你的問題。這不是代碼轉儲,而是您正在做的事情的一個例子,它突出了您遇到的問題。這將導致更少的混亂和更好的反應

我會的,不過,建議你看看The try-with-resources StatementStringJoiner這將有助於使您的生活更輕鬆

import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.util.StringJoiner; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.table.DefaultTableModel; 

public class Test { 

    public static void main(String[] args) { 
     new Test(); 
    } 

    public Test() { 
     DefaultTableModel model = new DefaultTableModel(0, 10); 
     for (int row = 0; row < 10; row++) { 
      String[] cols = new String[10]; 
      for (int col = 0; col < cols.length; col++) { 
       cols[col] = row + "x" + col; 
      } 
      model.addRow(cols); 
     } 

     try { 
      exportTable(new JTable(model), new File("bananas.csv")); 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 
    } 

    public void exportTable(JTable myTable, File file) throws IOException { 
     try (BufferedWriter bw = new BufferedWriter(new FileWriter(file))) { 
      StringJoiner sj = new StringJoiner("\t"); 
      for (int i = 0; i < myTable.getColumnCount(); i++) { 
       sj.add(myTable.getColumnName(i)); 
      } 
      bw.write(sj.toString()); 
      bw.newLine(); 
      for (int i = 0; i < myTable.getRowCount(); i++) { 
       sj = new StringJoiner("\t"); 
       for (int j = 0; j < myTable.getColumnCount(); j++) { 
        sj.add(myTable.getValueAt(i, j).toString()); 
       } 
       bw.write(sj.toString()); 
       bw.newLine(); 
      } 
//   JOptionPane.showMessageDialog(rootPane, "Your table have been exported to " + file); 
     } 
    } 

} 

,輸出

A B C D E F G H I J 
0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 
1x0 1x1 1x2 1x3 1x4 1x5 1x6 1x7 1x8 1x9 
2x0 2x1 2x2 2x3 2x4 2x5 2x6 2x7 2x8 2x9 
3x0 3x1 3x2 3x3 3x4 3x5 3x6 3x7 3x8 3x9 
4x0 4x1 4x2 4x3 4x4 4x5 4x6 4x7 4x8 4x9 
5x0 5x1 5x2 5x3 5x4 5x5 5x6 5x7 5x8 5x9 
6x0 6x1 6x2 6x3 6x4 6x5 6x6 6x7 6x8 6x9 
7x0 7x1 7x2 7x3 7x4 7x5 7x6 7x7 7x8 7x9 
8x0 8x1 8x2 8x3 8x4 8x5 8x6 8x7 8x8 8x9 
9x0 9x1 9x2 9x3 9x4 9x5 9x6 9x7 9x8 9x9 

更新

我想我終於明白了你的conundr嗯,使用Excel中提示你對一個CSV是如何劃定,似乎並沒有做任何更多的(至少不是我)

所以,用StringJoiner sj = new StringJoiner(",");sj = new StringJoiner(","); respectivly更換StringJoiner sj = new StringJoiner("\t");sj = new StringJoiner("\t");

Excel

+0

對不起,我不能分享我的例子,因爲我使用netbeans,而且我甚至不知道extain代碼的位置在哪裏該表正在創建,我的代碼也有很多西班牙語單詞;如果我這樣導出我的表格爲.txt而不是.csv效果不錯,但問題是當我將表格導出爲.csv文件(並且這正是我需要的) – Diego

+0

那裏,現在它導出到CSV ...你認爲一個CSV文件是什麼,它只是一個格式化的文本文件 – MadProgrammer

+0

CSV不是一個Excel文件?那麼,我需要使用哪個擴展來創建一個帶有信息的excel文件?我嘗試過。xls,但是會出錯 – Diego

2

如果一行的所有值都顯示在第一列的Excel中,則可以標記第一列並使用Excels「text to columns」函數。您可以指定即將到來的對話框將製表符用作分隔符。

如果導出逗號而不是製表符,則可以在Excel中打開它,並且應該自動拆分行,但僅在某些Excel版本中,僅當文件從資源管理器中打開時才能拆分。