POI实现exel的导入导出

在项目开中,我们经常需要用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中

[java]  view plain  copy
  1. package poi;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileInputStream;  
  5. import java.io.IOException;  
  6.   
  7. import org.apache.poi.hssf.usermodel.HSSFCell;  
  8. import org.apache.poi.hssf.usermodel.HSSFRow;  
  9. import org.apache.poi.hssf.usermodel.HSSFSheet;  
  10. import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
  11. import org.apache.poi.ss.usermodel.CellType;  
  12. import org.junit.Test;  
  13.   
  14. public class testPOI03 {  
  15.     @Test  
  16.     public void writeExcel03() throws IOException{  
  17.         //创建工作簿  
  18.         HSSFWorkbook workBook = new HSSFWorkbook();  
  19.         //创建工作表  工作表的名字叫helloWorld  
  20.         HSSFSheet sheet = workBook.createSheet("helloWorld");  
  21.         //创建行,第3行  
  22.         HSSFRow row = sheet.createRow(2);  
  23.         //创建单元格,操作第三行第三列  
  24.         HSSFCell cell = row.createCell(2, CellType.STRING);  
  25.         cell.setCellValue("helloWorld");  
  26.           
  27.         workBook.write(new File("d:\\poi\\测试.xls"));  
  28.           
  29.         workBook.close();//最后记得关闭工作簿  
  30.     }  
  31.       
  32.     @Test  
  33.     public void readExcel03() throws IOException{  
  34.         FileInputStream inputStream = new FileInputStream(new File("d:\\poi\\测试.xls"));  
  35.         //读取工作簿  
  36.         HSSFWorkbook workBook = new HSSFWorkbook(inputStream);  
  37.         //读取工作表  
  38.         HSSFSheet sheet = workBook.getSheetAt(0);  
  39.         //读取行  
  40.         HSSFRow row = sheet.getRow(2);  
  41.         //读取单元格  
  42.         HSSFCell cell = row.getCell(2);  
  43.         String value = cell.getStringCellValue();  
  44.           
  45.         System.out.println(value);  
  46.           
  47.         inputStream.close();  
  48.         workBook.close();//最后记得关闭工作簿  
  49.     }  
  50. }  


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

[java]  view plain  copy
  1. package poi;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileInputStream;  
  5. import java.io.FileOutputStream;  
  6. import java.io.IOException;  
  7.   
  8.   
  9. import org.apache.poi.ss.usermodel.CellType;  
  10. import org.apache.poi.xssf.usermodel.XSSFCell;  
  11. import org.apache.poi.xssf.usermodel.XSSFRow;  
  12. import org.apache.poi.xssf.usermodel.XSSFSheet;  
  13. import org.apache.poi.xssf.usermodel.XSSFWorkbook;  
  14. import org.junit.Test;  
  15.   
  16. public class testPOI07 {  
  17.     @Test  
  18.     public void writeExcel07() throws IOException{  
  19.         //创建工作簿  
  20.         XSSFWorkbook workBook = new XSSFWorkbook();  
  21.         //创建工作表  
  22.         XSSFSheet sheet = workBook.createSheet("helloWorld");  
  23.         //创建行  
  24.         XSSFRow row = sheet.createRow(2);  
  25.         //创建单元格,操作第三行第三列  
  26.         XSSFCell cell = row.createCell(2, CellType.STRING);  
  27.         cell.setCellValue("helloWorld");  
  28.           
  29.         FileOutputStream outputStream = new FileOutputStream(new File("d:\\poi\\测试.xlsx"));  
  30.         workBook.write(outputStream);  
  31.           
  32.         workBook.close();//记得关闭工作簿  
  33.     }  
  34.       
  35.     @Test  
  36.     public void readExcel07() throws IOException{  
  37.         FileInputStream inputStream = new FileInputStream(new File("d:\\poi\\测试.xlsx"));  
  38.         //读取工作簿  
  39.         XSSFWorkbook workBook = new XSSFWorkbook(inputStream);  
  40.         //读取工作表  
  41.         XSSFSheet sheet = workBook.getSheetAt(0);  
  42.         //读取行  
  43.         XSSFRow row = sheet.getRow(2);  
  44.         //读取单元格  
  45.         XSSFCell cell = row.getCell(2);  
  46.         String value = cell.getStringCellValue();  
  47.           
  48.         System.out.println(value);  
  49.           
  50.         inputStream.close();//关闭工作簿  
  51.         workBook.close();  
  52.     }  
  53. }  


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

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

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

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

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

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

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


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

