2014-09-16 1 views
0

Я пытаюсь экспортировать данные Jtable в лист Excel с помощью HSSFWorkbook. Я получаю все данные из JTable, но десятичный формат отличается от JTable. Пожалуйста, кто может мне помочь ...Decimalformat в экспортированном файле xls отличается от JTable

Например: JTable -> 4555
экспортированной XLS -> 4,55479080958

Здесь команда используется для Принимая содержание JTable:

try { 
     for (int i = 0; i < tableModel.getRowCount(); i++) { 
      fRow1 = workbookSheet.createRow((short) i); 

      for (int j = 0; j < tableModel.getColumnCount(); j++) { 
       HSSFCell cell = fRow1.createCell((short) j); 
       cell.setCellValue(tableModel.getValueAt(i, j).toString()); 

      } 

     } 

     FileOutputStream fileOutputStream; 
     fileOutputStream = new FileOutputStream("C:\\file.xls"); 

     BufferedOutputStream bos = new BufferedOutputStream(fileOutputStream); 
     hssfWorkbook.write(bos); 
     bos.close(); 
     fileOutputStream.close(); 
    } catch (Exception e) { 
     for (int i = 0; i < tableModel.getColumnCount(); i++) { 
      fRow1 = workbookSheet.createRow((short) i); 

      for (int j = 0; j < tableModel.getColumnCount(); j++) { 
       HSSFCell cell = fRow1.createCell((short) j); 
       cell.setCellValue(tableModel.getValueAt(i, j).toString()); 

       System.out.println(tableModel.getColumnName(j)); 
      } 
     } 
    } 

А вот код для JTable:

public class FileModel extends AbstractTableModel implements FilenameFilter { 

List<Object[]> data = new ArrayList<>(); 

String titles[] = new String[] { "File Name", "Pages", "Media Box Height", "Media Box Width", "Trim Box Height", 
     "Trim Box Width", "Path" }; 
Class<?> types[] = new Class[] { String.class, Integer.class, Float.class, Float.class, Float.class, Float.class, 
     String.class }; 

public FileModel() { 
    this("C:\\"); 

} 

public FileModel(String directory) { 
    File inputFiles = new File(directory); 
    setFileStats(inputFiles); 
} 

// Implement the methods of the TableModel interface Only getRowCount(), getColumnCount() and getValueAt() are 
// required. 
// 

@Override 
public int getRowCount() { 
    return this.data.size(); 
} 

@Override 
public int getColumnCount() { 
    return this.titles.length; 
} 

@Override 
public String getColumnName(int column) { 
    return this.titles[column]; 
} 

@Override 
public Class<?> getColumnClass(int column) { 
    return this.types[column]; 
} 

@Override 
public Object getValueAt(int row, int column) { 
    return this.data.get(row)[column]; 
} 
+1

Где установить формат Excel? – trashgod

+0

oh man, thx. Я действительно забываю установить формат ... – okaisan1

+0

Вы можете [ответить на свой вопрос] (http://meta.stackoverflow.com/q/17463/163188); [короткий, полный пример] (http://stackoverflow.com/help/mcve) всегда приветствуется. – trashgod

ответ

0

Я DecimalFormat:

DecimalFormat formatDecimal = new DecimalFormat("###.000"); 

и позже я добавить объект в мой AbstractTable с помощью DecimalFormat:

this.data.add(new Object[] { file.getName(), formatDecimal.format(123.42345),file.getAbsolutePath() }); 
+0

Это работает для столбца типа 'String'; альтернативно, рассмотрите [настраиваемый рендерер] (http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#renderer) для числового типа. – trashgod

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