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