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

相关文章

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

SQL中如何添加数据(常见方法及示例)

《SQL中如何添加数据(常见方法及示例)》SQL全称为StructuredQueryLanguage,是一种用于管理关系数据库的标准编程语言,下面给大家介绍SQL中如何添加数据,感兴趣的朋友一起看看吧... 目录在mysql中,有多种方法可以添加数据。以下是一些常见的方法及其示例。1. 使用INSERT I

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

在Linux中改变echo输出颜色的实现方法

《在Linux中改变echo输出颜色的实现方法》在Linux系统的命令行环境下,为了使输出信息更加清晰、突出,便于用户快速识别和区分不同类型的信息,常常需要改变echo命令的输出颜色,所以本文给大家介... 目python录在linux中改变echo输出颜色的方法技术背景实现步骤使用ANSI转义码使用tpu

linux hostname设置全过程

《linuxhostname设置全过程》:本文主要介绍linuxhostname设置全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录查询hostname设置步骤其它相关点hostid/etc/hostsEDChina编程A工具license破解注意事项总结以RHE

MySQL 删除数据详解(最新整理)

《MySQL删除数据详解(最新整理)》:本文主要介绍MySQL删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、前言二、mysql 中的三种删除方式1.DELETE语句✅ 基本语法: 示例:2.TRUNCATE语句✅ 基本语

Python设置Cookie永不超时的详细指南

《Python设置Cookie永不超时的详细指南》Cookie是一种存储在用户浏览器中的小型数据片段,用于记录用户的登录状态、偏好设置等信息,下面小编就来和大家详细讲讲Python如何设置Cookie... 目录一、Cookie的作用与重要性二、Cookie过期的原因三、实现Cookie永不超时的方法(一)

Java easyExcel实现导入多sheet的Excel

《JavaeasyExcel实现导入多sheet的Excel》这篇文章主要为大家详细介绍了如何使用JavaeasyExcel实现导入多sheet的Excel,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录1.官网2.Excel样式3.代码1.官网easyExcel官网2.Excel样式3.代码

MyBatisPlus如何优化千万级数据的CRUD

《MyBatisPlus如何优化千万级数据的CRUD》最近负责的一个项目,数据库表量级破千万,每次执行CRUD都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊MyBatisPl... 目录背景一、MyBATis Plus 简介二、千万级数据的挑战三、优化 CRUD 的关键策略1. 查