通过Java读取Excle中的内容
最近在写一个从Excle题库抽题组卷在jsp显示的功能,其中用到了一些算法和技术,在此做记录。
1.通过java读取excle中内容;
2.获取某范围内的一个随机数;
3.从m个数中随机抽取n个数;
4.获取jsp界面中单选框的选择结果;
5.EL表达式的一些注意点(不定时更新)。
本篇主要来介绍通过java读取excle中内容。
一、添加依赖(jar包)
注:博主使用的是SSM框架,需要在pom.xml中添加依赖
<!-- 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>
如果没有用框架,可以直接在Maven官网(https://mvnrepository.com/)中直接搜索“poi”,下载前两个jar包:
二、读取工具类的编写(搬运了部分代码(*^▽^*))
本段代码可以实现.xls和.xlsx格式文件的读取,包括读取表头和单元格内容等方法。解除main方法的多行注释可以验证正确性,注意文件的路径不要写错了哦~
package com.moyi.ssm.stu.tool;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.text.DecimalFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;/*** 读取Excel* * @author littlewheat*/
public class ReadExcelUtils {private Logger logger = LoggerFactory.getLogger(ReadExcelUtils.class);private Workbook wb;private Sheet sheet;private Row row;public ReadExcelUtils(String filepath) {if(filepath==null){return;}String ext = filepath.substring(filepath.lastIndexOf("."));try {InputStream is = new FileInputStream(filepath);if(".xls".equals(ext)){wb = new HSSFWorkbook(is);}else if(".xlsx".equals(ext)){wb = new XSSFWorkbook(is);}else{wb=null;}} catch (FileNotFoundException e) {logger.error("FileNotFoundException", e);} catch (IOException e) {logger.error("IOException", e);}}/*** 读取Excel表格表头的内容* * @param InputStream* @return String 表头内容的数组* @author littlewheat*/public String[] readExcelTitle() throws Exception{if(wb==null){throw new Exception("Workbook对象为空!");}sheet = wb.getSheetAt(0);row = sheet.getRow(0);// 标题总列数int colNum = row.getPhysicalNumberOfCells();System.out.println("colNum:" + colNum);String[] title = new String[colNum];for (int i = 0; i < colNum; i++) {// title[i] = getStringCellValue(row.getCell((short) i));title[i] = row.getCell(i).getStringCellValue();}return title;}/*** 读取Excel数据内容* * @param InputStream* @return Map 包含单元格数据内容的Map对象* @author littlewheat*/public Map<Integer, Map<Integer,Object>> readExcelContent() throws Exception{if(wb==null){throw new Exception("Workbook对象为空!");}Map<Integer, Map<Integer,Object>> content = new HashMap<Integer, Map<Integer,Object>>();sheet = wb.getSheetAt(0);// 得到总行数int rowNum = sheet.getLastRowNum();row = sheet.getRow(0);int colNum = row.getPhysicalNumberOfCells();// 正文内容应该从第二行开始,第一行为表头的标题for (int i = 1; i <= rowNum; i++) {row = sheet.getRow(i);int j = 0;Map<Integer,Object> cellValue = new HashMap<Integer, Object>();while (j < colNum) {Object obj = getCellFormatValue(row.getCell(j));cellValue.put(j, obj);j++;}content.put(i, cellValue);}return content;}/*** * 根据Cell类型设置数据* * @param cell* @return* @author littlewheat*/private Object getCellFormatValue(Cell cell) {Object cellvalue = "";if (cell != null) {// 判断当前Cell的Typeswitch (cell.getCellType()) {case Cell.CELL_TYPE_NUMERIC:// 如果当前Cell的Type为NUMERICcase Cell.CELL_TYPE_FORMULA: {// 判断当前的cell是否为Dateif (DateUtil.isCellDateFormatted(cell)) {// 如果是Date类型则,转化为Data格式// data格式是带时分秒的:2013-7-10 0:00:00// cellvalue = cell.getDateCellValue().toLocaleString();// data格式是不带带时分秒的:2013-7-10Date date = cell.getDateCellValue();cellvalue = date;} else {// 如果是纯数字//DecimalFormat df = new DecimalFormat("0"); //cellvalue = df.format(cell.getNumericCellValue()); // 取得当前Cell的数值cell.setCellType(Cell.CELL_TYPE_STRING);//cellvalue = String.valueOf(cell.getNumericCellValue());cellvalue = String.valueOf(cell.getStringCellValue());}break;}case Cell.CELL_TYPE_STRING:// 如果当前Cell的Type为STRING// 取得当前的Cell字符串cellvalue = cell.getRichStringCellValue().getString();break;default:// 默认的Cell值cellvalue = "";}} else {cellvalue = "";}return cellvalue;}/*** public static void main(String[] args) {try {String filepath = "F:\\test.xls";ReadExcelUtils excelReader = new ReadExcelUtils(filepath);// 对读取Excel表格标题测试String[] title = excelReader.readExcelTitle();System.out.println("获得Excel表格的标题:");for (String s : title) {System.out.print(s + " ");}System.out.println("");// 对读取Excel表格内容测试Map<Integer, Map<Integer,Object>> map = excelReader.readExcelContent();System.out.println("获得Excel表格的内容:");for (int i = 1; i <= map.size(); i++) {System.out.println(map.get(i));for (int j = 0; j < map.get(i).size(); j++) {System.out.println(map.get(i).get(j));}}} catch (FileNotFoundException e) {System.out.println("未找到指定路径的文件!");e.printStackTrace();}catch (Exception e) {e.printStackTrace();}}* @param args*/}
测试效果如下:
F盘下的test.xls文件内容:
运行main方法后显示结果:
colNum:3
获得Excel表格的标题:
姓名 年龄 身高
获得Excel表格的内容:
{0=小红, 1=11, 2=120}
小红
11
120
{0=橡胶, 1=20, 2=130}
橡胶
20
130
{0=bigdown, 1=0, 2=200}
bigdown
0
200
到此,工具类就写好了,为下一步的使用奠定了基础。
通过Java读取Excle中的内容相关推荐
- java 静态资源变量_Java中读取配置文件中的内容,并将其赋值给静态变量的方法...
项目开发中某个功能需要抽取成方法写成一个工具类,提供给别人使用.写过工具类的人都知道,工具类中的方法一般都是静态方法,可以直接使用类名点方法名调用, 使用很方便,比如判断某个对象是否为空的方式Obje ...
- Java基础,读取文件中的内容写入到另外一个文件。
有两种方法,首先: 第一种方法:一次性全部读取所有文件内容(这里Arrays.sort(b)代表对字节进行排序,如果不需要进行删除即可) import java.io.FileInputStream; ...
- java获取返回xml节点里的值,关于用java读取xml中节点的值解决方案
关于用java读取xml中节点的值 在写个工程,用到了如下配置的XML文档,时间紧没法网上资料太多一时看了头大,实在不知道怎么解析了,各位大神麻烦指教一下. 配置文档内容如下 hibernate-co ...
- 读取配置文件中的内容演练 20210412_221336.mp4
读取配置文件中的内容演练 20210412_221336.mp4 演练配置文件的读取 步骤: 先创建一个配置文件(我们可以存想要记录的数据) 然后新建测试类,来读取配置中的内容 代码 import j ...
- 如何matlab导入邻接矩阵,“excel如何做矩阵“matlab中读取excle中的邻接矩阵
怎么在excel中使用矩阵函数 在excel中使用矩阵: 1.矩阵乘法运算择G3:H4,公式:=MMULT(A3:B4,D3:E4) 按Ctrl Shift Enter键,即输组公式. 2.阵的逆矩阵 ...
- pdfparser java_如何使用java从PDF中提取内容?
在Java编程中,如何使用java从PDF中提取内容? 项目的目录结构如下 - Tika的工具包可从以下网址下载:http://tika.apache.org/download.html ,只下载:t ...
- java读取excel中的数据存到数据库
1.导入jar包 <!-- poi --> <dependency> <groupId>org.apache.poi< ...
- java读取request中的xml
java读取request中的xml 答: // 读取xml InputStream inputStream; StringBuffer sb = new StringBuffer(); inputS ...
- Java读取word中表格
因为要新建一个站,公司要把word表格的部分行列存到数据库中.之前用java操作过excel,本来打算用java从word表格中读取数据,再存到数据库中,结果因为权限不够,无法访问公司要写的那个数据库 ...
最新文章
- Response.Redirect 打开新窗口的两种方法
- python联盟是什么意思_Python 与 英雄联盟(1)
- 查看mysql语句运行时间的2种方法
- cpu只能单通道是什么表现_【小白入门】为什么要组内存双通道?
- 如何在新版的gitbook上写自己的书
- OpenGL 渲染管线理论
- php免费下载手册,php手册|php中文手册下载|好特下载
- 每天学点Shiro-say hello
- Android特色开发之语音识别
- floyd算法求最短路径_算法题-蜜蜂采蜜最短路径
- python绘制缓和曲线_CAD里面如何绘制缓和曲线
- JS实现继承的几种方法总结
- 《资治通鉴-卷四(一)
- 计算机协会维修照片,照片门事件后,当年那个毁了陈冠希的电脑修理员,如今变成这样!...
- 扫地机器人扫水泥地板有用吗_拖地机器人好用吗—拖地机器人的优点介绍
- python记录鼠标键盘操作自动执行重复工作
- 程序员接私活平台汇总,有技术就有钱!
- 解决 FFmpeg 执行报错:Too many packets buffered for output stream 0:1
- 百度回应“偷拍插件”:凤巢系统并非面向普通用户
- AutoCAD LISP绘制标准图框