package excel; public class BookVO { public String bookName; public String bookAuthor; public String bookPrice; public String bookConcern; public String getBookName() { return bookName; } public void setBookName(String bookName) { this.bookName = bookName; } public String getBookAuthor() { return bookAuthor; } public void setBookAuthor(String bookAuthor) { this.bookAuthor = bookAuthor; } public String getBookPrice() { return bookPrice; } public void setBookPrice(String bookPrice) { this.bookPrice = bookPrice; } public String getBookConcern() { return bookConcern; } public void setBookConcern(String bookConcern) { this.bookConcern = bookConcern; } }
生成excel文件:
package excel; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import jxl.Workbook; import jxl.write.Label; import jxl.write.WritableImage; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.write.WriteException; import jxl.write.biff.RowsExceededException; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; 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.poifs.filesystem.POIFSFileSystem; /** * 生成excel文件 * @author lizhiyong * @version $Id: ExcelOpt.java, v 0.1 2014年8月5日 上午11:43:27 Exp $ */ public class ExcelOpt { /** * 生成一个Excel文件 jxl * @param fileName 要生成的Excel文件名 * @jxl.jar 版本:2.6 */ public static void writeExcel(String fileName) { WritableWorkbook wwb = null; try { //首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象 wwb = Workbook.createWorkbook(new File(fileName)); } catch (IOException e) { e.printStackTrace(); } if (wwb != null) { //创建一个可写入的工作表 //Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置 WritableSheet ws = wwb.createSheet("工作表名称", 0); //下面开始添加单元格 for (int i = 0; i < 10; i++) { for (int j = 0; j < 5; j++) { //这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行 Label labelC = new Label(j, i, "这是第" + (i + 1) + "行,第" + (j + 1) + "列"); try { //将生成的单元格添加到工作表中 ws.addCell(labelC); } catch (RowsExceededException e) { e.printStackTrace(); } catch (WriteException e) { e.printStackTrace(); } } } try { //从内存中写入文件中 wwb.write(); //关闭资源,释放内存 wwb.close(); } catch (IOException e) { e.printStackTrace(); } catch (WriteException e) { e.printStackTrace(); } } } /** * 生成一个Excel文件POI * @param inputFile 输入模板文件路径 * @param outputFile 输入文件存放于服务器路径 * @param dataList 待导出数据 * @throws Exception * @roseuid: */ @SuppressWarnings({ "rawtypes", "deprecation" }) public static void exportExcelFile(String inputFile, String outputFile, List dataList) throws Exception { //用模板文件构造poi POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(inputFile)); //创建模板工作表 HSSFWorkbook templatewb = new HSSFWorkbook(fs); //直接取模板第一个sheet对象 HSSFSheet templateSheet = templatewb.getSheetAt(1); //得到模板的第一个sheet的第一行对象 为了得到模板样式 HSSFRow templateRow = templateSheet.getRow(0); //HSSFSheet timplateSheet = templatewb.getSheetAt(1); //取得Excel文件的总列数 int columns = templateSheet.getRow((short) 0).getPhysicalNumberOfCells(); // Debug.println("columns is : " + columns); //========================= //创建样式数组 HSSFCellStyle styleArray[] = new HSSFCellStyle[columns]; //一次性创建所有列的样式放在数组里 for (int s = 0; s < columns; s++) { //得到数组实例 styleArray[s] = templatewb.createCellStyle(); } //循环对每一个单元格进行赋值 //定位行 for (int rowId = 1; rowId < dataList.size(); rowId++) { //依次取第rowId行数据 每一个数据是valueList List valueList = (List) dataList.get(rowId - 1); //定位列 for (int columnId = 0; columnId < columns; columnId++) { //依次取出对应与colunmId列的值 //每一个单元格的值 String dataValue = (String) valueList.get(columnId); //取出colunmId列的的style //模板每一列的样式 HSSFCellStyle style = styleArray[columnId]; //取模板第colunmId列的单元格对象 //模板单元格对象 HSSFCell templateCell = templateRow.getCell((short) columnId); //创建一个新的rowId行 行对象 //新建的行对象 HSSFRow hssfRow = templateSheet.createRow(rowId); //创建新的rowId行 columnId列 单元格对象 //新建的单元格对象 HSSFCell cell = hssfRow.createCell((short) columnId); //如果对应的模板单元格 样式为非锁定 if (templateCell.getCellStyle().getLocked() == false) { //设置此列style为非锁定 style.setLocked(false); //设置到新的单元格上 cell.setCellStyle(style); } //否则样式为锁定 else { //设置此列style为锁定 style.setLocked(true); //设置到新单元格上 cell.setCellStyle(style); } //设置编码 cell.setEncoding(HSSFCell.ENCODING_UTF_16); //Debug.println("dataValue : " + dataValue); //设置值 统一为String cell.setCellValue(dataValue); } } //设置输入流 FileOutputStream fOut = new FileOutputStream(outputFile); //将模板的内容写到输出文件上 templatewb.write(fOut); fOut.flush(); //操作结束,关闭文件 fOut.close(); } /** * 生成数据为XLS格式 * @param filePath 生成Excel文件Path * @param dataList 要导入的数据 */ @SuppressWarnings("rawtypes") public static void writeExcelBo(String filePath, List dataList) { WritableWorkbook wwb = null; try { wwb = Workbook.createWorkbook(new File(filePath)); WritableSheet ws = wwb.createSheet("上市新书", 10); ws.addCell(new jxl.write.Label(0, 1, "书名")); ws.addCell(new jxl.write.Label(1, 1, "作者")); ws.addCell(new jxl.write.Label(2, 1, "定价")); ws.addCell(new jxl.write.Label(3, 1, "出版社")); int bookSize = dataList.size(); BookVO book = new BookVO(); for (int i = 0; i < bookSize; i++) { book = (BookVO) dataList.get(i); ws.addCell(new jxl.write.Label(0, i + 2, "" + book.getBookName())); ws.addCell(new jxl.write.Label(1, i + 2, book.getBookAuthor())); ws.addCell(new jxl.write.Label(2, i + 2, "" + book.getBookPrice())); ws.addCell(new jxl.write.Label(3, i + 2, book.getBookConcern())); } // jxl.write.WritableFont wfc= //new jxl.write.WritableFont(WritableFont.ARIAL,255,WritableFont.BOLD,false,UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.BLACK); //jxl.write.WritableCellFormat wcfFC= new jxl.write.WritableCellFormat(wfc); ws.addCell(new jxl.write.Label(0, 0, "2007年07月即将上市新书!")); wwb.write(); // 关闭Excel工作薄对象 wwb.close(); } catch (IOException e) { } catch (RowsExceededException e) { } catch (WriteException e) { } } /**往Excel中插入图片 * @param dataSheet 待插入的工作表 * @param col 图片从该列开始 * @param row 图片从该行开始 * @param width 图片所占的列数 * @param height 图片所占的行数 * @param imgFile 要插入的图片文件 */ public static void insertImg(WritableSheet dataSheet, int col, int row, int width, int height, File imgFile) { WritableImage img = new WritableImage(col, row, width, height, imgFile); dataSheet.addImage(img); } /** * 往Excel中插入图片 * @param file * @throws IOException * @throws WriteException */ public static boolean insertImg(String filePath,String imgPath) throws IOException, WriteException { try { //创建一个工作薄 WritableWorkbook workbook = Workbook.createWorkbook(new File(filePath)); //待插入的工作表 WritableSheet imgSheet = workbook.createSheet("Images", 0); //要插入的图片文件 File imgFile = new File(imgPath); //图片插入到第二行第一个单元格,长宽各占六个单元格 insertImg(imgSheet, 0, 1, 6, 6, imgFile); workbook.write(); workbook.close(); return true; } catch (IOException e) { throw e; } catch (WriteException e) { throw e; } } @SuppressWarnings({ "rawtypes", "unchecked" }) public static void main(String[] args) throws WriteException, IOException { writeExcel("c:\\Test测试Excel.xls"); System.out.println("OK"); ArrayList list = new ArrayList(); for (int i = 0; i < 10; i++) { BookVO book = new BookVO(); book.setBookName("WebWork in action+" + i); book.setBookAuthor("唐勇+" + i); book.setBookPrice("39元+" + i); book.setBookConcern("飞思科技+" + i); list.add(book); } writeExcelBo("c:\\上市新书.xls", list); System.err.println("Book OK!!!"); //System.out.println(insertImg("c:\\上市新书.xls","C:\\2.png")); } }
package excel; import java.io.File; import java.io.IOException; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import jxl.read.biff.BiffException; /** * 解析excel文件 * @author lizhiyong * @version $Id: ReadExcel.java, v 0.1 2014年8月5日 上午11:43:44 Exp $ */ public class ReadExcel { /**读取Excel文件的内容 * @param file 待读取的文件 * @return */ public static String readExcel(File file) { StringBuffer sb = new StringBuffer(); Workbook wb = null; try { //构造Workbook(工作薄)对象 wb = Workbook.getWorkbook(file); } catch (BiffException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } if (wb == null) return null; //获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了 Sheet[] sheet = wb.getSheets(); if (sheet != null && sheet.length > 0) { //对每个工作表进行循环 for (int i = 0; i < sheet.length; i++) { //得到当前工作表的行数 int rowNum = sheet[i].getRows(); for (int j = 0; j < rowNum; j++) { //得到当前行的所有单元格 Cell[] cells = sheet[i].getRow(j); if (cells != null && cells.length > 0) { //对每个单元格进行循环 for (int k = 0; k < cells.length; k++) { //读取当前单元格的值 String cellValue = cells[k].getContents(); sb.append(cellValue + "\t"); } } sb.append("\r\n"); } sb.append("\r\n"); } } //最后关闭资源,释放内存 wb.close(); return sb.toString(); } /**搜索某一个文件中是否包含某个关键字 * @param file 待搜索的文件 * @param keyWord 要搜索的关键字 * @return */ public static boolean searchKeyWord(File file, String keyWord) { boolean res = false; Workbook wb = null; try { //构造Workbook(工作薄)对象 wb = Workbook.getWorkbook(file); } catch (BiffException e) { return res; } catch (IOException e) { return res; } if (wb == null) { return res; } //获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了 Sheet[] sheet = wb.getSheets(); boolean breakSheet = false; if (sheet != null && sheet.length > 0) { //对每个工作表进行循环 for (int i = 0; i < sheet.length; i++) { if (breakSheet) { break; } //得到当前工作表的行数 int rowNum = sheet[i].getRows(); boolean breakRow = false; for (int j = 0; j < rowNum; j++) { if (breakRow) { break; } //得到当前行的所有单元格 Cell[] cells = sheet[i].getRow(j); if (cells != null && cells.length > 0) { boolean breakCell = false; //对每个单元格进行循环 for (int k = 0; k < cells.length; k++) { if (breakCell) { break; } //读取当前单元格的值 String cellValue = cells[k].getContents(); if (cellValue == null) { continue; } if (cellValue.contains(keyWord)) { res = true; breakCell = true; breakRow = true; breakSheet = true; } } } } } } //最后关闭资源,释放内存 wb.close(); return res; } public static void main(String[] a) { String filePath = "c:\\上市新书.xls"; File file = new File(filePath); System.out.println(readExcel(file)); System.out.println(searchKeyWord(file,"出版社32")); } }
原文:http://blog.csdn.net/xuxu198899223/article/details/38384125