java读写excel表
使用java读取excel有多种方式,可以使用jxl解析,也可以用poi解析,由于jxl比较早,对现在2007版及以后的excel不支持,关于jxl的使用可以参考博文: http://hlhpyasd.iteye.com/blog/865865
poi支持xls/xlsx版本的excel,poi的API 与实际使用中的Excel很类似,可以说是POI把Excel中的workbook、sheet、cell等对象化了,在实际使用中极易理解。
Apache POI 各个包功能描述:
HSSF -提供读写Microsoft Excel XLS格式档案的功能。
XSSF -提供读写Microsoft Excel OOXML XLSX格式档案的功能。
HWPF -提供读写Microsoft Word DOC格式档案的功能。
HSLF -提供读写Microsoft PowerPoint格式档案的功能。
HDGF -提供读Microsoft Visio格式档案的功能。
HPBF -提供读Microsoft Publisher格式档案的功能。
HSMF -提供读Microsoft Outlook格式档案的功能。
导包:核心jar
下面的示例中用的了:commons-lang3-3.1.jar
demo下载地址:http://pan.baidu.com/s/1ntVdtyT
下面是简单的读取excel表数据的使用代码:
package com.supresoft.util; import java.io.FileInputStream; import java.io.IOException; import java.text.SimpleDateFormat; import org.apache.commons.lang3.StringUtils; import org.apache.poi.hssf.usermodel.HSSFDateUtil; 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 Test { public static final Workbook createWb(String filePath) throws IOException { if(StringUtils.isBlank(filePath)) { throw new IllegalArgumentException("参数错误!!!") ; } if(filePath.trim().toLowerCase().endsWith("xls")) { return new HSSFWorkbook(new FileInputStream(filePath)) ; } else if(filePath.trim().toLowerCase().endsWith("xlsx")) { return new XSSFWorkbook(new FileInputStream(filePath)) ; } else { throw new IllegalArgumentException("不支持除:xls/xlsx以外的文件格式!!!") ; } } public static final Sheet getSheet(Workbook wb ,String sheetName) { return wb.getSheet(sheetName) ; } public static final Sheet getSheet(Workbook wb ,int index) { return wb.getSheetAt(index) ; } public static final String getValueFromCell(Cell cell) { if(cell == null) { System.out.println("Cell:null") ; return null ; } String value = null ; switch(cell.getCellType()) { case Cell.CELL_TYPE_NUMERIC : // 数字 if(HSSFDateUtil.isCellDateFormatted(cell)) { // 如果是日期类型 value = new SimpleDateFormat("yyyy-MM-dd").format(cell.getDateCellValue()) ; } else value = String.valueOf(cell.getNumericCellValue()) ; break ; case Cell.CELL_TYPE_STRING: // 字符串 value = cell.getStringCellValue() ; break ; case Cell.CELL_TYPE_FORMULA: // 公式 // 用数字方式获取公式结果,根据值判断是否为日期类型 double numericValue = cell.getNumericCellValue() ; if(HSSFDateUtil.isValidExcelDate(numericValue)) { // 如果是日期类型 value = new SimpleDateFormat("yyyy-MM-dd").format(cell.getDateCellValue()) ; } else value = String.valueOf(numericValue) ; break ; case Cell.CELL_TYPE_BLANK: // 空白 value = ""; break ; case Cell.CELL_TYPE_BOOLEAN: // Boolean value = String.valueOf(cell.getBooleanCellValue()) ; break ; case Cell.CELL_TYPE_ERROR: // Error,返回错误码 value = String.valueOf(cell.getErrorCellValue()) ; break ; default:value = StringUtils.EMPTY ;break ; } return value; } //测试 public static void main(String[] args) { //File file = new File("C:/Users/Administrator/Desktop"); try { Workbook wb = Test.createWb("C:/Users/Administrator/Desktop/工序数据.xlsx"); Sheet st = Test.getSheet(wb, 0); for(int i=st.getFirstRowNum();i<=st.getLastRowNum();i++){ Row r = st.getRow(i); if(r!=null){ for(int j=r.getFirstCellNum();j<=r.getLastCellNum();j++){ Cell c = r.getCell(j); if(c!=null){ String m = Test.getValueFromCell(c); System.out.print(m+"\t\t"); } } System.out.println(); } } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
下面是简单写excel表代码
package com.supre.util; import java.io.File; import java.io.FileOutputStream; import java.util.Date; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFDataFormat; import org.apache.poi.hssf.usermodel.HSSFFont; import org.apache.poi.hssf.usermodel.HSSFHyperlink; 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.hssf.util.CellRangeAddress; import org.apache.poi.hssf.util.HSSFColor; public class TestWrite { /** * @param args */ public static void main(String[] args) throws Exception { // 创建Excel的工作书册 Workbook,对应到一个excel文档 HSSFWorkbook wb = new HSSFWorkbook(); // 创建Excel的工作sheet,对应到一个excel文档的tab HSSFSheet sheet = wb.createSheet("sheet1"); // 设置excel每列宽度 sheet.setColumnWidth(0, 4000); sheet.setColumnWidth(1, 3500); // 创建字体样式 HSSFFont font = wb.createFont(); font.setFontName("Verdana"); font.setBoldweight((short) 100); font.setFontHeight((short) 300); font.setColor(HSSFColor.BLUE.index); // 创建单元格样式 HSSFCellStyle style = wb.createCellStyle(); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); style.setFillForegroundColor(HSSFColor.LIGHT_TURQUOISE.index); style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); // 设置边框 style.setBottomBorderColor(HSSFColor.RED.index); style.setBorderBottom(HSSFCellStyle.BORDER_THIN); style.setBorderLeft(HSSFCellStyle.BORDER_THIN); style.setBorderRight(HSSFCellStyle.BORDER_THIN); style.setBorderTop(HSSFCellStyle.BORDER_THIN); style.setFont(font);// 设置字体 // 创建Excel的sheet的一行 HSSFRow row = sheet.createRow(0); row.setHeight((short) 500);// 设定行的高度 // 创建一个Excel的单元格 HSSFCell cell = row.createCell(0); // 合并单元格(startRow,endRow,startColumn,endColumn) sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 2)); // 给Excel的单元格设置样式和赋值 cell.setCellStyle(style); cell.setCellValue("hello world"); // 设置单元格内容格式 HSSFCellStyle style1 = wb.createCellStyle(); style1.setDataFormat(HSSFDataFormat.getBuiltinFormat("h:mm:ss")); style1.setWrapText(true);// 自动换行 row = sheet.createRow(1); // 设置单元格的样式格式 cell = row.createCell(0); cell.setCellStyle(style1); cell.setCellValue(new Date()); // 创建超链接 HSSFHyperlink link = new HSSFHyperlink(HSSFHyperlink.LINK_URL); link.setAddress("http://www.baidu.com"); cell = row.createCell(1); cell.setCellValue("百度"); cell.setHyperlink(link);// 设定单元格的链接 File file = new File("d:\\workbook.xls"); if(!file.exists()){ file.createNewFile(); } FileOutputStream os = new FileOutputStream(file); wb.write(os); os.close(); } }
参考博文:http://www.cnblogs.com/ryb/archive/2013/01/24/2875154.html