使用jxl和poj处理Excel表格

这东西有什么用呢,作为一枚程序员,Excel对于我来说是没什么用的,但是想想,如果公司人力的妹纸每个月底都要一个一个的去核对一个同事有没有迟到,那是有多蛋疼的事,所以,将打卡的数据导入到Excel,然后遍历一下,什么麻烦事都没有了。然后人力妹纸就不用每次月底蛋疼地核对数据,哈哈,程序员太伟大了,而且事后还能被对方请吃饭,这也是当初论坛里为什么有一个人为公司写了一个方便大家的东西而满满的幸福感。

Java将数据处理导出到Excel的有方法有使用jxl和poi。本来靠着一手资料写了半篇博客,误入了一家也是java excel的英文网站,看了半天最后竟然差个中间件跑不了。

后面发现网上讲的jxl是韩国人写的,老外的一款产品叫JExcel。

jxl的jar和api下载:jexcelapi_2_6_12。

为什么要导出到Excel,因为数据不止是给自己看,还要给别人看,文员的话肯定喜欢Excel的形式。

要有个标题,有列名,还有数据。

Excel其实就是SpreadSheets,数据电子表格。一个表格也就是一个Workbook(工作簿)。

一个工作簿里面一般最多是255个sheet(表),单元格叫Cell。知道这几个英文代表了什么,再查查API,基本就可以上手了。

1、使用JXL。

接下来,简单封装标题名,列名称(字符数组),列数据(list)传进。

简单的User类:

public class User {
	private int id;
	private String name;
	private int age;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}

类型为User的list的获取,自己为测试写的一个类:

public class UserList {
	public List<User> getUserList(){
		List<User> list = new ArrayList<User>();
		User u = null;
		for (int i = 0; i < 100; i++) {
			u = new User();
			u.setAge(i);
			u.setId(i);
			u.setName("id"+i);
			list.add(u);
		}
		return list;
	}
}

有封转方法的类1.0版,这个比较粗糙:

