使用poi导出Excel

很多时候,一个软件应用程序需要生成Microsoft Excel文件格式的报告。有时,一个应用程序甚至希望将Excel文件作为输入数据。

常见的java Excel  API

Java Aspose Cells
Java Aspose Cells 是一种纯粹的Java授权的Excel API,开发和供应商Aspose发布。这个API的最新版本是8.1.2,发布于2014年7月,是一个丰富而厚重的API(普通Java类和AWT类的组合)设计,可以读、写和操纵电子表格Excel的组件。此API常见用途如下:
Excel报表,建立动态Excel报表
高保真的Excel渲染和打印
从Excel电子表格中导入和导出数据
生成,编辑,转换和电子表格


JXL
JXL是一款专为Selenium第三方框架,支持基于Web浏览器(数据是Web浏览器自动更新)数据驱动的自动化。然而,它也被用来作为JExcel API的一个共同的支持库,因为它的基本功能是可创建,读取和写入电子表格。基本特征如下:
生成Excel文件
从工作簿和电子表格导入数据
获得行和列的总数
注意:JXL只支持xls档案格式,并且不能处理大数据量。


JExcel
JExcel是由Team Dev开发提供纯行货API。利用这一点程序员可以很容易地读取,写入,显示和修改Excel工作簿中的两种格式:.xls和.XLSX。这个API可以很容易地嵌入Java的Swing和AWT。这个API的最新版本是Jexcel-2.6.12,发布于2009年,主要特点如下。
自动化Excel应用程序,工作簿,工作表等
在Java Swing应用程序作为普通的Swing组件嵌入到工作簿
事件侦听器添加到工作簿和电子表格
添加事件处理程序来处理的工作簿和电子表格事件的行为
添加本地对等开发定制功能


Apache POI
Apache POI是Apache软件基金会提供的100%开源库。大多数中小规模的应用程序开发主要依赖于Apache POI(HSSF+ XSSF)。它支持Excel 库的所有基本功能; 然而,呈现和文本提取是它的主要特点。


现在常用的解析excel的API主要有jxl和poi,本文主要研究关于poi的相关知识。

POI简介

Apache POI是一种流行的API,它允许程序员使用Java程序创建,修改和显示MS Office文件。这由Apache软件基金会开发使用Java分布式设计或修改Microsoft Office文件的开源库。它包含类和方法对用户输入数据或文件到MS Office文档进行解码。


Apache POI组件
Apache POI包含类和方法,来将MS Office所有OLE 2文档复合。此API组件的列表如下。


POIFS (较差混淆技术实现文件系统) : 此组件是所有其他POI元件的基本因素。它被用来明确地读取不同的文件。


HSSF (电子表格格式) : 它被用来读取和写入MS-Excel文件的xls格式。


XSSF (XML格式) : 它是用于MS-Excel中XLSX文件格式。


HPSF (属性设置格式) : 它用来提取MS-Office文件属性设置。


HWPF (字处理器格式) : 它是用来读取和写入MS-Word的文档扩展名的文件。


XWPF (XML字处理器格式) : 它是用来读取和写入MS-Word的docx扩展名的文件。


HSLF (幻灯片版式格式) : 它是用于读取,创建和编辑PowerPoint演示文稿。


HDGF (图表格式) : 它包含类和方法为MS-Visio的二进制文件。


HPBF (出版商格式) : 它被用来读取和写入MS-Publisher文件。

HSSF概况

            HSSF 是Horrible SpreadSheet Format的缩写,通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。
POI EXCEL文档结构类
            HSSFWorkbook excel文档对象
            HSSFSheet excel的sheet HSSFRow excel的行
            HSSFCell excel的单元格 HSSFFont excel字体
            HSSFName 名称 HSSFDataFormat 日期格式
            HSSFHeader sheet头
            HSSFFooter sheet尾
            HSSFCellStyle cell样式
            HSSFDateUtil 日期
            HSSFPrintSetup 打印
            HSSFErrorConstants 错误信息表

知识体系


 EXCEL常用操作方法

  1、 得到Excel常用对象           

POIFSFileSystem fs=newPOIFSFileSystem(new FileInputStream("d:/test.xls"));   
//得到Excel工作簿对象    
HSSFWorkbook wb = new HSSFWorkbook(fs);  
//得到Excel工作表对象    
HSSFSheet sheet = wb.getSheetAt(0);   
//得到Excel工作表的行    
HSSFRow row = sheet.getRow(i);  
//得到Excel工作表指定行的单元格    
HSSFCell cell = row.getCell((short) j);  
cellStyle = cell.getCellStyle();//得到单元格样式  


 2、建立Excel常用对象

HSSFWorkbook wb = new HSSFWorkbook();//创建Excel工作簿对象   
HSSFSheet sheet = wb.createSheet("new sheet");//创建Excel工作表对象     
HSSFRow row = sheet.createRow((short)0); //创建Excel工作表的行   
cellStyle = wb.createCellStyle();//创建单元格样式   
row.createCell((short)0).setCellStyle(cellStyle); //创建Excel工作表指定行的单元格   
row.createCell((short)0).setCellValue(1); //设置Excel工作表的值  

