2015-10-28 4 views
0

У меня возникли проблемы при экспорте JTable из моей программы в Excel, я использую этот метод, из-за тот факт, что я не разрешен использовать POIПроблем экспортирующих Java таблицы, чтобы преуспеть

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

Ну, что работает хорошо, но проблема в том, что каждый столбец в строке записываются в первом столбце, Intead быть написаны в разных колонках я подумал, что «\ t» исправит эту проблему, но нет, какой-либо идеи, как я могу это исправить?

+1

Чтобы лучше помочь, опубликуйте [MCVE] или [Short, Self Contained, Correct Example] (http://www.sscce.org/). Кстати, разве ты не задавал этот вопрос в последние пару дней? –

+0

Я опубликовал аналогичный вопрос, но я мог бы решить проблему, теперь у меня другая проблема. – Diego

+0

BTW - получите эту работу для жесткого кодированного массива, и он должен работать для Swing 'JTable', так что это действительно указывает это не имеет ничего общего с Swing или 'JTable'. И я подозреваю, что я бы упомянул то же самое по удаленному вопросу! –

ответ

3

Итак, ваш код работает нормально, поэтому проблема заключается в том, где в вашем коде, который вы не используете с нами. Рассмотрите возможность предоставления runnable example, который демонстрирует вашу проблему. Это не дамп кода, а пример того, что вы делаете, что подчеркивает проблему, с которой вы сталкиваетесь. Это приведет к уменьшению путаницы и лучше ответов

Я бы, однако, предлагаю вам взглянуть на The try-with-resources Statement и StringJoiner, которые помогут сделать вашу жизнь проще

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 

Обновлено

Я думаю, что, наконец, понимаю вашу проблему гм, Excel использовать для запросить у о том, как CSV был очерчен, как представляется, не делать больше (по крайней мере для меня)

Итак, замените StringJoiner sj = new StringJoiner("\t"); и sj = new StringJoiner("\t"); с StringJoiner sj = new StringJoiner(","); и sj = new StringJoiner(","); respectivly

Excel

+0

Извините, я не могу поделиться своим примером, потому что я использую netbeans, и даже не знаю, где это полный код, где создается таблица, также мой код содержит много испанских слов; Если я экспортирую, то моя таблица в .txt вместо .csv работает хорошо, но проблема в том, когда я экспортирую таблицу в CSV-файл (и это то, что мне нужно) – Diego

+0

Там, теперь он экспортируется в CSV ... как вы думаете, CSV-файл какой-либо, это просто форматированный текстовый файл – MadProgrammer

+0

CSV не является файлом Excel? Итак, какое расширение мне нужно использовать для создания файла excel с информацией? Я пробовал.xls, но он делает ошибку – Diego

2

Если все значения строки показаны в Excel в первом столбце, вы можете отметить этот первый столбец и использовать функцию Excels «text to columns». Чем вы можете указать предстоящий диалог, чтобы использовать символ табуляции как разделительный символ.

Если вы экспортируете запятые вместо вкладок, вы можете открыть их в Excel, и строки должны быть разделены автоматически, но в некоторых версиях Excel только тогда, когда файл открывается из проводника.

Смежные вопросы