JAVA实现对excel表格中的文本进行批量检索,并将检索结果保存到excel表格中

因业务要求,时常需要对excel表中的某些文本信息进行批量检索,并将检索结果复制下来保存到另外一个excel表中。

这里使用java.awt中的robot类实现对检索人物的模拟,实现复制、粘贴、检索等操作;同时利用POI实现对excel表的读写操作;利用Datatransfer实现对系统剪贴板的访问。具体实现代码如下:
使用前需要下载POI相对应的jar包,我使用的是4.1版本,测试代码的搜索引擎使用的是百度。(实际业务中使用一般是某些第三方检索信息网站,对于鼠标定位会更加准确,不会出现百度这样由于搜索结果中的文本长短不一,导致复制的文本不全。)操作表格需要使用xls格式。

import java.awt.Desktop;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
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;

public class Geturl {
	/**
	 * 定义机器人进行组合键操作(需要往搜索框复制黏贴)
	 * @param r
	 * @param key
	 */
	public static void keyCtrl(Robot r,int key) {
		r.keyPress(KeyEvent.VK_CONTROL);
		r.keyPress(key);
		r.keyRelease(KeyEvent.VK_CONTROL);
		r.keyRelease(key);
		r.delay(100);
	}
	private static final String EXCEL_XLS="xls";
	private static final String EXCEL_XLSX="xlsx";
	/**
	 * 判断excel的版本,获取workbook
	 * 
	 */
	public static Workbook getWorkbook(InputStream in,File file)throws IOException{
		Workbook wb=null;
		if(file.getName().endsWith(EXCEL_XLS)) {
			wb=new HSSFWorkbook(in);
		}else if(file.getName().endsWith(EXCEL_XLSX)) {
			wb=new XSSFWorkbook(in);
		}
		return wb;
	}

	/**
	 * 判断文件是否是excel
	 */
	public static void checkExcelValid(File file)throws Exception{
		if(!file.exists()) {
			throw new Exception("文件不存在!");
		}
		if(!(file.isFile()&&(file.getName().endsWith(EXCEL_XLS)||file.getName().endsWith(EXCEL_XLSX)))) {
			throw new Exception("文件不是Excel");
		}	}

	public static void main(String[] args) {
		try {
			File excelFile=new File("C:\\Users\\pt0521\\Desktop\\test.xls");
			FileInputStream in=new FileInputStream(excelFile);
			File excelFile2=new File("C:\\Users\\pt0521\\Desktop\\test4.xls");
			FileOutputStream out=new FileOutputStream(excelFile2);
			Workbook workbook2=new HSSFWorkbook();
			Sheet sheet_new=workbook2.createSheet();
			checkExcelValid(excelFile);
			Workbook workbook=getWorkbook(in,excelFile);			
			Desktop desktop=Desktop.getDesktop();
			desktop.browse(new URI("http://www.baidu.com/"));
			Robot robot =new Robot();
			robot.delay(2000);
			robot.mouseMove(500, 315);
			robot.delay(1000);
			robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
			robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
			
			/*
			 * 遍历第一个sheet
			 */
			Sheet sheet=workbook.getSheetAt(0);
			String content;
			int end = sheet.getLastRowNum()+1;
			System.out.println("总共有"+end+"个单元格。");
			for (int i = 0; i < end; i++) {
				Row row=sheet.getRow(i);
				Cell cell=row.getCell(0);
				Row row_new=sheet_new.createRow(i);
				Cell cell2=row_new.createCell(0);
				try {
					if(cell.getStringCellValue().toString().equals(" ")) {
						System.out.println("没有数据");
					}
					else {
						content=cell.getStringCellValue();
						System.out.println(content);
						Clipboard clipborad=Toolkit.getDefaultToolkit().getSystemClipboard();
						StringSelection selection=new StringSelection(content);
						//将文本添加到剪切板中
						clipborad.setContents(selection,null);
						//复制到搜索框
						keyCtrl(robot,KeyEvent.VK_V);
						//按下回车进行检索
						robot.keyPress(KeyEvent.VK_ENTER);
						robot.keyRelease(KeyEvent.VK_ENTER);
						
						robot.keyPress(KeyEvent.VK_ENTER);
						robot.keyRelease(KeyEvent.VK_ENTER);
						/*
						 * 将搜索数据复制下来
						 */
						robot.delay(6000);
						robot.mouseMove(100,250);
						robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
						robot.mouseMove(300,250);
						robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);						
						keyCtrl(robot,KeyEvent.VK_C);//复制数据
						content=(String)clipborad.getContents(null).getTransferData(DataFlavor.stringFlavor);
						System.out.println(content);
						
						cell2.setCellValue(content);
						clipborad.setContents(selection,null);
						robot.delay(6000);
					}
				
					robot.mouseMove(200, 125);
					
					robot.delay(1000);
					robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
					robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
					robot.delay(3000);
					
					keyCtrl(robot,KeyEvent.VK_A);
					robot.keyPress(KeyEvent.VK_DELETE);
					robot.keyRelease(KeyEvent.VK_DELETE);
					robot.delay(3000);
					
					
				}catch(Exception e) {
					e.printStackTrace();
				}
				workbook2.write(out);
				workbook2.close();
			}
			
		}catch(Exception e) {
			e.printStackTrace();
		}
	}

}

 

你可能感兴趣的:(java,JAVA,批量检索,POI,EXCEL操作)