excel文件追加内容,设置追加数据字体颜色,兼容.xlsx与.xls

2024-03-23 02:58

本文主要是介绍excel文件追加内容,设置追加数据字体颜色,兼容.xlsx与.xls,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

关于IO的基础知识可见:IO

一、行追加

1、代码详细解释

import lombok.extern.slf4j.Slf4j;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.FileInputStream;
import java.io.FileOutputStream;/*** @author zhangmeng* @Date 2019-11-22* @desc*/
@Slf4j
public class Test {@org.junit.Testpublic void test() {String filePath = "/Users/zhangmeng/Desktop/工作簿2.xlsx";FileInputStream in = null;FileOutputStream out = null;XSSFWorkbook wb = null;try {//获取文件in = new FileInputStream(filePath);wb = new XSSFWorkbook(in);//获取到工作表,因为一个excel可能有多个工作表XSSFSheet sheet = wb.getSheetAt(0);//获取第一行(excel中的行默认从0开始,所以这就是为什么,一个excel必须有字段列头),即,字段列头,便于赋值XSSFRow row = sheet.getRow(0);//分别得到最后一行的行号,和一条记录的最后一个单元格System.out.println(sheet.getLastRowNum() + " " + row.getLastCellNum());out = new FileOutputStream(filePath);//创建现有行号的下一行row = sheet.createRow((short) (sheet.getLastRowNum() + 1));//设置第一个(从0开始)单元格的数据row.createCell(0).setCellValue("123");//设置第二个(从0开始)单元格的数据row.createCell(1).setCellValue(1);} catch (Exception e) {log.info("异常e:{}", e);} finally {try {if (in != null) {in.close();}if (out != null) {out.flush();wb.write(out);out.close();}} catch (Exception e) {log.info("e:{}", e);}}}
}

2、问题解决

org.apache.poi.poifs.filesystem.OfficeXmlFileException: The supplied data appears to be in the Office 2007  XML. You are calling the part of POI that deals with OLE2 Office Documents. You need to call a different part of POI to process this data (eg XSSF instead of HSSF)

原因:excel2003和excel2007版本的问题

(1)判断文件后缀名是xls,还是xlsx

(2)文件后缀名是xls,使用HSSFWorkbook;是xlsx,使用XSSFWorkbook

二、列追加

1、代码详细解释

excel处理数据,处理结果在指定行的最后一列添加备注,设置追加数据字体颜色

@Slf4j
public class Test {private static final Integer CURRENT_ROW = 1;@org.junit.Testpublic void test() {String filePath = "/Users/zhangmeng/Desktop/工作簿2.xlsx";FileInputStream in = null;FileOutputStream out = null;XSSFWorkbook wb = null;try {//获取文件in = new FileInputStream(filePath);wb = new XSSFWorkbook(in);//获取到工作表,因为一个excel可能有多个工作表XSSFSheet sheet = wb.getSheetAt(0);//写入数据out = new FileOutputStream(filePath);//设置追加字体颜色CellStyle redStyle = wb.createCellStyle();XSSFFont redFont = wb.createFont();redFont.setColor(new XSSFColor(new Color(255,0,0)));redStyle.setFont(redFont);//获取指定行(excel中的行默认从0开始)XSSFRow row = sheet.getRow(CURRENT_ROW);//在当前行最后一列的下一列追加数据XSSFCell cell = row.createCell(row.getLastCellNum());cell.setCellStyle(redStyle);cell.setCellValue("999");} catch (Exception e) {log.info("异常e:{}", e);} finally {try {if (in != null) {in.close();}if (out != null) {out.flush();wb.write(out);out.close();}} catch (Exception e) {log.info("e:{}", e);}}}
}

2、row.getLastCellNum(),获取的是最后一列的下一列,同size

三、兼容.xlsx与.xls,追加数据

private static final String EXCEL_EXTENSION_XLS = "xls";private void appendExcelData(String filePath, Map<Integer, String> needAppendRows) {FileInputStream in = null;FileOutputStream out = null;Workbook wb = null;try {//获取文件in = new FileInputStream(filePath);if (filePath.endsWith(EXCEL_EXTENSION_XLS)) {wb = new HSSFWorkbook(in);} else {wb = new XSSFWorkbook(in);}//获取到工作表,因为一个excel可能有多个工作表Sheet sheet = wb.getSheetAt(0);//写入数据out = new FileOutputStream(filePath);//设置颜色CellStyle redStyle = wb.createCellStyle();Font redFont = wb.createFont();redFont.setColor(Font.COLOR_RED);redStyle.setFont(redFont);//获取指定行(excel中的行默认从0开始)for (Integer rows : needAppendRows.keySet()) {Row row = sheet.getRow(rows);//在当前行最后一列的下一列追加数据Cell cell = row.createCell(row.getLastCellNum());cell.setCellStyle(redStyle);cell.setCellValue(needAppendRows.get(rows));}} catch (Exception e) {log.info("appendExcelData, 追加数据出现异常e:{}", e);} finally {try {if (in != null) {in.close();}if (out != null) {out.flush();wb.write(out);out.close();}} catch (Exception e) {log.info("appendExcelData, 关闭流出现异常e:{}", e);}}
}

 

这篇关于excel文件追加内容,设置追加数据字体颜色,兼容.xlsx与.xls的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/836914

相关文章

通过ibd文件恢复MySql数据的操作方法

《通过ibd文件恢复MySql数据的操作方法》文章介绍通过.ibd文件恢复MySQL数据的过程,包括知道表结构和不知道表结构两种情况,对于知道表结构的情况,可以直接将.ibd文件复制到新的数据库目录并... 目录第一种情况:知道表结构第二种情况:不知道表结构总结今天干了一件大事,安装1Panel导致原来服务

Python Excel实现自动添加编号

《PythonExcel实现自动添加编号》这篇文章主要为大家详细介绍了如何使用Python在Excel中实现自动添加编号效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、背景介绍2、库的安装3、核心代码4、完整代码1、背景介绍简单的说,就是在Excel中有一列h=会有重复

Jmeter如何向数据库批量插入数据

《Jmeter如何向数据库批量插入数据》:本文主要介绍Jmeter如何向数据库批量插入数据方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Jmeter向数据库批量插入数据Jmeter向mysql数据库中插入数据的入门操作接下来做一下各个元件的配置总结Jmete

如何关闭 Mac 触发角功能或设置修饰键? mac电脑防止误触设置技巧

《如何关闭Mac触发角功能或设置修饰键?mac电脑防止误触设置技巧》从Windows换到iOS大半年来,触发角是我觉得值得吹爆的MacBook效率神器,成为一大说服理由,下面我们就来看看mac电... MAC 的「触发角」功能虽然提高了效率,但过于灵敏也让不少用户感到头疼。特别是在关键时刻,一不小心就可能触

Python批量调整Word文档中的字体、段落间距及格式

《Python批量调整Word文档中的字体、段落间距及格式》这篇文章主要为大家详细介绍了如何使用Python的docx库来批量处理Word文档,包括设置首行缩进、字体、字号、行间距、段落对齐方式等,需... 目录关键代码一级标题设置  正文设置完整代码运行结果最近关于批处理格式的问题我查了很多资料,但是都没

基于Python实现一个PDF特殊字体提取工具

《基于Python实现一个PDF特殊字体提取工具》在PDF文档处理场景中,我们常常需要针对特定格式的文本内容进行提取分析,本文介绍的PDF特殊字体提取器是一款基于Python开发的桌面应用程序感兴趣的... 目录一、应用背景与功能概述二、技术架构与核心组件2.1 技术选型2.2 系统架构三、核心功能实现解析

Nginx配置系统服务&设置环境变量方式

《Nginx配置系统服务&设置环境变量方式》本文介绍了如何将Nginx配置为系统服务并设置环境变量,以便更方便地对Nginx进行操作,通过配置系统服务,可以使用系统命令来启动、停止或重新加载Nginx... 目录1.Nginx操作问题2.配置系统服android务3.设置环境变量总结1.Nginx操作问题

使用Apache POI在Java中实现Excel单元格的合并

《使用ApachePOI在Java中实现Excel单元格的合并》在日常工作中,Excel是一个不可或缺的工具,尤其是在处理大量数据时,本文将介绍如何使用ApachePOI库在Java中实现Excel... 目录工具类介绍工具类代码调用示例依赖配置总结在日常工作中,Excel 是一个不可或缺的工http://

SpringBoot实现导出复杂对象到Excel文件

《SpringBoot实现导出复杂对象到Excel文件》这篇文章主要为大家详细介绍了如何使用Hutool和EasyExcel两种方式来实现在SpringBoot项目中导出复杂对象到Excel文件,需要... 在Spring Boot项目中导出复杂对象到Excel文件,可以利用Hutool或EasyExcel

grom设置全局日志实现执行并打印sql语句

《grom设置全局日志实现执行并打印sql语句》本文主要介绍了grom设置全局日志实现执行并打印sql语句,包括设置日志级别、实现自定义Logger接口以及如何使用GORM的默认logger,通过这些... 目录gorm中的自定义日志gorm中日志的其他操作日志级别Debug自定义 Loggergorm中的