Natural

 

将JTable中的数据导出为csv/xls格式

最近遇到个需求:把JTable中显示的数据导出为excel文件。

常见的方式为导出为csv格式(不依赖第三方jar包),或xls格式(需要第三方jar包支持,例如jxl.jar)。

这样的话只要导出时获取JTable对象,通过JFileChooser选择保存路径,提取JTable表头作为列名,再提取表内容写入即可。

package com.test.util;

import java.awt.Component;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.filechooser.FileFilter;
import javax.swing.table.TableModel;

import jxl.Workbook;
import jxl.WorkbookSettings;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;

public class JTableExportCommand{
    
private JTable table = null;
    
private Component parentComp = null;

    
public JTableExportCommand( JTable table, Component parentComp ){
        
this.table = table;
        
this.parentComp = parentComp;
    }

    
public boolean execute(){
        
if( table == null ){
            
return false;
        }
        File file 
= showSaveDialog();
        
if( file != null ){
            
if( file.exists() ){
                
if( JOptionPane.showConfirmDialog( table"The file already exists, do you want to replace it?" ) != JOptionPane.YES_OPTION ){
                    
return false;
                }
            }

            
if( getExtension( file ).equalsIgnoreCase( "csv" ) ){
                
return CSVFileWriter.writeTableModel( table, file );
            }
else{
                
return XMLFileWriter.writeTableModel( table, file );
            }
        }
        
return false;
    }

    
private File showSaveDialog(){
        JFileChooser chooser 
= new JFileChooser();
        chooser.removeChoosableFileFilter( chooser.getAcceptAllFileFilter() );
        chooser.addChoosableFileFilter( 
new CSVFileFilter() );
        chooser.addChoosableFileFilter( 
new XMLFileFilter() );
        chooser.setFileSelectionMode( JFileChooser.FILES_ONLY );

        
int ret = chooser.showSaveDialog( parentComp );
        
if( ret == JFileChooser.APPROVE_OPTION ){
            File f 
= chooser.getSelectedFile();
            FileFilter filter 
= chooser.getFileFilter();

            
if( filter instanceof CSVFileFilter ){
                String extension 
= getExtension( f );
                
if( extension == null || !extension.equalsIgnoreCase( ( (CSVFileFilter)filter ).getExtension() ) ){
                    
return new File( f.getAbsolutePath() + "." + ( (CSVFileFilter)filter ).getExtension() );
                }
            }
else{
                String extension 
= getExtension( f );
                
if( extension == null || !extension.equalsIgnoreCase( ( (XMLFileFilter)filter ).getExtension() ) ){
                    
return new File( f.getAbsolutePath() + "." + ( (XMLFileFilter)filter ).getExtension() );
                }
            }

            
return f;
        }

        
return null;
    }

    
static class CSVFileFilter extends FileFilter{

        
public boolean accept( File f ){
            
if( f != null ){
                
if( f.isDirectory() ){
                    
return true;
                }
                
if( getExtension().equalsIgnoreCase( JTableExportCommand.getExtension( f ) ) ){
                    
return true;
                }
            }
            
return false;
        }

        
public String getDescription(){
            
return "csv format";
        }

        
public String getExtension(){
            
return "csv";
        }
    }

    
static class CSVFileWriter{
        
public static boolean writeTableModel( JTable fTable, File file ){

            
if( fTable == null ){
                
return false;
            }

            TableModel tableModel 
= fTable.getModel();
            StringBuffer fileBuf 
= new StringBuffer( "" );
            
int rowCount = tableModel.getRowCount();
            
int columnCount = tableModel.getColumnCount();
            
forint col = 0; col < columnCount; col++ ){
                fileBuf.append( tableModel.getColumnName( col ) );
                fileBuf.append( 
"," );
            }
            fileBuf.append( 
"\n" );
            
forint row = 0; row < rowCount; row++ ){
                
forint col = 0; col < columnCount; col++ ){
                    fileBuf.append( tableModel.getValueAt( row, col ).toString() );
                    
if( col != columnCount - 1 ){
                        fileBuf.append( 
"," );
                    }
                }
                fileBuf.append( 
"\n" );
            }
            
try{

                FileWriter writer 
= new FileWriter( file );
                writer.write( fileBuf.toString() );
                writer.close();
                
return true;
            }
catch(IOException e){
                e.printStackTrace( System.err );
                
return false;
            }
        }
    }

    
static class XMLFileFilter extends FileFilter{
        
public boolean accept( File f ){
            
if( f != null ){
                
if( f.isDirectory() ){
                    
return true;
                }
                
if( getExtension().equalsIgnoreCase( JTableExportCommand.getExtension( f ) ) ){
                    
return true;
                }
            }
            
return false;
        }

        
public String getDescription(){
            
return "xls format";
        }

        
public String getExtension(){
            
return "xls";
        }
    }

    
static class XMLFileWriter{
        
public static boolean writeTableModel( JTable fTable, File file ){
            
if( fTable == null ){
                
return false;
            }

            TableModel tableModel 
= fTable.getModel();
            
int rowCount = tableModel.getRowCount();
            
int columnCount = tableModel.getColumnCount();
            WorkbookSettings ws 
= new WorkbookSettings();
            
try{
                WritableWorkbook workbook 
= Workbook.createWorkbook( file, ws );
                String name 
= fTable.getName() != null ? fTable.getName() : "sheet1";
                WritableSheet sheet 
= workbook.createSheet( name, 0 );

                
// header format.
                WritableFont arial10ptBold = new WritableFont( WritableFont.ARIAL, 10, WritableFont.BOLD );
                WritableCellFormat headerFormat 
= new WritableCellFormat( arial10ptBold );
                
//
                WritableCellFormat wrappedformat = new WritableCellFormat( WritableWorkbook.ARIAL_10_PT );
                wrappedformat.setWrap( 
true );

                
// write the table header
                forint col = 0; col < columnCount; col++ ){
                    sheet.addCell( 
new Label( col, 0, tableModel.getColumnName( col ), headerFormat ) );
                }

                
// write the data.
                forint row = 0; row < rowCount; row++ ){
                    
forint col = 0; col < columnCount; col++ ){
                        sheet.addCell( 
new Label( col, row + 1, tableModel.getValueAt( row, col ).toString(), wrappedformat ) );
                    }
                }

                workbook.write();
                workbook.close();
            }
catch(Exception ioe){
                ioe.printStackTrace();
                
return false;
            }

            
return true;
        }
    }

    
public static String getExtension( File f ){
        String ext 
= null;
        String s 
= f.getName();
        
int i = s.lastIndexOf( '.' );
        
if( i > 0 && i < s.length() - 1 ){
            ext 
= s.substring( i + 1 ).toLowerCase();
        }
        
return ext;
    }
}

posted on 2012-12-12 13:34 此号已被删 阅读(1809) 评论(0)  编辑  收藏 所属分类: JAVA


只有注册用户登录后才能发表评论。


网站导航:
 

导航

统计

常用链接

留言簿(8)

随笔分类(83)

随笔档案(78)

文章档案(2)

相册

收藏夹(7)

最新随笔

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