3、设置列宽、行高
 
[
sheet.setColumnWidth((short)column,(short)width);      
row.setHeight((short)height); 

4、保存Excel文件
 

FileOutputStream fileOut = new FileOutputStream(path);   
wb.write(fileOut); 


5、常用单元格边框格式
 

HSSFCellStyle style = wb.createCellStyle();      
style.setBorderBottom(HSSFCellStyle.BORDER_DOTTED);//下边框        
style.setBorderLeft(HSSFCellStyle.BORDER_DOTTED);//左边框        
style.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框        
style.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框


6.设置不显示excel网格线 
  sheet.setDisplayGridlines(false);其中sheet是Sheet对象 
7.设置excel单元格中的内容换行 
  cellStyle.setWrapText(true);其中cellStyle是WorkBook创建的CellStyle对象,然后将cellStyle设置到要换行的Cell对象,最后在要换行的对象(一般为字符串)加入"/r/n"。如 
topTile.append("/r/n" +"cellContent"); 


8.单元格的合并 
  sheet.addMergedRegion(new CellRangeAddress(0, 4, 0, 2));本示例为合并4行2列 


示例代码

使用poi需要导入poi相关的jar,本例使用的是poi-3.10-FINAL-20140208.jar,现在最新版本为poi-3.15.jar

package com.company.test;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

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.util.CellRangeAddress;

public class MergedCells
{
  public static void main(String[] args)
    throws IOException
  {
	//创建工作簿
    HSSFWorkbook wb = new HSSFWorkbook();
    //创建工作表
    HSSFSheet sheet = wb.createSheet("new sheet");
    for(int i=0;i<3;i++){
    	//设置列宽
    	sheet.setColumnWidth(i, 3000);
    }
    //创建行 
    HSSFRow row = sheet.createRow(0);
    row.setHeightInPoints(30);//设置行高
    //创建单元格
    HSSFCell cell = row.createCell(0);
    cell.setCellValue("用户信息表");
    //标题样式
    // 创建单元格样式
    HSSFCellStyle cellStyle = wb.createCellStyle();
    // 设置单元格的背景颜色为淡蓝色
    cellStyle.setFillForegroundColor(HSSFColor.PALE_BLUE.index);
    cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
    // 设置单元格居中对齐
    cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
    // 设置单元格垂直居中对齐
    cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
    // 创建单元格内容显示不下时自动换行
    cellStyle.setWrapText(true);
    // 设置单元格字体样式
    HSSFFont font = wb.createFont();
    // 设置字体加粗
    font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
    font.setFontName("宋体");
    font.setFontHeight((short) 200);
    cellStyle.setFont(font);
    // 设置单元格边框为细线条
    cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
    cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
    cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
    cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
    //设置单元格样式
    cell.setCellStyle(cellStyle);
    //合并单元格
    sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 2));
    
    HSSFRow row1 = sheet.createRow(1);
    //标题信息
  	String[] titles = {"ID","用户名","密码"};
  	for(int i=0;i<3;i++){
  		HSSFCell cell1 = row1.createCell(i);
  		cell1.setCellValue(titles[i]);
  		//设置单元格样式
  	    cell1.setCellStyle(cellStyle);
  	}

  	//模拟数据,实际情况下String[]多为实体bean
  	List<String[]> list = new ArrayList<String[]>();
  	list.add(new String[]{"1","zhangsan","111"});
  	list.add(new String[]{"2","lisi","222"});
  	list.add(new String[]{"3","wangwu","333"});

  	///内容样式
  	// 创建单元格样式
  	HSSFCellStyle cellStyle2 = wb.createCellStyle();
    // 设置单元格居中对齐
    cellStyle2.setAlignment(HSSFCellStyle.ALIGN_CENTER);
    // 设置单元格垂直居中对齐
    cellStyle2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
    // 创建单元格内容显示不下时自动换行
    cellStyle2.setWrapText(true);
    // 设置单元格字体样式
    HSSFFont font2 = wb.createFont();
    // 设置字体加粗
    font2.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
    font2.setFontName("宋体");
    font2.setFontHeight((short) 200);
    cellStyle2.setFont(font2);
    // 设置单元格边框为细线条
    cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
    cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
    cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
    cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
  	//循环赋值
  	for(int i=0;i<list.size();i++){
  		HSSFRow row2 = sheet.createRow(i+2);
  		for(int j=0;j<3;j++){
  			HSSFCell cell1 = row2.createCell(j);
  	  		cell1.setCellValue(list.get(i)[j]);
  	  		//设置单元格样式
  	  	    cell1.setCellStyle(cellStyle2);
  		}
  	}
    File file = new File("D://a.xls");
	if(!file.exists()){
		file.createNewFile();
	}
    FileOutputStream fileOut = new FileOutputStream(file);
    wb.write(fileOut);
    fileOut.close();
  }
}

运行结果


