最近在写一个从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中的内容相关推荐

  1. java 静态资源变量_Java中读取配置文件中的内容,并将其赋值给静态变量的方法...

    项目开发中某个功能需要抽取成方法写成一个工具类,提供给别人使用.写过工具类的人都知道,工具类中的方法一般都是静态方法,可以直接使用类名点方法名调用, 使用很方便,比如判断某个对象是否为空的方式Obje ...

  2. Java基础,读取文件中的内容写入到另外一个文件。

    有两种方法,首先: 第一种方法:一次性全部读取所有文件内容(这里Arrays.sort(b)代表对字节进行排序,如果不需要进行删除即可) import java.io.FileInputStream; ...

  3. java获取返回xml节点里的值,关于用java读取xml中节点的值解决方案

    关于用java读取xml中节点的值 在写个工程,用到了如下配置的XML文档,时间紧没法网上资料太多一时看了头大,实在不知道怎么解析了,各位大神麻烦指教一下. 配置文档内容如下 hibernate-co ...

  4. 读取配置文件中的内容演练 20210412_221336.mp4

    读取配置文件中的内容演练 20210412_221336.mp4 演练配置文件的读取 步骤: 先创建一个配置文件(我们可以存想要记录的数据) 然后新建测试类,来读取配置中的内容 代码 import j ...

  5. 如何matlab导入邻接矩阵,“excel如何做矩阵“matlab中读取excle中的邻接矩阵

    怎么在excel中使用矩阵函数 在excel中使用矩阵: 1.矩阵乘法运算择G3:H4,公式:=MMULT(A3:B4,D3:E4) 按Ctrl Shift Enter键,即输组公式. 2.阵的逆矩阵 ...

  6. pdfparser java_如何使用java从PDF中提取内容?

    在Java编程中,如何使用java从PDF中提取内容? 项目的目录结构如下 - Tika的工具包可从以下网址下载:http://tika.apache.org/download.html ,只下载:t ...

  7. java读取excel中的数据存到数据库

    1.导入jar包 <!-- poi -->         <dependency>             <groupId>org.apache.poi< ...

  8. java读取request中的xml

    java读取request中的xml 答: // 读取xml InputStream inputStream; StringBuffer sb = new StringBuffer(); inputS ...

  9. Java读取word中表格

    因为要新建一个站,公司要把word表格的部分行列存到数据库中.之前用java操作过excel,本来打算用java从word表格中读取数据,再存到数据库中,结果因为权限不够,无法访问公司要写的那个数据库 ...

最新文章

  1. Response.Redirect 打开新窗口的两种方法
  2. python联盟是什么意思_Python 与 英雄联盟(1)
  3. 查看mysql语句运行时间的2种方法
  4. cpu只能单通道是什么表现_【小白入门】为什么要组内存双通道?
  5. 如何在新版的gitbook上写自己的书
  6. OpenGL 渲染管线理论
  7. php免费下载手册,php手册|php中文手册下载|好特下载
  8. 每天学点Shiro-say hello
  9. Android特色开发之语音识别
  10. floyd算法求最短路径_算法题-蜜蜂采蜜最短路径
  11. python绘制缓和曲线_CAD里面如何绘制缓和曲线
  12. JS实现继承的几种方法总结
  13. 《资治通鉴-卷四(一)
  14. 计算机协会维修照片,照片门事件后,当年那个毁了陈冠希的电脑修理员,如今变成这样!...
  15. 扫地机器人扫水泥地板有用吗_拖地机器人好用吗—拖地机器人的优点介绍
  16. python记录鼠标键盘操作自动执行重复工作
  17. 程序员接私活平台汇总,有技术就有钱!
  18. 解决 FFmpeg 执行报错:Too many packets buffered for output stream 0:1
  19. 百度回应“偷拍插件”:凤巢系统并非面向普通用户
  20. AutoCAD LISP绘制标准图框

热门文章

  1. python有什么颜色_Python中常见颜色记录
  2. 基于阿里云的API简介
  3. android系统蓝牙自动连接
  4. 在Ubuntu中以管理员身份用可视化的方式打开根目录文件夹
  5. 国密算法简介及电子印章相关标准
  6. 后缀表达式求值和转换(C++)
  7. 海关179接口终极解决方案
  8. autojs发射广播源码,使用了sendBroadcast方法
  9. 织梦后台编写网站的操作步骤
  10. POM 文件中 licenses 许可证的定义