java 实现POI导入导出Excel

2023-10-27

package com.chenxc.utils.excel;

import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;

/**
 * 读写EXCEL文件
 */
public class POIUtils {
	
	
	private static final String position_title = "title";
	private static final String position_body = "body";
	
	
	/**
	 * 判断excel版本
	 * @param in
	 * @param filename
	 * @return
	 * @throws IOException
	 */
	private static Workbook openWorkbook(InputStream in, String filename)
			throws IOException {
		Workbook wb = null;
		if (filename.endsWith(".xlsx")) {
			wb = new XSSFWorkbook(in);// Excel 2007
		} else {
			wb = new HSSFWorkbook(in);// Excel 2003
		}
		return wb;
	}

	/**
	 * 根据文件路径和工作薄下标导入Excel数据
	 * @param fileName 文件名
	 * @param sheetIndex 工作薄下标
	 * @return
	 * @throws Exception
	 */
	public static List<List<String>> getExcelData(MultipartFile file , String fileName, int sheetIndex) throws Exception {
		List<List<String>> dataLst = new ArrayList<List<String>>();
		Workbook wb = openWorkbook(file.getInputStream(), fileName);
		Sheet sheet = (Sheet) wb.getSheetAt(sheetIndex);// 切换工作薄
		Row row = null;
		Cell cell = null;

		int totalRows = sheet.getPhysicalNumberOfRows();
		/** 得到Excel的列数 */
		int totalCells = totalRows >= 1 && sheet.getRow(0) != null ? sheet
				.getRow(0).getPhysicalNumberOfCells() : 0;
		for (int r = 1; r < totalRows; r++) {
			row = sheet.getRow(r);
			if (row == null || curRowInsideNull(row, totalCells))
				continue;
			List<String> rowLst = new ArrayList<String>();
			for (int c = 0; c < totalCells; c++) {
				cell = row.getCell(c);
				String cellValue = "";
				if (null != cell) {
					// 以下是判断数据的类型
					switch (cell.getCellType()) {
					case HSSFCell.CELL_TYPE_NUMERIC: // 数字
						int cellStyle = cell.getCellStyle().getDataFormat();
						String cellStyleStr = cell
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java 实现POI导入导出Excel 的相关文章

随机推荐

  • 【2024届计算机+大数据+人工智能专业毕设选题专栏讲解答疑,旨在辅助同学们顺利选题】

    http 2024届计算机 大数据 人工智能专业毕设选题专栏讲解答疑 旨在辅助同学们顺利选题 https www bilibili com video BV1H14y1k7fu share source copy web vd source
  • Vue导出JSON文件,读取本地上传JSON文件

    导出JSON文件 插件安装 import FileSaver from file saver 导出代码 const data JSON stringify 存放JS数组或者对象 const blob new Blob data type a
  • 详解VSCode中C++工程配置

    安装MinGW w64及环境变量配置 下载MinGW w64 可以通过官网直接进行下载在线安装包 然后在本地进行安装即可 但是基本都会由于网络超时等各种原因终止 因此这里建议直接下载 MinGW w64 库解压 然后在系统中指定环境变量即可
  • Verilog中条件编译的使用(`ifdef-`elsif-`else-`endif)

    Verilog中条件编译的使用 ifdef elsif else endif 目录 Verilog中条件编译的使用 ifdef elsif else endif 一 概念 二 格式 2 1条件编译格式 2 2条件语句 三 应用示例 3 1顶
  • 【DevOps核心理念基础】2. 敏捷开发与DevOps关系

    一 什么是敏捷开发 1 1 敏捷开发的核心模型 二 敏捷开发的要点 2 1 敏捷开发 gt 执行细节 2 2 敏捷开发 gt 思路的转变 客户需求 提升出行速度 三 敏捷开发 与 DevOps 四 DevOps 实践的度量标准 4 1 怎样
  • A Survey on Model Compression for Large Language Models

    本文是LLM系列文章 关于模型压缩相关综述 针对 A Survey on Model Compression for Large Language Models 的翻译 大模型的模型压缩综述 摘要 1 引言 2 方法 3 度量和基准 3 1
  • 【MySQL】唯一性约束【UNIQUE】从基础到就业

    唯一约束 unique 用来限制某个字段 某列的值不能重复 唯一约束允许出现 多个空值 同一个表可以有多个唯一约束 唯一约束可以是某一个列的值唯一 也可以多个列组合的值唯一 唯一性约束允许列值为空 在创建唯一约束的时候 如果不给唯一约束命名
  • C#异步通信概念及应用浅析

    转自夜里煞白http developer 51cto com art 200908 145381 htm C 异步通信概念及应用浅析 2009 08 20 18 47 夜里煞白 百度空间 字号 T T C 异步通信概念及应用主要向你介绍了C
  • 腾讯推出混元大模型,已接入微信搜一搜、腾讯会议等 50 多个业务及产品

    作者 宛辰编辑 郑玄 腾讯补上了大模型布局中最重要的一块拼图 9 月 7 日 在 2023 腾讯全球数字生态大会上 腾讯混元大模型正式亮相 并宣布通过腾讯云对外开放 腾讯介绍 混元大模型是由腾讯全链路自研的通用大语言模型 具备强大的中文创作
  • STM32输入捕获可用于编码器测速

    STM32输入捕获 前言 一 输入捕获功能框图 输入捕获应用 输入捕获测电平持续的时间 二 例程代码 关键功能函数说明 前言 本篇目的是解释编码器测速的输入捕获概念 即本人的这篇文章 基于树莓派ROSstm32搭载Freertos智能平衡车
  • 输入框失去焦点时,小数点前面不能以0开头及保留3位小数

    text box blur function obj this val parseFloat this val if this val length this val indexOf 1 gt 3 this val parseFloat t
  • Jenkins API 开发实战

    一 Jenkins扩展 1 共享库简介 共享库由名称 源代码检索方法 如 SCM 和可选的默认版本定义 该名称应该是一个简短的标识符 因为它将在脚本中使用 该版本可以是该 SCM 可以理解的任何内容 例如 分支 标签和提交哈希都适用于 Gi
  • 若依RuoYi-Vue隐藏首页页面

    需要修改两个地方 分别是 路由菜单 注释掉首页菜单 除了首页之外的菜单都是动态获取的 首页是写死的 所以注释掉首页菜单就不会在左边的菜单列表看到首页了 登录按钮的位置 修改路由跳转链接 具体修改如下 1 注释首页菜单 文件位置在 src r
  • C++中的仿函数functor

    引子 先考虑一个简单的例子 假设有一个vector
  • zabbix安装与使用

    安装包地址 https jaist dl sourceforge net project zabbix ZABBIX 20Latest 20Development 4 2 0alpha3 zabbix 4 2 0alpha3 tar gz
  • 区块链开发初学者编程入门指南

    我有很多问题需要了解区块链Blockchain的工作原理 重要的是 我如何在其上构建应用程序dapp 花了几个星期的时间挖掘 阅读和试验才最终了解 我找不到简短而全面的指南 现在 我有一些不错的理解 我想写一个可以帮助别人的 这是一个快速指
  • 计算机网络毕业论文ensp,eNSP实验(一)简单组网实验

    一 前言 计算机网络在很久之前学习过 最近突然对网络安全领域比较感兴趣 所以通过实验的形式重新温习一下计算机网络的相关知识 eNSP实验系列借助华为eNSP软件完成相关实验的组网设计 实验所需的工具包括eNSP软件 Wireshark抓包工
  • React 学习之旅一

    React 学习之旅一 React 官网 版本要求 Node gt 8 10 和 npm gt 5 6 node v npm v 创建 React 项目 npx create react app my app Hook 它可以让你在不编写
  • customEventData的普通用法

    需要先用event来接受一些其他信息 然后传入的数值放在参数中 类型按钮按下 TypeButtonDown event value console log 按下 console log value 然后再button这里设置好eventDa
  • java 实现POI导入导出Excel

    package com chenxc utils excel import org apache poi hssf usermodel import org apache poi hssf util HSSFColor import org