现在的位置: 首页 > 综合 > 正文

使用jxl导出excel swing JFileChooser

2013年09月20日 ⁄ 综合 ⁄ 共 3241字 ⁄ 字号 评论关闭

使用jxl导出excel 收藏

* 网上收集些资料写了个简单的java导出excel文件的公共类,可以直接拿来用
 * 只需提供一个list 集合, list里封装了插入到excel文件的头与内容
 * 使用JFileChooser类,提供保存框选择路径保存
 * 使用前引用jxl.jar包

package com.nms.util;

import java.io.File;
import java.io.FileOutputStream;
import java.util.List;

import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileFilter;

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

public class ExcelUtil {
 /**
  * 导出的公共类
  * 
  * @param list
  *            头与内容存放在String[]数组里 一起封装在list里
  * @throws Exception
  */
 public static void writeExcel( List<String[]> list)
   throws Exception {
  //弹出保存框
  JFileChooser file = ExcelUtil.getFile();
  //判断是否关闭或取消保存框
  if (file != null) {
   //的到保存路径
   String fpath=file.getSelectedFile().getAbsolutePath()+".xls";
   //创建文件
   File f = new File(fpath);
   WritableWorkbook wwb = Workbook
     .createWorkbook(new FileOutputStream(f));
   WritableSheet ws = wwb.createSheet("TestSheet1", 0);
   // 设置字体样式
   WritableFont wfc = new WritableFont(WritableFont.ARIAL, 16,
     WritableFont.BOLD, false);
   WritableCellFormat wcfFC = new WritableCellFormat(wfc);
   // 遍历列头字段名
   for (int i = 0; i < list.get(0).length; i++) {
    Label labelC = new jxl.write.Label(i, 0, list.get(0)[i], wcfFC);
    ws.addCell(labelC);
   }
   // 遍历内容
   for (int i = 1; i < list.size(); i++) {
    for (int j = 0; j < list.get(i).length; j++) {
     Label labelC = new jxl.write.Label(j, i, list.get(i)[j]);
     ws.addCell(labelC);
    }
   }
   // 写入Exel工作表
   wwb.write();
   // 关闭Excel工作薄对象
   wwb.close();
   //消息框
   JOptionPane.showMessageDialog(null, "文件保存到:"+fpath,"保存成功",JOptionPane.INFORMATION_MESSAGE);
  }
 }

 public static JFileChooser getFile() {
  //默认打开D盘
  JFileChooser file = new MyChooser("D:/");
  // 下面这句是去掉显示所有文件这个过滤器。
  file.setAcceptAllFileFilterUsed(false);
  // 添加excel文件的过滤器
  file.addChoosableFileFilter(new ExcelFileFilter("xls"));
  int result = file.showSaveDialog(null);

  // JFileChooser.APPROVE_OPTION是个整型常量,代表0。就是说当返回0的值我们才执行相关操作,否则什么也不做。
  if (result == JFileChooser.APPROVE_OPTION) {

   // 获得你选择的文件绝对路径。并输出。当然,我们获得这个路径后还可以做很多的事。
   String path = file.getSelectedFile().getAbsolutePath();
   System.out.println(path);
  } else {
   file = null;
   System.out.println("你已取消并关闭了窗口!");

  }
  return file;
 }
 //文件过滤器 只保存xls文件
 private static class ExcelFileFilter extends FileFilter {
  String ext;

  ExcelFileFilter(String ext) {
   this.ext = ext;
  }

  @Override
  public boolean accept(File f) {
   if (f.isDirectory()) {
    return true;
   }
   String fileName = f.getName();
   int index = fileName.lastIndexOf('.');

   if (index > 0 && index < fileName.length() - 1) {
    String extension = fileName.substring(index + 1).toLowerCase();
    if (extension.equals(ext))
     return true;
   }
   return false;
  }

  @Override
  public String getDescription() {
   if (ext.equals("xls")) {
    return "Microsoft Excel文件(*.xls)";
   }
   return "";
  }

 }

 private static class MyChooser extends JFileChooser {
  /**
   * 
   */
  private static final long serialVersionUID = 1L;

  MyChooser(String path) {
   super(path);
  }

  public void approveSelection() {
   File file = this.getSelectedFile();
   if (file.exists()) {
    int copy = JOptionPane.showConfirmDialog(null, "是否要覆盖当前文件?",
      "保存", JOptionPane.YES_NO_OPTION,
      JOptionPane.QUESTION_MESSAGE);
    if (copy == JOptionPane.YES_OPTION)
     super.approveSelection();
   } else
    super.approveSelection();
  }

 }
}

【上篇】
【下篇】

抱歉!评论已关闭.