在题库管理系统中,经常需要批量导入题目信息,本文讲述如何批量导入存储在Excel工作表中的题目信息。
假设题目存储格式如下(只导入单选、多选和判断题):
题干 题型 难易度 答案 默认分数 选项A 选项B 选项C 选项D 选项E 选项F 。。。
从第六列开始为选项,选项个数不定。第六列对应选项A,第七列对应选项B,依次类推。。
单选题的答案只能是单个大写字母,多选题答案至少为两个,以大写字母表示,且中间不以任何符号分隔(如:ABC),判断题的答案用0或1表示,0表示错误,1表示正确。
下载jxl.jar,放入类路径中。
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
。。。
try {
//读取EXCEL文件的值
InputStream is = new FileInputStream(excelfile);
Workbook wbk = Workbook.getWorkbook(is);
//读取工作表的数据
for(int k=0; k<wbk.getNumberOfSheets();k++){
Sheet rs = wbk.getSheet(k);
saveExcelToElement(rs);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BiffException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IndexOutOfBoundsException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
。。。
//检查Excel文件是否合法,遇见不合法的地方就跳出,并返回提示信息
public String checkExcel(Sheet r){
String info = "";
String[] QuestionFlag ={"A", "B", "C", "D", "E", "F","G","H","I","J"};
//共有多少行
int row = rs.getRows();
//循环输出
Cell c0 = null;
Cell c1 = null;
Cell c2 = null;
Cell c3 = null;
Cell c4 = null;
Cell cn = null;
for(int k=1;k<row;k++)
{
int rownum = k+1;
Cell[] cells = rs.getRow(k);
int len = cells.length;
c0 = rs.getCell(0, k);//题干
c1 = rs.getCell(1, k);//类型
c2 = rs.getCell(2, k);//难易度
c3 = rs.getCell(3, k);//答案("A","AB")
c4 = rs.getCell(4, k);//默认得分
if(c0.getContents()==null||c0.getContents().equals("")){
info = "题干不能为空,第"+rownum+"行题干内容为空";
break;
}
if(c1.getContents()==null||c1.getContents().equals("")){
info = "题目类型不能为空,第"+rownum+"行题目类型内容为空";
break;
}
else{
if(!(c1.getContents().equals("1")||c1.getContents().equals("2")||c1.getContents().equals("3"))){
info = "题目类型只能为1,2,3.其中1代表单选题,2代表多选题,3代表判断题。请检查第"+rownum+"行的题型字段";
break;
}
}
if(c2.getContents()!=null&&(Double.parseDouble(c2.getContents())>1||Double.parseDouble(c2.getContents())<0)){
info = "难易度只能是大于0小于1的小数,请检查第"+rownum+"行";
break;
}
String c3Content = c3.getContents();
if(c3Content==null||c3Content.equals("")){
info = "答案不能为空,请检查第"+rownum+"行";
break;
}
else{
String[] str = new String[c3Content.length()];
for(int i=0;i<c3Content.length();i++){
str[i] = String.valueOf(c3Content.charAt(i));
}
String letter = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
for(int i=0;i<str.length;i++){
if(!c1.getContents().equals("3")&&letter.indexOf(str[i])==-1){
info = "选择题答案只能包含大写字母。请检查第"+rownum+"行";
break;
}
}
if(c1.getContents().equals("1")){
if(str.length>1){
info = "单选题只能有一个答案,请检查第"+rownum+"行";
break;
}
}
if(c1.getContents().equals("2")){
if(str.length<2){
info = "多选题至少有两个答案,请检查第"+rownum+"行";
break;
}
}
if(c1.getContents().equals("3")){
if(!(c3.getContents().equals("0")||c3.getContents().equals("1"))){
info = "判断题的答案只能是0或1,其中0表示错误,1表示正确,请检查第"+rownum+"行";
break;
}
}
}
String c4Content = c4.getContents();
String number = "0123456789";
for (int i = 0; i < c4Content.length(); i++) {
if (number.indexOf(c4Content.charAt(i)) == -1) {
info = "默认得分只能是数字,请检查第"+rownum+"行";
break;
}
}
if(len-5<2){
info = "至少需要两个选项,请确定第"+rownum+"行至少有两个选项";
break;
}
if(info!=null&&!info.equals("")){
break;
}
}
return info;
}
//将工作表中的内容写入数据库
public String saveExcelToElement(Sheet r){
String info = checkExcel(r); //对Excel文件进行校验
String[] QuestionFlag ={"A", "B", "C", "D", "E", "F","G","H","I","J"};
//共有多少行
int row = rs.getRows();
//循环输出
Cell c0 = null;
Cell c1 = null;
Cell c2 = null;
Cell c3 = null;
Cell c4 = null;
Cell cn = null;
/**题干,类型,难易度,答案,选项A,选项B,选项C,选项D,选项E,选项F,选项G.......**/
if(info==null||info.equals("")){
for(int i=1;i<row;i++)
{
Cell[] cells = rs.getRow(i);
int len = cells.length;
c0 = rs.getCell(0, i);//题干
c1 = rs.getCell(1, i);//类型
c2 = rs.getCell(2, i);
c3 = rs.getCell(3, i);//答案("A","A,B")
c4 = rs.getCell(4,i);//默认得分
ArrayList optionList = new ArrayList();
//写入数据库
ZjQuestion question = new ZjQuestion();
question.setQuestioncontext(c0.getContents());
question.setQtype(c1.getContents());
question.setDifficulty(c2.getContents());
String answer = "";
for(int j=0;j<c3.getContents().length();j++){
answer = answer + String.valueOf(c3.getContents().charAt(i));
}
question.setAnswers(answer);
question.setDefaultgrade(new Long(c4.getContents()));
....
//第六列开始为选项,保存选项信息
for(int j=5;j<len;j++){
cn = rs.getCell(j, i);
if(cn.getContents()!=null&&!cn.getContents().equals("")){
ZjQuestionOption option = new ZjQuestionOption();
option.setOptioncontext(cn.getContents());
option.setViewflag(QuestionFlag[j-4]);
optionList.add(option);
}
}
question.setOptionList(optionList);
if(!this.getQuestionService().isHave(question))
this.getQuestionService().saveQuestion(question);
}
}
return info;
}
分享到:
相关推荐
综上所述,Java导入Excel文件涉及的关键技术包括Apache POI库的使用,对HSSF和XSSF的理解,以及对CSV文件处理的技巧。通过熟练掌握这些知识,你可以编写出高效且健壮的文件导入程序,满足各种需求。
在Java编程环境中,导入Excel文件是一项常见的任务,特别是在数据处理、数据分析或自动化测试等领域。本项目提供了一个完整的解决方案,帮助开发者实现这一功能。下面将详细解释这个Java项目中涉及的关键知识点,...
在本例中,我们需要关注的焦点是“Java导入excel文件的jar包”,这涉及到Java与Excel交互的核心库——Apache POI。 Apache POI是一个流行的开源项目,它允许Java开发者创建、修改和显示Microsoft Office格式的文件...
在Java编程中,处理Excel文件是一项常见的任务,无论是读取数据、写入数据还是进行复杂的分析,Excel都因其直观的格式和广泛的应用而备受青睐。本文将深入探讨Java中导入和判断Excel的使用方法,结合实例分析,帮助...
导入数据的过程中,首先需要创建一个`Workbook`对象来代表Excel文件,然后通过`Sheet`对象来操作单个工作表,接着是`Row`和`Cell`对象来处理每一行和每一列的数据。使用POI读取Excel数据的基本步骤如下: 1. 加载...
导入Excel文件通常涉及到读取单元格的数据。首先,我们需要创建一个`FileInputStream`对象来打开Excel文件,然后创建相应的`HSSFWorkbook`或`XSSFWorkbook`对象。接着,通过`Sheet`接口获取工作表,再通过`Row`接口...
java实现页面导入excel文件,保存excel文件到数据库,有需要在页面上导入一个excel表的同学可以借鉴
POI导入Excel并返回校验后的错误文件(原样数据文件,并添加批注,注:由于批注只能加1000条,会在Excel后面添加一栏错误信息)下载以及页面展示校验错误信息,同时添加导入进度条,提供页面js和css代码,后端...
java导入Excel文件,兼容.xls和.xlsx版本,采用的是POI3.10,同时解决了org.apache.poi.hssf.record.RecordInputStream$LeftoverDataException的异常问题。
自定义的一个excel文件导入导出类,支持Excel2003到2010的格式。里面也有简单的配置文件的创建。
以上就是关于“Java导入Excel到数据库”的详细知识点,涵盖了文件路径配置、合并单元格处理、数据库连接、Excel操作和数据导入等多个方面。这个过程需要对Java、数据库操作以及Excel处理有深入理解,才能有效地完成...
Excel源代码,导入导出各种工具类 <groupId>org.apache.poi <artifactId>poi <groupId>org.apache.poi <artifactId>poi-scratchpad 代码实例: String path = ""; byte[] bytes; vo.setCurrentPage(0); vo....
在Java编程中,导入Excel表格是一项常见的任务,特别是在数据处理、数据分析或系统集成等领域。Excel文件通常用于存储结构化数据,而Java作为一种强大的后端语言,提供了多种方式来读取和操作这些数据。本篇文章将...
要完成这个过程,我们需要使用特定的库来读取Excel文件,并使用JDBC(Java Database Connectivity)来与MySQL数据库进行交互。下面将详细解释如何实现这个功能。 首先,我们需要引入两个关键的第三方库:Apache POI...
java jxl 通过excel模板创建新文件并将数据导入excel,实现按行、列插入数据
Java POI 实现 Excel 导入导出 Java POI 是一个流行的 Java 库,用于处理 Microsoft Office 文件格式,包括 ...在本文中,我们已经详细介绍了如何使用 Java POI 实现 Excel 导入导出功能,包括读取和写入 Excel 文件。
java Excel工具类,导入导出Excel数据,导入数据对合并表格有判断获取数据,导出数据到Excel,Excel文件不存在会创建。 博客:https://blog.csdn.net/qq_37902949/article/details/81230640
java读取excel数据导入数据库源码 java读取excel数据导入数据库源码
- `java.io`包中的类,如`FileInputStream`用于读取Excel文件,`BufferedReader`或`BufferedInputStream`用于提高文件读取性能。 - `org.apache.poi.ss.usermodel`接口和类,如`Workbook`、`Sheet`、`Row`和`Cell`...