最近用Swing做了个小项目,其中有个把表格(JTable实现)里的数据导出到Excel的功能,网上查了一些资料,发现有一个不错,就拿来用了。后来发现里面有些东西用着不方便,就对其进行了修改扩展,在此给大家分享一下。
注:其中用到了jxl.jar这个操作Excel的插件。
package com.xcu.util;
import java.io.File;
import java.io.FileNotFoundException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.Colour;
import jxl.format.UnderlineStyle;
import jxl.format.VerticalAlignment;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
/**
*
* 把JTable中的数据导出到Excel表格中工具类
*
* @author Administrator
*
*/
public class JTableToExcel {
/**外部调用的方法
* @param file
* @param heading
* @param inscribe
* @param table
*/
public static void export(File file, String heading, String inscribe, JTable table) {
try {
WritableWorkbook workbook = null;// 创建工作薄
if (file.exists()) {// 文件已经存在
workbook = Workbook.createWorkbook(file, Workbook.getWorkbook(file));
} else { // 文件还不存在
workbook = Workbook.createWorkbook(file);
}
// 创建工作表
WritableSheet sheet = workbook.createSheet(heading, workbook.getNumberOfSheets());
// 取得Table的行数(rowNum), 列数(colNum)
int rowNum = table.getRowCount();
int colNum = table.getColumnCount();
// 填写主标题
fillHeading(sheet, heading, colNum);
// 填写列名
fillColumnName(sheet, table, colNum);
// 填写落款
fillInscribe(sheet, inscribe, rowNum, colNum);
// 填写数据
fillCell(sheet, table, rowNum, colNum);
// 写入工作表
workbook.write();
workbook.close();
// 导出成功提示框
int dialog = JOptionPane.showConfirmDialog(null, "统计表导出成功!是否现在打开?", "提示", JOptionPane.YES_NO_OPTION);
if (dialog == JOptionPane.YES_OPTION) {
Runtime.getRuntime().exec("cmd /c start \"\" \"" + file + "\"");
}
} catch (FileNotFoundException e) {
JOptionPane.showMessageDialog(null, "导入数据前请关闭工作表");
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "没有进行筛选");
}
}
/**
* 填写主标题
* @param sheet
* @param heading
* @param colNum
* @throws WriteException
*/
private static void fillHeading(WritableSheet sheet, String heading, int colNum) throws WriteException {
WritableFont font = new WritableFont(WritableFont.ARIAL, 14, WritableFont.BOLD,
false, UnderlineStyle.NO_UNDERLINE, Colour.RED);// 定义字体
WritableCellFormat format = new WritableCellFormat(font);// 创建格式化对象
format.setAlignment(Alignment.CENTRE);// 水平居中显示
format.setVerticalAlignment(VerticalAlignment.CENTRE);// 垂直居中显示
sheet.mergeCells(0, 0, colNum - 1, 0); // 合并单元格
sheet.setRowView(0, 600); // 设置行高
sheet.addCell(new Label(0, 0, heading, format));// 填写工作表
}
/**
* 填写列名
* @param sheet
* @param table
* @param colNum
* @throws WriteException
*/
private static void fillColumnName(WritableSheet sheet, JTable table, int colNum) throws WriteException {
WritableFont font = new WritableFont(WritableFont.ARIAL, 10, WritableFont.BOLD,
false, UnderlineStyle.NO_UNDERLINE, Colour.BLACK);// 定义字体
WritableCellFormat format = new WritableCellFormat(font);// 定义格式化对象
format.setAlignment(Alignment.CENTRE);// 水平居中显示
sheet.setColumnView(0, 15);// 设置列宽
for (int col = 0; col < colNum; col++) {
Label colName = new Label(col, 1, table.getModel().getColumnName(col), format);
sheet.addCell(colName);
}
}
/**
* 填写落款
* @param sheet
* @param inscribe
* @param colNum
* @param rowNum
* @throws WriteException
*/
private static void fillInscribe(WritableSheet sheet, String inscribe, int rowNum, int colNum) throws WriteException {
if( inscribe == null || inscribe.length() < 1 ) {
inscribe = "导出时间: "+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
}
WritableFont font = new WritableFont(WritableFont.ARIAL, 9, WritableFont.NO_BOLD,
false, UnderlineStyle.NO_UNDERLINE, Colour.BLACK);// 定义字体
WritableCellFormat format = new WritableCellFormat(font);// 定义格式化对象
format.setAlignment(Alignment.RIGHT);// 水平居中显示
sheet.mergeCells(0, rowNum+3, colNum - 1, rowNum+3);// 合并单元格
sheet.addCell(new Label(0, rowNum+3, inscribe, format));// 填写工作表
}
/**
* 填写数据
* @param sheet
* @param talbe
* @param rowNum
* @param colNum
* @throws WriteException
*/
private static void fillCell(WritableSheet sheet, JTable table, int rowNum, int colNum ) throws WriteException {
WritableFont font = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD,
false, UnderlineStyle.NO_UNDERLINE, Colour.BLACK);// 定义字体
WritableCellFormat format = new WritableCellFormat(font);// 定义格式化对象
format.setAlignment(Alignment.CENTRE); // 水平居中显示
for (int i = 0; i < colNum; i++) { // 列
for (int j = 1; j <= rowNum; j++) {// 行
String str = table.getValueAt(j - 1, i).toString();
Label labelN = new Label(i, j+1, str);
try {
sheet.addCell(labelN);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
附件中是:jxl.jar
分享到:
相关推荐
将JTable中的内容导出到Excel保存,支持更改保存的EXcel名字
这是本人制作的JTable数据导出到Excel.rar,共大家使用,有意见或建议多多指出!
Java SE程序 把Jtable中的数据导出到Excel中Java SE程序 把Jtable中的数据导出到Excel中Java SE程序 把Jtable中的数据导出到Excel中Java SE程序 把Jtable中的数据导出到Excel中Java SE程序 把Jtable中的数据导出到...
如果业务应用程序可以将数据导入 Microsoft Excel 和从 Microsoft Excel 中导出数据,则会为用户带来方便,使用户可以使用无处不在的该电子表格程序的强大功能。此 Java 技巧将帮助您理解系统剪贴板,并使您的 ...
java swing 导出Jtable里面的数据到excel,不用拷贝代码,直接粘贴代码
将JTable中的数据导出到Excel文件。
当你的数据超过20万条,10万条时,从jtable中导出到excel就会报错。规定当超出多少行时另起一个sheet然后接着原来的序号。
使用这个驱动包可以将JTable中的数据导出到excel中 ,里面附带使用方法(例子)。
很好,第一次做项目就用到了,很基础不过很有用的代码.对以后很有帮助
读取Excel文件的数据到JTable中。在JTable中显示这些数据。
该函数实现了将JTable中的数据导出到Excel中。
将Excel内容按照行列复制到JTable中,JTable的行列的增删
JTable数据模型设置与数据库综合应用,该文档使用的是sql server 2000 作为数据库服务器来实现的,简单说明了Jtable 数据模型的使用方法,以及数据库操作的基本写法。
将JTable表的内容输出到Excel.txt
JTable动态刷新数据JTable动态刷新数据JTable动态刷新数据JTable动态刷新数据
Excel导入JTable JTable导出Excel JTable删除行 JTable显示实体数据 JTable的Vector添加实体,支持直接增加实体至JTable中,删除行时允许多种可能性(单选 连续多选 任意多选)。
本人 网上找的,修改后,很好用,跟大家分享一下
JTable实现下拉动态加载数据,滑动动态加载数据,纯原生态java。
实现Jtable与Excel间复制黏贴,内含实例,方便大家参考学习
java取出mysql中数据,显示在jtable里面