[java]  view plain  copy
  1. package poi;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileOutputStream;  
  5. import java.io.IOException;  
  6.   
  7. import org.apache.poi.hssf.usermodel.HSSFCell;  
  8. import org.apache.poi.hssf.usermodel.HSSFCellStyle;  
  9. import org.apache.poi.hssf.usermodel.HSSFFont;  
  10. import org.apache.poi.hssf.usermodel.HSSFRow;  
  11. import org.apache.poi.hssf.usermodel.HSSFSheet;  
  12. import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
  13. import org.apache.poi.hssf.util.HSSFColor;  
  14. import org.apache.poi.ss.usermodel.FillPatternType;  
  15. import org.apache.poi.ss.usermodel.HorizontalAlignment;  
  16. import org.apache.poi.ss.usermodel.VerticalAlignment;  
  17. import org.apache.poi.ss.util.CellRangeAddress;  
  18. import org.junit.Test;  
  19.   
  20. public class testPOIExcelStyle {  
  21.       
  22.     @Test  
  23.     public void testExcelStyle() throws IOException{  
  24.         //1.创建工作簿  
  25.         HSSFWorkbook workBook = new HSSFWorkbook();  
  26.           
  27.         //创建合并单元格对象  
  28.         CellRangeAddress rangeAddress = new CellRangeAddress(2224);  
  29.         //创建样式  
  30.         HSSFCellStyle style = workBook.createCellStyle();  
  31.         style.setAlignment(HorizontalAlignment.CENTER);  
  32.         style.setVerticalAlignment(VerticalAlignment.CENTER);  
  33.         //创建字体  
  34.         HSSFFont font = workBook.createFont();  
  35.         font.setFontHeightInPoints((short16);  
  36.         //font.setFontHeight((short)320); 效果和上面一样。用这个方法设置大小,值要设置为字体大小*20倍,具体看API文档  
  37.         font.setColor(HSSFColor.GREEN.index);  
  38.         font.setBold(true);  
  39.         style.setFont(font);  
  40.         //设置背景  
  41.         style.setFillPattern(FillPatternType.SOLID_FOREGROUND);  
  42.         style.setFillForegroundColor(HSSFColor.RED.index);  
  43.           
  44.         //2.创建工作表  
  45.         HSSFSheet sheet = workBook.createSheet("helloWorld");  
  46.         //添加合并区域  
  47.         sheet.addMergedRegion(rangeAddress);  
  48.           
  49.         //3.创建行  
  50.         HSSFRow row = sheet.createRow(2);  
  51.         //4.创建单元格  
  52.         HSSFCell cell = row.createCell(2);  
  53.         cell.setCellValue("helloWorld");  
  54.         cell.setCellStyle(style);  
  55.           
  56.         //输出  
  57.         FileOutputStream outputStream = new FileOutputStream(new File("d:\\poi\\测试.xls"));  
  58.         workBook.write(outputStream);  
  59.           
  60.         workBook.close();  
  61.         outputStream.close();  
  62.     }  
  63. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现Excel导入导出,需要用到POI库。下面介绍一下使用SpringBoot集成MyBatis和POI实现Excel导入导出的步骤。 1. 引入依赖 在pom.xml文件中添加以下依赖: ``` <!-- SpringBoot MyBatis 依赖 --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.4</version> </dependency> <!-- POI 依赖 --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.0.1</version> </dependency> ``` 2. 创建实体类 创建一个实体类,用于映射Excel文件中的数据。 ```java public class User { private Integer id; private String name; private String email; private String phone; // 省略 getter 和 setter 方法 } ``` 3. 创建Mapper 创建一个Mapper,用于操作数据库。 ```java @Mapper public interface UserMapper { List<User> findAll(); void insert(User user); void batchInsert(List<User> userList); } ``` 4. 创建Service 创建一个Service,用于导入导出Excel文件。 ```java @Service public class UserService { @Autowired private UserMapper userMapper; public List<User> findAll() { return userMapper.findAll(); } public void insert(User user) { userMapper.insert(user); } public void batchInsert(MultipartFile file) throws IOException { List<User> userList = readExcel(file); userMapper.batchInsert(userList); } public void exportExcel(HttpServletResponse response) throws IOException { List<User> userList = userMapper.findAll(); writeExcel(response, userList); } private List<User> readExcel(MultipartFile file) throws IOException { List<User> userList = new ArrayList<>(); Workbook workbook = WorkbookFactory.create(file.getInputStream()); Sheet sheet = workbook.getSheetAt(0); for (int i = sheet.getFirstRowNum() + 1; i <= sheet.getLastRowNum(); i++) { Row row = sheet.getRow(i); User user = new User(); user.setName(row.getCell(0).getStringCellValue()); user.setEmail(row.getCell(1).getStringCellValue()); user.setPhone(row.getCell(2).getStringCellValue()); userList.add(user); } return userList; } private void writeExcel(HttpServletResponse response, List<User> userList) throws IOException { Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("Users"); Row headerRow = sheet.createRow(0); headerRow.createCell(0).setCellValue("Name"); headerRow.createCell(1).setCellValue("Email"); headerRow.createCell(2).setCellValue("Phone"); for (int i = 0; i < userList.size(); i++) { Row row = sheet.createRow(i + 1); User user = userList.get(i); row.createCell(0).setCellValue(user.getName()); row.createCell(1).setCellValue(user.getEmail()); row.createCell(2).setCellValue(user.getPhone()); } response.setHeader("Content-Disposition", "attachment; filename=users.xlsx"); response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); workbook.write(response.getOutputStream()); } } ``` 5. 创建Controller 创建一个Controller,用于接收导入导出Excel文件的请求。 ```java @RestController public class UserController { @Autowired private UserService userService; @GetMapping("/users") public List<User> findAll() { return userService.findAll(); } @PostMapping("/users") public void insert(@RequestBody User user) { userService.insert(user); } @PostMapping("/users/import") public void batchInsert(@RequestParam("file") MultipartFile file) throws IOException { userService.batchInsert(file); } @GetMapping("/users/export") public void exportExcel(HttpServletResponse response) throws IOException { userService.exportExcel(response); } } ``` 至此,就完成了SpringBoot集成MyBatis和POI实现Excel导入导出的步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值