`
kejiaweiren
  • 浏览: 2292 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

根据现有单词生成随机单词EXCEL

阅读更多
      由于最近在背日语单词,把一些单词录入EXCEL了。通过日语背中文或者通过中文背日语(以隐藏日语或中文列来实现)。但是当看一个单词想不起来是可以不经意的看到前后单词而想起对应的日语或中文,效果欠佳。所以花了半小时写了个功能,目的是把录入的几百个单词随机生成后写成另一个EXCEL文件。用来达到看见日语就能想到中文 看到中文就能想到日文的目的。

     原EXCEL形式是:
A            B          C      D
日文     中文       自    注释

日文     中文              注释

实体类:

public class Word {
private String japanese;
private String chinese;
private String detail;
private boolean isZi;
public boolean getIsZi() {
  return isZi;
}
public void setIsZi(boolean isZi) {
  this.isZi = isZi;
}
public String getJapanese() {
  return japanese;
}
public void setJapanese(String japanese) {
  this.japanese = japanese;
}
public String getChinese() {
  return chinese;
}
public void setChinese(String chinese) {
  this.chinese = chinese;
}
public String getDetail() {
  return detail;
}
public void setDetail(String detail) {
  this.detail = detail;
}
@Override
public String toString() {
  // TODO Auto-generated method stub
  return "jap:"+japanese+"\tchi:"+chinese+"\tiszi:"+isZi;
}
}
测试类:


import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;

public class Test {
//由于最近在背日语单词,把一些单词录入EXCEL了。通过日语背中文或者通过中文背日语(以隐藏日语或中文列来实现)。但是当看一个单词想不起来是可以不经意的看到前后单词而想起对应的日语或中文,效果欠佳。所以花了半小时写了个功能,目的是把录入的几百个单词随机生成后写成另一个EXCEL文件。用来背单词。
//原EXCEL形式是
//A    B     C    D
//日文  中文   自    注释
public static void main(String[] args) {
  try {
   /* 测试读取(注意:文件路径中的盘符D:/,注意斜杠不要写成反斜杠"\") */
   // 如果不存在该文件,返回空并抛出异常
   File file = new File("D:/test.xls");
   List<Word> words= read(file);//读取EXCEL获得单词
   List<Word> randomWords= randomList(words);//获得打乱顺序的单词
    /* 测试写入(注意:如果进程中正在运行被写入的文件,将抛出异常) */
   // 如果不存在该文件,程序将新建一个同名文件
   write("D:/testRandom.xls", "Sheet1", 0,randomWords);
  } catch (Exception e) {
   System.out.println(e.getMessage());
  }
}
/**
  * 从LIST随机取出不重复元素,形成一个随机LIST
  * @param words
  * @return
  */
public static List<Word> randomList(List<Word> words){
  List<Word> randomList=new ArrayList<Word>();
  Map<Integer,String> map = new HashMap<Integer,String>();
  int num = words.size();
  for (int i = 0; i < num; i++) {
   int intnum = (int) (Math.random() * words.size());
   if (map.size() != 0) {
    for (int j = 0; j < map.size(); j++) {
     if (!map.containsKey(intnum)) {
      randomList.add(words.get(intnum));
      map.put(intnum, "");
     }
    }
    if (map.size() != words.size()) {
     num++;
    }
   } else {
    map.put(intnum, "");
    randomList.add(words.get(intnum));
   }
  }
  return randomList;
}
/**
  * 方法的返回类型是一个String,我定义了一个StringBuffer对象, 大家知道StringBuffer上的主要操作是 append 和
  * insert 方法,可以重载这些方法,以接受任意类型的数据。
  * 每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。 append
  * 方法始终将这些字符添加到缓冲区的末端,这样的话我们在接受返回值的时候就可以方便的取到被转换成String类型的数据了。
  * 首先我们通过传入的欲读取文件路径,获取工作簿对象,获取工作簿对象之后,我们就可以轻而易举的取到该工作簿内的所有的工作表了,
  * 我们声明一个工作表类型的数组:Sheet[] sheets = wb.getSheets()以便遍历得到每个工作表内的行数,之后就是行内的单元格,
  * 单元格再到单元格内的值,整个步骤都是按从大到小的顺利来的,可以说一气呵成,短短的几个循环,搞定。
  *
  */
/**
  * 读
  *
  * @param file
  *            欲读取的Excel文件的路径
  * @return
  * @throws Exception
  */
public static List<Word> read(File file) throws Exception {
  List<Word> words=new ArrayList<Word>();
  Workbook wb = null;
  try {
   // 获取工作簿对象
   wb = Workbook.getWorkbook(file);
   if (wb != null) {
    // 获取工作簿对象就可以获取工作簿内的工作表对象
    Sheet[] sheets = wb.getSheets();
    if (sheets != null && sheets.length != 0) {
     // 遍历工作簿内所有工作表
     for (int i = 0; i < sheets.length; i++) {
      Word word=null;
      // 获取该工作表内的行数
      int rows = sheets[i].getRows();
      // 遍历行
      for (int j = 0; j < rows; j++) {
       word=new Word();
       word.setIsZi(false);
       // 获取当前行的所有单元格
       Cell[] cells = sheets[i].getRow(j);
       if (cells != null && cells.length != 0) {
        // 遍历单元格
        for (int k = 0; k < cells.length; k++) {
         // 获取当前单元格的值
         String cell = cells[k].getContents();
         // 缩进
         if (k==0) {
          word.setJapanese(cell);
         }else if (k==1) {
          word.setChinese(cell);
         }else if (k==2) {
          if ("自".equals(cell)) {
           word.setIsZi(true);
          }
         }
        }
       }
       words.add(word);
      }
     
     }
    }
    System.out.println("成功读取了:" + file + "\n");
   }
  } catch (Exception e) {
   System.out.println(e.getMessage());
  } finally {
   wb.close();
  }
  return words;
}

/**
  * 我们看到在方法首行定义了一个WritableWorkbook 对象,WritableWorkbook 实际上就是一个写工作簿对象,
  * 同样我们要先获取一个工作簿,传入的文件路径,将欲读取的文件赋给WritableWorkbook 对象,这样我们就可以获取工作簿内的工作表了,
  * 得到工作表就好办了,我们通过调用WritableWorkbook 对象的createSheet()方法,传入工作表名和该表的所在位置,
  * 成功得到工作表后就开始在该工作表内添加表结构,这里我写的是五行五列,可以根据自己的实际要求改一下就OK,那么Label是一个什么东西呢?
  * Label实际上就是一个填充单元格的对象,通过指定的行和列及需要填充的内容,最后将被写入数据的单元格添加到工作表中就大功告成了。
  * 最后一步调用WritableWorkbook 的write()方法将写入内存的数据写入到文件即可。Over!!!
  */
/**
  * 写
  *
  * @param fileName
  *            被写入的Excel文件的路径
  * @param sheetName
  *            被写入的Excel文件的工作表
  * @param location
  *            被写入的Excel文件的工作表位于工作簿的位置
  * @throws Exception
  */
public static void write(String fileName, String sheetName, int location,List<Word> words)
   throws Exception {
  WritableWorkbook wwb = null;
  Label label = null;

  try {
   // 创建可写入的工作簿对象
   wwb = Workbook.createWorkbook(new File(fileName));
   if (wwb != null) {
    // 在工作簿里创建可写入的工作表,第一个参数为工作表名,第二个参数为该工作表的所在位置
    WritableSheet ws = wwb.createSheet(sheetName, location);
    if (ws != null) {
     /* 添加表结构 */
     // 行
     for (int i = 0; i < words.size(); i++) {
      // 列
      for (int j = 0; j < 4; j++) {
       Word word=words.get(i);
       // Label构造器中有三个参数,第一个为列,第二个为行,第三个则为单元格填充的内容
       if (j==0) {//写japanese
        label = new Label(j, i, word.getJapanese());
       }else if (j==1) {//写Chinese
        label = new Label(j, i, word.getChinese());
       }else if (j==2) {//写是否用于动词并只是自动词
        if (word.getIsZi()) {
         label = new Label(j, i,"自");
        }else {
         label = new Label(j, i,"");//必须要写,否则打开格式无效
        }
       }else if (j==3) {//写detail
        label = new Label(j, i, word.getDetail());
       }
       // 将被写入数据的单元格添加到工作表
       ws.addCell(label);
      }
     }
     // 从内存中写入到文件
     ws.setColumnView(1, 0);//隐藏中文列
     wwb.write();
    }
    System.out.println("路径为:" + fileName + "的工作簿写入数据成功!");
   }
  } catch (Exception e) {
   System.out.println(e.getMessage());
  } finally {
   wwb.close();
  }
}
}

分享到:
评论

相关推荐

    IELTS_雅思单词表_WORD_EXCEL_格式_方便手机阅读

    标题中的"IELTS_雅思单词表_WORD_EXCEL_格式_方便手机阅读"表明这是一个与雅思考试相关的资源,...同时,Excel的结构化特点可能有助于考生进行有计划的学习,例如设定每日学习目标,追踪进度,甚至自动生成随机测验。

    改善版: EXCEL-word単語学習 学习日语单词 自己写的excel vba 觉得不错 和大家一起分享

    标题中的“改善版:EXCEL-word単語学習 学习日语单词 自己写的excel vba 觉得不错 和大家一起分享”表明这是一个利用Excel VBA(Visual Basic for Applications)编程实现的日语单词学习工具的改进版本。作者通过VBA...

    winForm 单词练习

    这个程序的主要功能是读取Excel文件中的单词库,然后进行随机的单词测试,同时提供分数统计、正确答案显示以及通过率计算等学习反馈。 首先,我们需要了解winForm的基本概念。winForm是.NET Framework的一部分,它...

    Word Randomizer:单词的随机化器。-开源

    6. **导出功能**:用户可以将生成的随机单词列表导出为文本、Excel或其他格式,方便在其他平台上使用。 通过深入探索Word Randomizer的开源社区,用户不仅可以获得软件本身的支持,还能参与讨论、提交问题、提供...

    游戏随机名称昵称库(中英文)

    在游戏设计中,随机生成昵称可以确保每个新创建的角色或玩家账号都能拥有独一无二的名称,避免了重名的问题,同时也增加了游戏的趣味性和探索感。开发者可以集成这个库到游戏的命名系统中,通过编程方式实现随机选取...

    excel作的足球打字游戏

    1. **字母生成**:VBA脚本会随机生成一系列字母,模拟足球场上的“射门”目标。这些字母可能是单词的一部分,增加了游戏的挑战性。 2. **用户输入检测**:当玩家在键盘上敲击字母时,VBA会检测输入并判断是否正确,...

    Excel新增工具集

    (d)为满足不同用户要求,本软件可以不考虑男女生比例,仅按照成绩编班,还可以不考虑前若干名学生性别,仅考虑若干名之后学生的性别编班,也可以不按成绩随机分班;(e) 软件对编班结果冠以“准”字,目的是与正式编...

    Python每日一题.docx

    - **随机字符串生成**:对于生成激活码或优惠券,Python的`random`模块可以用来生成随机数字和字符,`string`模块提供各种字符集,结合它们可以创建独特且难以预测的字符串。 3. 数据存储: - **MySQL数据库操作*...

    PHP常用功能和资料

    这个文件可能包含如何创建随机图像验证码的代码,涉及到图像处理(GD库或Imagick扩展)、字符串生成与混淆技术、以及客户端和服务器端的验证逻辑。学习此功能可以帮助你增强网站的安全性。 2. **PHPExcel导出_...

    博大考神之十二年计算机应用能力考试PPT考试操作试题练习.pdf

    除此之外,文档中还包含了一系列看似随机的数字和英文单词,如“2012”、“5311”、“ZxrdSoft”、“Wingdings”等。这些内容单独看起来并没有实际意义,但它们可能是在演示文稿中使用的特定元素,如页码、文本内容...

    Leetcode-CodewarsQuestions:Leetcode&Codewars问题

    Leetcode-Codewars问题 ...随机数组缺少编号对称树爬楼梯子集键盘行字符串III中的反向单词构造矩形加一个有效数独基本计算器II 加油站编码和解码TinyURL 查找阵列中的所有重复项替换单词两个链接列表的交点单词

    Python统计文本词汇出现次数的实例代码

    或者,我们可能需要生成随机字符串序列,这可以通过`random`和`string`库实现: ```python import string, random def getRandom(length): return ''.join(random.choices(string.ascii_letters + string.digits,...

    word2vec英文文本分类实战

    - 在训练过程中,word2vec使用大量文本数据,如新闻组、书籍或维基百科,通过随机游走策略生成词对,然后用负样本采样等优化方法(如Hierarchical Softmax或Negative Sampling)更新权重。 3. **向量表示**: - ...

    python使用Word2Vec进行情感分析解析

    4. 特征向量构建:根据训练好的Word2Vec模型生成评论的特征向量。 5. 模型训练:使用SVM或其他机器学习算法对特征向量进行情感分类。 6. 评估模型:在测试集上评估模型的性能。 通过这样的流程,我们可以构建一个...

    python小项目练习

    - **猜数字游戏**:编写一个程序让用户猜一个随机生成的数字,通过不断提示过高或过低来引导用户,这会用到随机数生成和循环结构。 - **日历应用**:实现一个能显示当前日期或任意日期的日历功能,需要用到Python...

    山东省潍坊市2015_2016学年高一英语上学期期中试题扫描版无答案

    很抱歉,但根据您提供的信息,这似乎是一个高中英语期中考试的题目列表,并非具体的IT知识内容。如果这是您需要分析和解释的文件内容,那么我们可能需要更详细的试题或上下文来生成相关的IT知识。然而,考虑到标签为...

    2021-2022计算机二级等级考试试题及答案No.4554.docx

    19. 随机数生成:Random对象可以生成int和double类型的随机数。选项D是正确的。 20. 列表框和组合框操作:Cls是清屏命令,不属于列表框和组合框的方法。AddItem和RemoveItem分别是添加和移除项的方法。选项A是正确...

    计算机基础试题一.pdf

    20. 启动Excel后,会自动生成一个名为Book1的工作簿,扩展名可能是.xlsx。 21. Excel单元格的高度和宽度可以自由调整,以适应数据需求。 22. 输入纯数字文本时,需要先输入一个单引号,Excel才会将其识别为文本。 ...

    精品资料(2021-2022年收藏的)第二场考试题答案.doc

    11. **Word2000自动生成目录**:在Word2000中,要自动生成目录,通常需要使用标题样式,这样Word可以根据标题层级自动创建目录。 12. **Windows中的Backup Operators组**:Backup Operators组成员有权限备份和恢复...

Global site tag (gtag.js) - Google Analytics