创建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

相关文章

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

SpringBoot操作spark处理hdfs文件的操作方法

《SpringBoot操作spark处理hdfs文件的操作方法》本文介绍了如何使用SpringBoot操作Spark处理HDFS文件,包括导入依赖、配置Spark信息、编写Controller和Ser... 目录SpringBoot操作spark处理hdfs文件1、导入依赖2、配置spark信息3、cont

在C#中合并和解析相对路径方式

《在C#中合并和解析相对路径方式》Path类提供了几个用于操作文件路径的静态方法,其中包括Combine方法和GetFullPath方法,Combine方法将两个路径合并在一起,但不会解析包含相对元素... 目录C#合并和解析相对路径System.IO.Path类幸运的是总结C#合并和解析相对路径对于 C

手把手教你idea中创建一个javaweb(webapp)项目详细图文教程

《手把手教你idea中创建一个javaweb(webapp)项目详细图文教程》:本文主要介绍如何使用IntelliJIDEA创建一个Maven项目,并配置Tomcat服务器进行运行,过程包括创建... 1.启动idea2.创建项目模板点击项目-新建项目-选择maven,显示如下页面输入项目名称,选择

SpringBoot使用Apache POI库读取Excel文件的操作详解

《SpringBoot使用ApachePOI库读取Excel文件的操作详解》在日常开发中,我们经常需要处理Excel文件中的数据,无论是从数据库导入数据、处理数据报表,还是批量生成数据,都可能会遇到... 目录项目背景依赖导入读取Excel模板的实现代码实现代码解析ExcelDemoInfoDTO 数据传输

java poi实现Excel多级表头导出方式(多级表头,复杂表头)

《javapoi实现Excel多级表头导出方式(多级表头,复杂表头)》文章介绍了使用javapoi库实现Excel多级表头导出的方法,通过主代码、合并单元格、设置表头单元格宽度、填充数据、web下载... 目录Java poi实现Excel多级表头导出(多级表头,复杂表头)上代码1.主代码2.合并单元格3.

Java解析JSON的六种方案

《Java解析JSON的六种方案》这篇文章介绍了6种JSON解析方案,包括Jackson、Gson、FastJSON、JsonPath、、手动解析,分别阐述了它们的功能特点、代码示例、高级功能、优缺点... 目录前言1. 使用 Jackson:业界标配功能特点代码示例高级功能优缺点2. 使用 Gson:轻量

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines

MyBatis延迟加载的处理方案

《MyBatis延迟加载的处理方案》MyBatis支持延迟加载(LazyLoading),允许在需要数据时才从数据库加载,而不是在查询结果第一次返回时就立即加载所有数据,延迟加载的核心思想是,将关联对... 目录MyBATis如何处理延迟加载?延迟加载的原理1. 开启延迟加载2. 延迟加载的配置2.1 使用