本文简单介绍了poi的相关知识,并主要研究了使用poi导出excel的相关知识,关于使用poi读取excel以及使用poi操作其他office文件,比如doc的相关知识,留待以后研究。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring Boot使用POI导出Excel可以分为以下几个步骤: 1. 添加POI依赖 在pom.xml文件中添加以下依赖: ``` <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> </dependency> ``` 2. 创建Excel文件 使用POI创建Excel文件,可以参考以下代码: ``` Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("Sheet1"); Row row = sheet.createRow(); Cell cell = row.createCell(); cell.setCellValue("Hello World"); ``` 3. 导出Excel文件 使用Java IO流将Excel文件导出,可以参考以下代码: ``` response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-Disposition", "attachment;filename=test.xlsx"); workbook.write(response.getOutputStream()); ``` 其中,response是HttpServletResponse对象,用于设置响应头信息。 完整的代码示例可以参考以下链接: https://www.cnblogs.com/zhengbin/p/11210297.html ### 回答2: Springboot是一个非常流行的框架,它提供了很多便利的功能来帮助开发人员快速开发应用程序。其中一个功能是使用POI库来导出Excel文件。POI是一个Java库,提供了读写Microsoft Office格式文件的功能,包括Excel和Word。在本文中,我们将学习如何使用Springboot和POI库来导出Excel文件。 首先,我们需要在pom.xml文件中添加POI和其他必要的依赖项。以下是一个简单的pom.xml文件中的依赖项列表: ``` <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>5.0.0</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.0.0</version> </dependency> </dependencies> ``` 接下来,我们需要创建一个Controller类来处理Excel文件的导出请求。以下是一个示例Controller类: ``` @RestController public class ExcelController { @GetMapping("/export-excel") public void exportExcel(HttpServletResponse response) throws IOException { response.setContentType("application/vnd.ms-excel"); response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"example.xlsx\""); Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("Example Sheet"); Row header = sheet.createRow(0); header.createCell(0).setCellValue("Column 1"); header.createCell(1).setCellValue("Column 2"); Row data = sheet.createRow(1); data.createCell(0).setCellValue("Data 1"); data.createCell(1).setCellValue("Data 2"); workbook.write(response.getOutputStream()); } } ``` 上面的代码中,我们创建了一个GET请求处理程序来导出Excel文件。首先,我们设置响应内容类型为“application/vnd.ms-excel”,该类型用于Excel文件。然后,我们设置响应头,指定文件的名称和类型,以便浏览器可以显示一个下载对话框。 接下来,我们创建一个Workbook对象和一个Sheet对象。在示例中,我们使用XSSFWorkbook和Sheet.createSheet方法创建一个名为“Example Sheet”的工作表。然后,我们创建一个标题行并设置两个列:“Column 1”和“Column 2”文件。接下来,我们创建一个数据行,并使用setCellValue方法在两个单元格中设置值,“Data 1”和“Data 2”。最后,我们将Workbook对象写入response的输出流,从而将Excel文件发送给用户。 总的来说,使用Springboot和POI导出Excel文件非常简单。我们只需要创建一个Controller类来处理请求和Workbook对象并将其写入响应输出流即可。此外,我们可以更改工作表的样式和内容,以便输出所需的格式。 ### 回答3: SpringBoot作为一款非常流行的Java Web框架,提供了非常多的便捷工具和模块,其中就包括了POI库,让我们可以非常方便地进行Excel文件的导入和导出。下面我将介绍如何使用SpringBoot和POI库进行Excel文件的导出。 首先,在pom.xml文件中,我们需要导入POI库的依赖,如下所示: ``` <!-- poi 依赖 --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> <!-- poi-ooxml 依赖 --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> </dependency> ``` 这样我们就可以使用POI库提供的工具类进行Excel文件的读写操作了。 接下来,我们需要编写一个Controller来处理Excel文件的导出请求。在Controller中,我们需要使用POI库创建一个Workbook对象,然后在Workbook中添加数据,最后通过Response将Excel文件输出给客户端。下面是一个示例代码。 ``` @RestController public class ExcelController { @GetMapping("/export") public void exportExcel(HttpServletResponse response) { try { // 创建工作簿 Workbook workbook = new XSSFWorkbook(); // 创建表格 Sheet sheet = workbook.createSheet("测试表"); // 添加表头 Row header = sheet.createRow(0); header.createCell(0).setCellValue("姓名"); header.createCell(1).setCellValue("年龄"); // 添加数据 Row row = sheet.createRow(1); row.createCell(0).setCellValue("张三"); row.createCell(1).setCellValue(20); // 输出Excel文件 response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-Disposition", "attachment;filename=test.xlsx"); workbook.write(response.getOutputStream()); workbook.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` 在上述代码中,我们创建了一个名为"测试表"的表格,在表格中添加了表头和数据。最后,我们将Excel文件输出给客户端,通过设置response的ContentType和Content-Disposition实现自动下载。 总之,SpringBoot和POI库提供了非常便捷的Excel文件导出功能,我们可以在Controller中轻松地创建Workbook对象、添加数据并输出给客户端。这样就可以很方便地实现数据报表的导出功能了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值