zoukankan      html  css  js  c++  java
  • 利用POI实现Excel的导入导出

    在项目开中,我们经常需要用excel来导入导出数据,而POI技术是实现我们需求的一个选择。

    POI支持office的所有版本


    POI全称 PoorObfuscation Implementation,直译为“可怜的模糊实现”,利用POI接口可以通过JAVA操作Microsoft office 套件工具的读写功能。官网:http://poi.apache.org

    在官网中下载jar包以及源码包.

    Jar包的引入:①对于只操作2003 及以前版本的excel,只需要poi-3.10.1-20140818.jar

                              ②如果需要同时对2007及以后版本进行操作则需要poi-ooxml-3.10.1-20140818.jar,poi-ooxml-schemas-3.10.1-20140818.jar,以及ooxml-lib目录下的 xmlbeans-2.6.0.jar,dom4j-1.6.1.jar。




    以下是一个对应03版本的实例,创建一个helloWorld为命名的工作表,在表中的第三行第三列写上hellowrold,并把excel文件写到本地。以及再从本地中读取这个刚保存的excel,找到第一张表(即helloWorld表,因为刚才只创建了一张),找到第三行第三列,读出它的内容并写在console中

    package poi;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.usermodel.CellType;
    import org.junit.Test;
    
    public class testPOI03 {
    	@Test
    	public void writeExcel03() throws IOException{
    		//创建工作簿
    		HSSFWorkbook workBook = new HSSFWorkbook();
    		//创建工作表  工作表的名字叫helloWorld
    		HSSFSheet sheet = workBook.createSheet("helloWorld");
    		//创建行,第3行
    		HSSFRow row = sheet.createRow(2);
    		//创建单元格,操作第三行第三列
    		HSSFCell cell = row.createCell(2, CellType.STRING);
    		cell.setCellValue("helloWorld");
    		
    		workBook.write(new File("d:\poi\测试.xls"));
    		
    		workBook.close();//最后记得关闭工作簿
    	}
    	
    	@Test
    	public void readExcel03() throws IOException{
    		FileInputStream inputStream = new FileInputStream(new File("d:\poi\测试.xls"));
    		//读取工作簿
    		HSSFWorkbook workBook = new HSSFWorkbook(inputStream);
    		//读取工作表
    		HSSFSheet sheet = workBook.getSheetAt(0);
    		//读取行
    		HSSFRow row = sheet.getRow(2);
    		//读取单元格
    		HSSFCell cell = row.getCell(2);
    		String value = cell.getStringCellValue();
    		
    		System.out.println(value);
    		
    		inputStream.close();
    		workBook.close();//最后记得关闭工作簿
    	}
    }
    


    接来下用07版的方法,同样演示上一个实例,这两个实例区别,就仅仅在于所使用的的类不同,原理都一样

    package poi;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    
    import org.apache.poi.ss.usermodel.CellType;
    import org.apache.poi.xssf.usermodel.XSSFCell;
    import org.apache.poi.xssf.usermodel.XSSFRow;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    import org.junit.Test;
    
    public class testPOI07 {
    	@Test
    	public void writeExcel07() throws IOException{
    		//创建工作簿
    		XSSFWorkbook workBook = new XSSFWorkbook();
    		//创建工作表
    		XSSFSheet sheet = workBook.createSheet("helloWorld");
    		//创建行
    		XSSFRow row = sheet.createRow(2);
    		//创建单元格,操作第三行第三列
    		XSSFCell cell = row.createCell(2, CellType.STRING);
    		cell.setCellValue("helloWorld");
    		
    		FileOutputStream outputStream = new FileOutputStream(new File("d:\poi\测试.xlsx"));
    		workBook.write(outputStream);
    		
    		workBook.close();//记得关闭工作簿
    	}
    	
    	@Test
    	public void readExcel07() throws IOException{
    		FileInputStream inputStream = new FileInputStream(new File("d:\poi\测试.xlsx"));
    		//读取工作簿
    		XSSFWorkbook workBook = new XSSFWorkbook(inputStream);
    		//读取工作表
    		XSSFSheet sheet = workBook.getSheetAt(0);
    		//读取行
    		XSSFRow row = sheet.getRow(2);
    		//读取单元格
    		XSSFCell cell = row.getCell(2);
    		String value = cell.getStringCellValue();
    		
    		System.out.println(value);
    		
    		inputStream.close();//关闭工作簿
    		workBook.close();
    	}
    }
    


    最后来一点进阶的东西,样式。比如平常操作excel中常见的操作,比如合并单元格,水平居中,垂直居中,改变字体大小,加粗,设置单元格背景颜色 等等。

    按照前端的说法也可以叫做样式,都通通可以通过POI实现的。

    在接下来的一个实例之前,先了解一下POI中样式的理解,是一定要记住的,知道了再进行excel的美化简直soeasy!:

    1.合并单元格,属于工作表,独立创建,应用于工作表

    2.样式,属于工作,由工作簿创建,应用于单元格

    3.字体,属于工作,由工作簿创建,应用于样式

    4.设置背景颜色,一定要先设置颜色的填充模式


    以下这个实例是对之前做的再进行深入,运用上面的几个点对它加一些美化工作

    package poi;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFCellStyle;
    import org.apache.poi.hssf.usermodel.HSSFFont;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.hssf.util.HSSFColor;
    import org.apache.poi.ss.usermodel.FillPatternType;
    import org.apache.poi.ss.usermodel.HorizontalAlignment;
    import org.apache.poi.ss.usermodel.VerticalAlignment;
    import org.apache.poi.ss.util.CellRangeAddress;
    import org.junit.Test;
    
    public class testPOIExcelStyle {
    	
    	@Test
    	public void testExcelStyle() throws IOException{
    		//1.创建工作簿
    		HSSFWorkbook workBook = new HSSFWorkbook();
    		
    		//创建合并单元格对象
    		CellRangeAddress rangeAddress = new CellRangeAddress(2, 2, 2, 4);
    		//创建样式
    		HSSFCellStyle style = workBook.createCellStyle();
    		style.setAlignment(HorizontalAlignment.CENTER);
    		style.setVerticalAlignment(VerticalAlignment.CENTER);
    		//创建字体
    		HSSFFont font = workBook.createFont();
    		font.setFontHeightInPoints((short) 16);
    		//font.setFontHeight((short)320); 效果和上面一样。用这个方法设置大小,值要设置为字体大小*20倍,具体看API文档
    		font.setColor(HSSFColor.GREEN.index);
    		font.setBold(true);
    		style.setFont(font);
    		//设置背景
    		style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
    		style.setFillForegroundColor(HSSFColor.RED.index);
    		
    		//2.创建工作表
    		HSSFSheet sheet = workBook.createSheet("helloWorld");
    		//添加合并区域
    		sheet.addMergedRegion(rangeAddress);
    		
    		//3.创建行
    		HSSFRow row = sheet.createRow(2);
    		//4.创建单元格
    		HSSFCell cell = row.createCell(2);
    		cell.setCellValue("helloWorld");
    		cell.setCellStyle(style);
    		
    		//输出
    		FileOutputStream outputStream = new FileOutputStream(new File("d:\poi\测试.xls"));
    		workBook.write(outputStream);
    		
    		workBook.close();
    		outputStream.close();
    	}
    }
    


  • 相关阅读:
    [Vim].vimrc
    [笔试面试][code_by_hand]压缩字符串
    [笔试面试][code_by_hand]输出第二个字符串在第一个字符串中的连接次序
    [笔试面试]串s1="ABCDACDAE" s2="DAE" 找出s1中,包含s2的最小子串,要求该子串含有s2中的所有字符,串内字符无顺序关系
    [笔试面试][code_by_hand]从二元树中找出和为某一值的所有路径
    DEV 皮肤的使用
    Dev GridControl使用小结
    [转载]DEV控件:gridControl常用属性设置
    C#网页 自动登录 提交POST信息 方法
    比较字符串NSString
  • 原文地址:https://www.cnblogs.com/chenny3/p/10226213.html
Copyright © 2011-2022 走看看