Java Swing 使用jxl进行Excel的导入与导出

本文介绍了在Java Swing项目中如何使用jxl库进行Excel文件的导入与导出。作者分享了自己编写的OutExcel和ImportExcel工具类,它们简化了Excel操作流程。OutExcel类用于导出Excel,只需提供标题和数据即可;ImportExcel则用于导入,返回第一个工作表的数据。文章提供了jxl包的下载链接,并指出对于多工作表数据的处理,需要进一步改进ImportExcel的返回类型。

最近在做Java Swing的小项目练手,其中关于数据的采集和统计离不开Excel,目前所了解的可以通过jxl和poi两种jar包完成操作,目前只研究了jxl的常用用法,poi将会补充。

通过老师的代码以及网上各路大神的代码,加之使用FileChooser来进行确定选择文件和导出文件的路径,综合成了OutExcel.java和ImportExcel.java两个自己的常用工具类,特此总结!

jxl包下载地址:http://jexcelapi.sourceforge.net/


导出Excel需要的参数就两个,一个是标题的Object数组,一个是每个单元格数据的Object的二维数组,标题默认加粗,所有单元格字体居中,可根据需要修改。

调用时只需要  new OutExcel(标题数组,数据数组);   就可以了,目前应对简单的数据处理需求感觉十分方便。

OutExcel.java

import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileNameExtensionFilter;
import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.Colour;
import jxl.format.ScriptStyle;
import jxl.format.UnderlineStyle;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;

/**
 *
 * @author 96151
 */
public class OutExcel {

    public OutExcel(String[] title, String[][] context) {
        File f = FileChooser();
        if (f != null) {
            try {
                WritableWorkbook book = Workbook.createWorkbook(f);
                WritableSheet sheet = book.createSheet("Sheet1", 0);
                //创建字体,7个参数分别是字体名称,字号,是否粗体,是否斜体,下划线,颜色,上下标
                WritableFont font = new WritableFont(WritableFont.ARIAL, 12, WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE, Colour.BLACK, ScriptStyle.NORMAL_SCRIPT);
                WritableCellFormat format = new WritableCellFormat(font);
                format.setAlignment(Alignment.CENTRE); //对齐方
                WritableCellFormat format2 = new WritableCellFormat();
                format2.setAlignment(Alignment.CENTRE);
                for (int i = 0; i < title.length; i++) //title
                {
                    sheet.setColumnView(i, 15);
                    sheet.addCell(new Label(i, 0, title[i], format));
                }
                for (int i = 0; i < context.length; i++) //context
                {
                    for (int j = 0; j < context[i].length; j++) {
                        sheet.addCell(new Label(j, i + 1, context[i][j], format2));
                    }
                }
                book.write();
                //关闭文件
                book.close();
                JOptionPane.showMessageDialog(null, "导出成功");
            } catch (Exception ex) {
                JOptionPane.showMessageDialog(null, "导出失败");
            }
        }
    }

    private File FileChooser() {
        JFileChooserDemo fc = new JFileChooserDemo("C:");
        //是否可多选  
        fc.setMultiSelectionEnabled(false);
        //选择模式,可选择文件和文件夹  
        //fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);  
        fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
        //fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);  
        //设置是否显示隐藏文件  
        fc.setFileHidingEnabled(true);
        fc.setAcceptAllFileFilterUsed(false);
        //设置文件筛选器  
        // fc.setFileFilter(new MyFilter("java"));  
        fc.setFileFilter(new FileNameExtensionFilter("Excel文件(*.xls)", "xls"));
        int returnValue = fc.showSaveDialog(null);
        if (returnValue == JFileChooser.APPROVE_OPTION) {
            File file = fc.getSelectedFile();
            String ftype = file.getAbsolutePath().substring(file.getAbsolutePath().length() - 4);
            if (!ftype.equals(".xls")) {
                //如果用户没有填写扩展名,自动添加扩展名.xls
                file = new File(file.getAbsolutePath() + ".xls");
            }
            return file;
        }
        return null;
    }
}

class JFileChooserDemo extends javax.swing.JFileChooser {

    public JFileChooserDemo(String currentDirectoryPath) {
        super(currentDirectoryPath);
    }

    @Override
    public void approveSelection() {
        File file = new File(getSelectedFile() + ".xls");
        if (file.exists()) {
            JOptionPane.showMessageDialog(getParent(), "文件名已被占用");
            return;
        } else {
            super.approveSelection();
        }
    }
}


导入表返回的也是单元格数据形成的二维Project数组,但是不严谨,因为目前默认只是要第一个工作表的数据,若是考虑多个工作表的数据,建议返回类型为List<? extends Project[][]>

ImportExcel.java

import java.io.File;
import java.io.IOException;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

/**
 *
 * @author 96151
 */
public class ImportExcel {

    private Object[][] obj;

    public ImportExcel() throws IOException, BiffException {
        File excelFile = FileChooser();
        Workbook workBook = Workbook.getWorkbook(excelFile);
        // 得到工作簿所有的工作表对象
        Sheet sheet = workBook.getSheet(0);//默认选择第一个表,可根据需求遍历所有表
        // 遍历所有行
        int rowsCount = sheet.getRows();
        int columnsCount = sheet.getRow(0).length;
        obj = new Object[rowsCount - 1][columnsCount];
        for (int i = 1; i < sheet.getRows(); i++) {
            // 得到所有列,在输出列中的内容
            Cell[] cells = sheet.getRow(i);
            for (int j = 0; j < cells.length; j++) {
                obj[i - 1][j] = cells[j].getContents() + "";
            }
        }
        workBook.close();
    }

    private File FileChooser() {
        JFileChooserDemo fc = new JFileChooserDemo("C:");
        //是否可多选  
        fc.setMultiSelectionEnabled(false);
        //选择模式,可选择文件和文件夹  
        //fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);  
        fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
        //fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);  
        //设置是否显示隐藏文件  
        fc.setFileHidingEnabled(true);
        fc.setAcceptAllFileFilterUsed(false);
        //设置文件筛选器  
        // fc.setFileFilter(new MyFilter("java"));  
        fc.setFileFilter(new FileNameExtensionFilter("Excel文件(*.xls)", "xls"));
        int returnValue = fc.showOpenDialog(null);
        if (returnValue == JFileChooser.APPROVE_OPTION) {
            File file = fc.getSelectedFile();
            file = new File(file.getAbsolutePath());
            return file;
        }
        return null;
    }

    /**
     * @return the obj
     */
    public Object[][] getObj() {
        return obj;
    }
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值