700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 有选择读取word表格中的数据并写入excel文件中

有选择读取word表格中的数据并写入excel文件中

时间:2019-04-22 20:11:00

相关推荐

有选择读取word表格中的数据并写入excel文件中

最近学院要举行科技报告会活动,许多同学积极参与,交了许多报名表到我这里,而我需要将这些信息进行汇总,整理出一个excel表格,看着一个个word文件放在我的工作文件夹中头发发麻,这一个个的整理好麻烦,不但速度慢而且容易出错,我就想用编程自动替我读取数据并写入目标文件。结果还真让我写成了,下面一一讲解步骤:

问题描述:如下图所示,我需要提取姓名、学号、合作者、学院及专业、联系方式、指导老师、参选题目这几栏的信息。

步骤一:下载POI插件

POI:下载地址;我所使用的是poi-3.10-FINAL。建好java工程后右键点击,选择配置选项,按照下面图片步骤。

使用方法

代码解释

package readInformation;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;import java.util.List;import org.apache.poi.POIXMLProperties.CoreProperties;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFRow;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.hwpf.HWPFDocument;import org.apache.poi.hwpf.usermodel.Paragraph;import org.apache.poi.hwpf.usermodel.Range;import org.apache.poi.hwpf.usermodel.Table;import org.apache.poi.hwpf.usermodel.TableCell;import org.apache.poi.hwpf.usermodel.TableIterator;import org.apache.poi.hwpf.usermodel.TableRow;import org.apache.poi.poifs.filesystem.POIFSFileSystem;import org.apache.poi.xwpf.extractor.XWPFWordExtractor;import org.apache.poi.xwpf.usermodel.XWPFDocument;import org.apache.poi.xwpf.usermodel.XWPFTable;import org.apache.poi.xwpf.usermodel.XWPFTableCell;import org.apache.poi.xwpf.usermodel.XWPFTableRow;/** function:读取参赛作品登记表中的姓名、学号、联系方式、专业、合作者、参选题目、指导老师* * * 使用这段代码需要两个前提条件:* 1:加载poi-3.10-FINAL文件夹中的jar扩展包* 2:word版本必须在以上,格式和样本一样* 这两步可以看使用手册*/public class readFile {private static FileOutputStream out = null ;private static FileInputStream in = null ;private static String filePathDir = "C:\\Users\\wangjunzuo\\Desktop\\ll"; //word文件存放的文件夹 绝对路径public static HSSFWorkbook workbook = null;/** 进行文件的第一行便签写入,就是excel文件的第一行:姓名、学号、联系方式等等*/public static void creatLables(String[] labels,String worksheet) throws IOException {out = new FileOutputStream("result.xls"); workbook = new HSSFWorkbook();HSSFSheet sheet1 = workbook.createSheet(worksheet); HSSFRow rw = workbook.getSheet(worksheet).createRow(0);for(int i=0;i<labels.length;i++) {HSSFCell ce = rw.createCell(i); ce.setCellValue(labels[i]); }workbook.write(out);}/** 进行数据读取病写入文件中,采用的思路是将一个word文件中的内容用一个链表存储,链表的长度等于表格的格数* 然后再使用一个链表将每个文件对应的链表添加到里面,可以看成二维数组形式* 只要知道我们想要word文件中的那个单元内容,找到该单元对应的下标进行读取就行*/public static void writeToXls(String worksheet) throws IOException {ArrayList<ArrayList<String> > people = new ArrayList() ;FileOutputStream out = new FileOutputStream("result.xls"); //结果输出文件名File file = new File(filePathDir);File[] files = file.listFiles(); //获取文件夹下word文件名列表for(File a:files) {System.out.println(a.toString());in = new FileInputStream(a); //依次读入每一个word文件XWPFDocument doc = new XWPFDocument(in);List<XWPFTable> tables = doc.getTables();for (XWPFTable table : tables) {List<XWPFTableRow> rows = table.getRows(); // 获取表格的行ArrayList<String> single = new ArrayList(); //储存每一表格的所有单元信息for (XWPFTableRow row : rows) {List<XWPFTableCell> tableCells = row.getTableCells();for (XWPFTableCell cell : tableCells) {String text = cell.getText();single.add(text);}//end for}//end forpeople.add(single);}//end for}for(int i=0;i<people.size();i++) {/**这段代码用于检测自己想要单元的下标是否和计算机计算的一样 **for(int j=0;j<people.get(i).size();j++){System.out.println(people.get(i).get(j)+i+ " "+ j);}*/HSSFRow rw = workbook.getSheet(worksheet).createRow(i+1);/** 由表格得知我们想要的数据分别为第1、11、5、9、7、17、13下标的内容* 下面代码创建一行,在该行上创建7个单元格,分别对应姓名、学号等*/HSSFCell ce = null;for(int k = 0 ; k < index.length;k++){ce = rw.createCell(k); ce.setCellValue(people.get(i).get(index[k]));}workbook.write(out); }public static void main(String[] args) throws IOException {String[] label= {"姓名","学号","联系方式","专业","合作者","参赛题目","指导老师"};int index[] ={1、11、5、9、7、17、13};creatLables(label,"信息汇总");writeToXls("信息汇总");in.close();out.close();}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。