最近用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
分享到:
相关推荐
在Java编程环境中,`JTable`是Swing库中用于展示二维表格数据的组件,而将`JTable`中的数据导出到Excel是一种常见的需求,特别是在数据处理和报告生成的场景下。本教程将深入讲解如何实现这个功能,并提供一个名为`...
7. **示例代码**:示例代码可能会展示如何创建一个简单的JTable,填充一些数据,然后使用jxl库将这些数据导出到Excel文件。 除了基本操作,jxl库还支持更复杂的功能,如样式设置(字体、颜色、对齐方式等)、公式...
根据提供的文件信息,我们可以总结出以下关键知识点,主要聚焦于如何使用Java编程语言结合Apache POI库实现将JTable中的内容导出至Excel文件的功能。 ### 关键知识点 #### 1. JTable简介 - **定义**:`JTable`是...
总的来说,通过Java和Apache POI库,我们可以方便地将数据导出为Excel文件,无论是简单的二维数组还是复杂的数据结构,都能有效地转换和呈现。这为数据交换、报告生成和分析提供了极大的便利。在实际应用中,根据...
`JTable`还支持打印和导出功能,可以将表格数据输出到打印机或保存为CSV、Excel等格式。 这个"JTableSample"源码很可能会展示以上的一些特性,通过学习和理解这个示例,开发者可以更好地掌握在Java Swing应用中使用...
导入功能允许用户上传Excel文件批量导入学生数据,导出则将系统中的学生数据导出为Excel格式,方便备份和共享。 3. **事件处理**: - Java Swing中的事件处理主要通过事件监听器(EventListener)实现。每个按钮、...
3. **账单生成**:系统需能够生成详细的账单,包括用户的消费详情、费用总额等,并支持导出为PDF或Excel格式。 4. **账户管理**:提供用户注册、登录、信息修改等功能,并对账户余额、欠费情况进行跟踪。 5. **...
开发者通常会结合模型-视图-控制器(MVC)设计模式,使数据与界面分离,提高代码的可维护性。 “统计图”功能通常需要利用图形库,例如JFreeChart或JFXGraph,这些库能够生成各种类型的图表,如柱状图、饼图、线图等...
5. **报表生成**:将成绩数据导出为Excel或PDF格式,方便打印和分享。这需要用到第三方库,如Apache POI处理Excel,iText或Apache FOP处理PDF。 6. **权限控制**:根据用户角色(如教师、管理员)设定不同操作权限...
同时,提供数据导出功能,便于备份和与其他系统交换数据。 7. **提醒与通知**:根据预设规则,如保修期提醒、定期盘点等,系统自动发送通知,确保资产维护及时。 在这个项目中,`必读.txt`可能是包含了关于系统...
6. **报表和导出**:为了方便数据分析和备份,系统可能提供了报表生成功能,将学生数据以PDF或Excel等形式导出。 7. **权限控制**:根据角色(如管理员、教师、学生)分配不同的操作权限,确保数据的安全性和隐私...
这些报告可以导出为PDF、Excel或其他格式,便于打印和分享。 6. **权限管理**:为了保护数据安全,系统应有角色和权限的概念,如管理员、教师和家长,不同角色有不同的访问权限。例如,管理员可以访问所有信息,而...
7. **导入导出**:支持将数据导入到数据库或从数据库导出到文件,如CSV、Excel格式。 8. **权限管理**:在支持的角色和权限系统的数据库中,允许用户管理用户的访问权限。 构建这样的GUI工具,开发者通常会用到...
9. **安全性**:考虑到成绩的敏感性,系统需要有适当的安全措施,如用户权限管理、数据加密等,以防止未经授权的访问和修改。 10. **测试与调试**:在开发过程中,单元测试、集成测试和系统测试是必不可少的,以...
19. 数据库对象导出:在Access中,可以将数据库对象导出到另一数据库、数据表和Excel,但不能直接导出到数据表。 20. 改变窗体标题:若要修改窗体的标题,需设置Caption属性。 21. 设置窗体标题:在VB中,要在Form...
6. **数据导入导出**:支持从Excel或其他格式导入和导出科研成果数据,方便数据迁移和备份。 7. **通知公告**:发布科研政策、会议通知等信息,确保用户及时获取最新资讯。 8. **搜索功能**:通过关键词、作者等...
4. 报表与统计:利用JasperReports或iText等库生成学生信息报表,包括统计分析如各年级人数、男女比例等,这些报表可导出为PDF或Excel格式。 5. 登录与权限管理:系统可能包含登录界面,使用JPasswordField处理密码...
5. **报表生成模块**:生成工资条或工资报表,可导出为Excel或其他格式,便于打印和存档。这可能需要Apache POI库来处理Office文档。 6. **图形界面设计**:使用Swing的布局管理器(如FlowLayout、GridLayout、...
7. **文件输入输出**:系统可能支持导入导出Excel文件,这就涉及到Java的文件I/O操作,如FileInputStream和FileOutputStream。 8. **异常处理**:良好的异常处理机制可以提高系统的健壮性,确保在遇到错误时能够给...
5. **报表生成与导出**:根据需要生成各类报表,如学生名单、成绩排名、出勤统计等,支持Excel或PDF格式导出。这里可能用到Apache POI或iText等第三方库。 三、数据库设计 数据库是系统的核心,用于持久化存储数据...