public class MyExcel {
	public void exportExcel(String sheetname,String rowname[],String title,List list){
		File file = new File("e:\\export.xls");
		int length = rowname.length;
		WritableSheet sheet = null;
		try {
			WritableWorkbook book = Workbook.createWorkbook(file);
			sheet = book.createSheet(sheetname, 1);
                        //合并单元格
                        sheet.mergeCells(0, 0, length-1, 0);

			//使标题居中 拿到表格列宽 减去标题长度
			int all = sheet.getColumnView(0).getSize()*length;
			int space = (all-title.length())/2;
			String addSpace = "";
			for (int i = 0; i < space; i++) {
				addSpace +=" ";
			}

			Label l = new Label(0,0,addSpace+title);
			sheet.addCell(l);

                        //列名添加
			for (int i = 0; i < rowname.length; i++) {
				Label temp = new Label(i,1,rowname[i]);
				sheet.addCell(temp);
			}
			//列数据添加
			for (int i = 2; i < list.size()+2; i++) {
				User u = (User)list.get(i-2);
				String id = String.valueOf(u.getId());
				String name = u.getName();
				String age = String.valueOf(u.getAge());
				int j = 0;
				Label temp = new Label(j,i,id);
				Label temp2 = new Label(++j,i,name);
				Label temp3 = new Label(++j,i,age);
				sheet.addCell(temp);
				sheet.addCell(temp2);
				sheet.addCell(temp3);
			}
			book.write();
			book.close();
		} catch (IOException e) {
			e.printStackTrace();
		}catch (WriteException e) {
			e.printStackTrace();
		}

		try {
			Workbook in = Workbook.getWorkbook(file);
			Sheet s = in.getSheet(0);

			//获取api版本号
			//System.out.println(in.getVersion());
			//文件分隔符
			//System.out.println(File.separator);
		} catch (BiffException | IOException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		String rowname[] = {"ID","年龄","性别"};
		MyExcel excel = new MyExcel();
		excel.exportExcel("myexcel",rowname,"后台数据 ",new UserList().getUserList());
	}
}

2、使用POI

POI是apache的一个项目,之前在StackOverFlow看到的是,jxl是不支持excel2007以及之后的版本的,不知道升级之后有没有改进,POI强大之处是不止Excel本身,还能处理MicroSoft的其他文档格式。

搞懂这些英文的缩写也比较容易:

POIFS - a pure Java implementation of the OLE 2 Compound Document format

HPSF - Java API to Handle Microsoft Format Document Properties

XSSF - Java API To Access Microsoft Excel Format Files

HSSF - the POI Project‘s pure Java implementation of the Excel ‘97(-2007) file format

HWPF- our port of the Microsoft Word 97 (-2003) file format to pure Java.

XWPF - for the WordprocessingML (2007+) format from the OOXML specification.

POI的文字提取:

String inputFile = "e://poj.doc";
		FileInputStream fis = new FileInputStream(inputFile);
		POIFSFileSystem fileSystem = new POIFSFileSystem(fis);
		POIOLE2TextExtractor oleTextExtractor = ExtractorFactory.createExtractor(fileSystem);
		System.out.println(oleTextExtractor.getText());

常用的方法:

public class MyExcel {
	public static void main(String[] args) {
		// .xlsx格式的使用 XSSFWorkbook
		Workbook book = new HSSFWorkbook();
		try {
			//使用file和inputstream的区别
			//file类减少内存的消耗  而inputstream需要更多的内存因为需要缓存整个文件

			FileOutputStream out = new FileOutputStream("e:\\hssf.xls");

			//表名的设定 不像jxl 可以指定顺序  最开始的一个置于最前面
			Sheet sheet = book.createSheet("a");
			Sheet sheet2 = book.createSheet("b");
			Sheet sheet3 = book.createSheet("c");

			//选中表单
			sheet3.setSelected(true);

			//选中一个表插入一行  0为第一行
			Row row = sheet.createRow(0);
			//单元格插入,也不像jxl一样直接可以以二维数组这样的位置定位
			Cell cell = row.createCell(0);
			Cell cell2 = row.createCell(1);

			//合并单元格   指从0到第五行 从0到第二列
			sheet.addMergedRegion(new CellRangeAddress(0,5,0,2));

			//这种合并利用了另外一种坐标合并
			CellRangeAddress region = CellRangeAddress.valueOf("A1:E10");
			sheet.addMergedRegion(region);

			cell.setCellValue("cell1");
			cell2.setCellValue(123.123);

			Row row2 = sheet.createRow(3);
			Cell cell3 = row2.createCell(6);
			cell3.setCellValue("cell3");

			//将0行到第四行的数据向下移动10行
			sheet.shiftRows(0, 4, 10);

			book.write(out);
			out.close();

			//相对的  遍历却方便了
			HSSFWorkbook read= new HSSFWorkbook(new FileInputStream("e:\\hssf.xls"));
			Sheet first = read.getSheetAt(0);
			for(Row temp: first){
				for(Cell c:temp){
					System.out.println(c.getRowIndex());
					System.out.println(c.getColumnIndex());
				}
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

除了这些简单的合并创建单元格这些之外,还有控制字体,分拆冻结单元格,图片插入等,不过这些东西需要的时候再去看看官方文档吧,写一些常用的就可以了。

时间: 2024-10-11 20:49:18

使用jxl和poj处理Excel表格的相关文章

java中使用jxl导出Excel表格详细通用步骤

该方法一般接收两个参数,response和要导出的表格内容的list. 一般我们将数据库的数据查询出来在页面进行展示,根据用户需求,可能需要对页面数据进行导出. 此时只要将展示之前查询所得的数据放入session中备份一份,在调用导出方法时,从session中获取即可, 如果为后台直接导出,直接查询数据库后将结果传入即可,当然也可以在导出Excel方法中查询. 查询方法: // 获取查询结果存入session中        Object resultList = request.getAttr

使用java程序jxl操作Excel表格

在实际开发中企业办公系统都会涉及到一个打印报表的功能,也许你的需求就是把web前端展示的员工信息以Excel表格形式打印出来 ,那么具体怎么操作下面我来实现一下 首先我们使用的是 java的jxl技术 我们需要导入jxl的jar包 如图这个jar包可以从网上下载,导入了jar包之后 我们就来认识一下java的一些抽象类以及接口 首先来认识一下WritableWorkbook抽象类 这个类位于jxl包下的 可读写的工作薄类 在认识一个抽象类Workbook抽象类此类工作薄类有个方法ceateWor

使用JXL对Excel表格进行简单的操作

前段时间由于项目的需求,要求使用JXL,做完之后做下记录,方便以后查看! 首先我们要先下载JXL的JAR包:http://download.csdn.net/detail/u013352832/7777047 将JXL.JAR 包导入到项目中即可直接只用! 直接上代码 使用JXL来操作Excel表格,我们应该首先判断一下Excel表格是否存在 1 File file = new File(user.getZkfp()); 2 // 判断zkfp.xls文件是否存在,不存在则创建zkfp.xls文

Android实现导出数据库到Excel表格

之前一直在电脑上用Excel表格记录家庭帐单,不久前重装系统不小心干掉了,伤心了好久,那可是我记了五年的帐单呀!这段时间用的是随手记,好用但是不太符合我的习惯,所以我自己写了一个小小的帐单记录APP,App小到只有一个Activity.当然更多的需求我正在研发中,呵呵!现在已经完成了把每天记录的数据保存到Sqilte数据库中,然后可以导出到excel表格.代码也是借助网上的一些资料写成的,代码也比较容易,只需要用到一个jxl.jar包,感谢网友的帮助. 贴上主要代码,再附上文件包: public

导出到excel表格

<span style="font-size:18px;">/** * @param sql 查询语句 * @param contentTitle excel表格标题名称 * @param filepath 生成excel表格文件的路径 * @param filename excel表格的名称 * @return 生成excel表格文件的路径 */ public String ToExcel(String sql,String contentTitle,String fil

Java生成Excel表格的代码

1. 我们先定义这三个类 DataItem类,表示一个单元格内的数字 package com.tntxia.pem.entity; public class DataItem { private String value; private String dataType; private String cellStyle=""; public String getCellStyle() { return cellStyle; } public void setCellStyle(Str

【游戏开发】Excel表格批量转换成lua的转表工具

一.简介 在上篇博客<[游戏开发]Excel表格批量转换成CSV的小工具> 中,我们介绍了如何将策划提供的Excel表格转换为轻便的CSV文件供开发人员使用.实际在Unity开发中,很多游戏都是使用Lua语言进行开发的.如果要用Lua直接读取CSV文件的话,又要写个对应的CSV解析类,不方便的同时还会影响一些加载速度,牺牲游戏性能.因此我们可以直接将Excel表格转换为lua文件,这样就可以高效.方便地在Lua中使用策划配置的数据了.在本篇博客中,马三将会和大家一起,用C#语言实现一个Exce

java输出mysql到excel表格的简单用法

1>导入包 jxl.jar下载地址:https://pan.baidu.com/s/10ijORF5sNdmZv3SyN8ImaQ密码:ue50 mysql的对应jar:https://pan.baidu.com/s/1ZiB3kPewCdMK_WatNjUtiA密码:7afv 源码: 新建类 public class excelTest { int id; String name; String num; public String getNum() { return num; } publi

C#中导出数据到Excel表格中

之前PM交给我一个自动化测试的Case,让我抓取页面上的数据到Excel表格中,刚好又接了一个之前人家做的系统, 刚好看到可以用NPOI导数据,就动手试试,成功导出. 由于鄙人比较菜,也比较懒, 怕自己忘记了,今天就总结一下,以防下次用可以参考. 1.要使用NPOI,首先需要在Project中Install NPOI的 Package. 右键点击Project------>Manage NuGet Packages---->Search NPOI----->点击搜索到的NPOI然后点击等