创建Excel,解析Excel,处理CSV Injection

2024-08-20 17:18

本文主要是介绍创建Excel,解析Excel,处理CSV Injection,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.使用Apache POI创建和解析Excel

  • Maven依赖
  • <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
    <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.17</version>
    </dependency><!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
    <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.17</version>
    </dependency>

     

2.本地创建Excel

3.如何处理CSV Injection

  • 如果遇到=,+,-,@符号特殊字符打头的值,那么我会在其值前面加一个tab键,这样在excel里面tab键不会显示,但实际上有该值前面有个tab键。
  • 下载:用户下载excel的时候,对于特殊字符打头的我们加一个tab键
  • 上传:用户修改好excel内容,上传到系统的时候,我们需要trim一下
  • 作用:防止CSV 注入;用户在界面上填写的内容生成excel,之后上传到界面以后展示才能够保持一致。

4.具体代码(做了trim)

public class Leo_Test
{public static void main(String[] args) throws IOException, EncryptedDocumentException, InvalidFormatException, org.apache.poi.openxml4j.exceptions.InvalidFormatException{//Blank workbookXSSFWorkbook xssfWorkbook = new XSSFWorkbook();//Create a blank sheetXSSFSheet sheet = xssfWorkbook.createSheet("test");//This data needs to be written (Object[])Map<String, Object[]> data = new TreeMap<String, Object[]>();data.put("1", new Object[]{ "ID", "NAME", "LAST NAM E" });data.put("2", new Object[]{ 1, "=calc|A!Z", "-3+2" });//Iterate over data and write to sheetSet<String> keyset = data.keySet();int rownum = 0;for (String key : keyset){Row row = sheet.createRow(rownum++);Object[] objArr = data.get(key);int cellnum = 0;for (Object obj : objArr){Cell cell = row.createCell(cellnum++);if (obj instanceof String){if(((String) obj).startsWith("=")||((String) obj).startsWith("+")||((String) obj).startsWith("-")||((String) obj).startsWith("@")){StringBuffer sb = new StringBuffer();sb.append("\t").append(obj);cell.setCellValue(sb.toString());}else{cell.setCellValue((String) obj);}}else if (obj instanceof Integer)cell.setCellValue((Integer) obj);}}try{//Write the workbook in file systemFileOutputStream out = new FileOutputStream(new File("test.xlsx"));xssfWorkbook.write(out);out.close();}catch (Exception e){e.printStackTrace();}System.out.println("I will read excel content");File file = new File("test.xlsx");readFileContent(file);}private static void readFileContent(File file) throws EncryptedDocumentException, org.apache.poi.openxml4j.exceptions.InvalidFormatException, IOException{FileInputStream fileInputStream = new FileInputStream(file);Workbook workbook = WorkbookFactory.create(fileInputStream);if (null != workbook){//to get each cell value of excelfor (int i = 0; i < workbook.getNumberOfSheets(); i++){Sheet sheet = workbook.getSheetAt(i);Iterator<Row> rowIterator = sheet.iterator();while (rowIterator.hasNext()){Row row = rowIterator.next();Iterator<Cell> cellIterator = row.iterator();while (cellIterator.hasNext()){Cell cell = cellIterator.next();DataFormatter dataFormatter = new DataFormatter();String cellValue = dataFormatter.formatCellValue(cell);System.out.println(cellValue.trim());}}}}}
}

5.结果

  • 生成的excel
  • 做了trim,打印到控制台结果
  • 未做trim的话,打印到控制台结果

 

 

这篇关于创建Excel,解析Excel,处理CSV Injection的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

SQL 外键Foreign Key全解析

《SQL外键ForeignKey全解析》外键是数据库表中的一列(或一组列),用于​​建立两个表之间的关联关系​​,外键的值必须匹配另一个表的主键(PrimaryKey)或唯一约束(UniqueCo... 目录1. 什么是外键?​​ ​​​​2. 外键的语法​​​​3. 外键的约束行为​​​​4. 多列外键​

Java进行日期解析与格式化的实现代码

《Java进行日期解析与格式化的实现代码》使用Java搭配ApacheCommonsLang3和Natty库,可以实现灵活高效的日期解析与格式化,本文将通过相关示例为大家讲讲具体的实践操作,需要的可以... 目录一、背景二、依赖介绍1. Apache Commons Lang32. Natty三、核心实现代

详解如何在SpringBoot控制器中处理用户数据

《详解如何在SpringBoot控制器中处理用户数据》在SpringBoot应用开发中,控制器(Controller)扮演着至关重要的角色,它负责接收用户请求、处理数据并返回响应,本文将深入浅出地讲解... 目录一、获取请求参数1.1 获取查询参数1.2 获取路径参数二、处理表单提交2.1 处理表单数据三、

使用Python自动化生成PPT并结合LLM生成内容的代码解析

《使用Python自动化生成PPT并结合LLM生成内容的代码解析》PowerPoint是常用的文档工具,但手动设计和排版耗时耗力,本文将展示如何通过Python自动化提取PPT样式并生成新PPT,同时... 目录核心代码解析1. 提取 PPT 样式到 jsON关键步骤:代码片段:2. 应用 JSON 样式到

Maven 插件配置分层架构深度解析

《Maven插件配置分层架构深度解析》:本文主要介绍Maven插件配置分层架构深度解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Maven 插件配置分层架构深度解析引言:当构建逻辑遇上复杂配置第一章 Maven插件配置的三重境界1.1 插件配置的拓扑

通过C#获取Excel单元格的数据类型的方法详解

《通过C#获取Excel单元格的数据类型的方法详解》在处理Excel文件时,了解单元格的数据类型有助于我们正确地解析和处理数据,本文将详细介绍如何使用FreeSpire.XLS来获取Excel单元格的... 目录引言环境配置6种常见数据类型C# 读取单元格数据类型引言在处理 Excel 文件时,了解单元格

C#实现高性能Excel百万数据导出优化实战指南

《C#实现高性能Excel百万数据导出优化实战指南》在日常工作中,Excel数据导出是一个常见的需求,然而,当数据量较大时,性能和内存问题往往会成为限制导出效率的瓶颈,下面我们看看C#如何结合EPPl... 目录一、技术方案核心对比二、各方案选型建议三、性能对比数据四、核心代码实现1. MiniExcel

Spring Boot Controller处理HTTP请求体的方法

《SpringBootController处理HTTP请求体的方法》SpringBoot提供了强大的机制来处理不同Content-Type​的HTTP请求体,这主要依赖于HttpMessageCo... 目录一、核心机制:HttpMessageConverter​二、按Content-Type​处理详解1.

全解析CSS Grid 的 auto-fill 和 auto-fit 内容自适应

《全解析CSSGrid的auto-fill和auto-fit内容自适应》:本文主要介绍了全解析CSSGrid的auto-fill和auto-fit内容自适应的相关资料,详细内容请阅读本文,希望能对你有所帮助... css  Grid 的 auto-fill 和 auto-fit/* 父元素 */.gri

POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能

《POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能》ApachePOI是一个流行的Java库,用于处理MicrosoftOffice格式文件,提供丰富API来创建、读取和修改O... 目录前言:Apache POIEasyPoiEasyExcel一、EasyExcel1.1、核心特性