`
ypf3027
  • 浏览: 306803 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JTable的数据导出到Excel(网络代码修改)

    博客分类:
  • JAVA
阅读更多

最近用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

 

  • jxl.jar (706.1 KB)
  • 下载次数: 394
分享到:
评论
2 楼 tjg138 2011-06-10  
很好,学习了。多谢。
1 楼 iyjc2004 2011-01-02  
POI更加强悍...

相关推荐

    将JTable数据导出到Excel

    在Java编程环境中,`JTable`是Swing库中用于展示二维表格数据的组件,而将`JTable`中的数据导出到Excel是一种常见的需求,特别是在数据处理和报告生成的场景下。本教程将深入讲解如何实现这个功能,并提供一个名为`...

    jxl驱动包,从JTable中到处数据到excel JAVA

    7. **示例代码**:示例代码可能会展示如何创建一个简单的JTable,填充一些数据,然后使用jxl库将这些数据导出到Excel文件。 除了基本操作,jxl库还支持更复杂的功能,如样式设置(字体、颜色、对齐方式等)、公式...

    将JTable表的内容输出到Excel.txt

    根据提供的文件信息,我们可以总结出以下关键知识点,主要聚焦于如何使用Java编程语言结合Apache POI库实现将JTable中的内容导出至Excel文件的功能。 ### 关键知识点 #### 1. JTable简介 - **定义**:`JTable`是...

    java导出数据为excel文件

    总的来说,通过Java和Apache POI库,我们可以方便地将数据导出为Excel文件,无论是简单的二维数组还是复杂的数据结构,都能有效地转换和呈现。这为数据交换、报告生成和分析提供了极大的便利。在实际应用中,根据...

    JTableSample_java_netbeans_jtable_源码

    `JTable`还支持打印和导出功能,可以将表格数据输出到打印机或保存为CSV、Excel等格式。 这个"JTableSample"源码很可能会展示以上的一些特性,通过学习和理解这个示例,开发者可以更好地掌握在Java Swing应用中使用...

    JavaSwing实现的学生管理系统源码

    导入功能允许用户上传Excel文件批量导入学生数据,导出则将系统中的学生数据导出为Excel格式,方便备份和共享。 3. **事件处理**: - Java Swing中的事件处理主要通过事件监听器(EventListener)实现。每个按钮、...

    网络流量计费系统(转)

    3. **账单生成**:系统需能够生成详细的账单,包括用户的消费详情、费用总额等,并支持导出为PDF或Excel格式。 4. **账户管理**:提供用户注册、登录、信息修改等功能,并对账户余额、欠费情况进行跟踪。 5. **...

    很强大-功能齐全带分页的swing项目

    开发者通常会结合模型-视图-控制器(MVC)设计模式,使数据与界面分离,提高代码的可维护性。 “统计图”功能通常需要利用图形库,例如JFreeChart或JFXGraph,这些库能够生成各种类型的图表,如柱状图、饼图、线图等...

    java 成绩管理 有界面

    5. **报表生成**:将成绩数据导出为Excel或PDF格式,方便打印和分享。这需要用到第三方库,如Apache POI处理Excel,iText或Apache FOP处理PDF。 6. **权限控制**:根据用户角色(如教师、管理员)设定不同操作权限...

    java资产管理系统C/S

    同时,提供数据导出功能,便于备份和与其他系统交换数据。 7. **提醒与通知**:根据预设规则,如保修期提醒、定期盘点等,系统自动发送通知,确保资产维护及时。 在这个项目中,`必读.txt`可能是包含了关于系统...

    java swing 学生管理系统

    6. **报表和导出**:为了方便数据分析和备份,系统可能提供了报表生成功能,将学生数据以PDF或Excel等形式导出。 7. **权限控制**:根据角色(如管理员、教师、学生)分配不同的操作权限,确保数据的安全性和隐私...

    数据库管理工具GUI例子(Java Swing)

    7. **导入导出**:支持将数据导入到数据库或从数据库导出到文件,如CSV、Excel格式。 8. **权限管理**:在支持的角色和权限系统的数据库中,允许用户管理用户的访问权限。 构建这样的GUI工具,开发者通常会用到...

    swing学生管理系统.zip

    这些报告可以导出为PDF、Excel或其他格式,便于打印和分享。 6. **权限管理**:为了保护数据安全,系统应有角色和权限的概念,如管理员、教师和家长,不同角色有不同的访问权限。例如,管理员可以访问所有信息,而...

    javaGUI学生成绩管理系统

    9. **安全性**:考虑到成绩的敏感性,系统需要有适当的安全措施,如用户权限管理、数据加密等,以防止未经授权的访问和修改。 10. **测试与调试**:在开发过程中,单元测试、集成测试和系统测试是必不可少的,以...

    2021-2022计算机二级等级考试试题及答案No.16013.docx

    19. 数据库对象导出:在Access中,可以将数据库对象导出到另一数据库、数据表和Excel,但不能直接导出到数据表。 20. 改变窗体标题:若要修改窗体的标题,需设置Caption属性。 21. 设置窗体标题:在VB中,要在Form...

    基于java高校科研成果管理系统

    6. **数据导入导出**:支持从Excel或其他格式导入和导出科研成果数据,方便数据迁移和备份。 7. **通知公告**:发布科研政策、会议通知等信息,确保用户及时获取最新资讯。 8. **搜索功能**:通过关键词、作者等...

    JAVA-GUI学生管理系统

    4. 报表与统计:利用JasperReports或iText等库生成学生信息报表,包括统计分析如各年级人数、男女比例等,这些报表可导出为PDF或Excel格式。 5. 登录与权限管理:系统可能包含登录界面,使用JPasswordField处理密码...

    员工工资管理系统(文档+视频+源码)_基于java swing管理系统源码 程序 代码 图形界面.rar

    5. **报表生成模块**:生成工资条或工资报表,可导出为Excel或其他格式,便于打印和存档。这可能需要Apache POI库来处理Office文档。 6. **图形界面设计**:使用Swing的布局管理器(如FlowLayout、GridLayout、...

    java学生成绩管理系统

    7. **文件输入输出**:系统可能支持导入导出Excel文件,这就涉及到Java的文件I/O操作,如FileInputStream和FileOutputStream。 8. **异常处理**:良好的异常处理机制可以提高系统的健壮性,确保在遇到错误时能够给...

    学生信息管理系统

    5. **报表生成与导出**:根据需要生成各类报表,如学生名单、成绩排名、出勤统计等,支持Excel或PDF格式导出。这里可能用到Apache POI或iText等第三方库。 三、数据库设计 数据库是系统的核心,用于持久化存储数据...

Global site tag (gtag.js) - Google Analytics