Java读写Excel文件DEMO
下载一定格式的Excel文件:
@RequestMapping("/xxxx/xxxx/xxxx/copyfiledownload") @ResponseBody public void copyfiledownload(HttpServletRequest request, HttpServletResponse response, Model model) throws Exception{ response.setContentType("text/html; charset=GBK"); String basePath = request.getSession().getServletContext().getRealPath("/"); File file = new File(basePath + "xxxx.xls"); FileOutputStream fos=new FileOutputStream(file); HSSFWorkbook wb=new HSSFWorkbook(); HSSFSheet sheet=wb.createSheet(); wb.setSheetName(0, "sheet0"); HSSFRow row=null; HSSFCell cell=null; row=sheet.createRow(0); cell=row.createCell(0); cell.setCellValue("xxID"); cell=row.createCell(1); cell.setCellValue("每ID的总限量"); cell=row.createCell(2); cell.setCellValue("每用户对此ID最大购买量"); cell=row.createCell(3); cell.setCellValue("xx售卖价格"); cell=row.createCell(4); cell.setCellValue("S时间"); cell=row.createCell(5); cell.setCellValue("X时间"); CellStyle cellStyle = wb.createCellStyle(); CreationHelper helperDate = wb.getCreationHelper(); cellStyle.setDataFormat(helperDate.createDataFormat().getFormat("yy/mm/dd/ hh:mm:ss")); HSSFRow rowD=null; HSSFCell cellD=null; for (int i = 1; i < 1000; i++) { rowD=sheet.createRow(i); cellD=rowD.createCell(4); cellD.setCellStyle(cellStyle); cellD=rowD.createCell(5); cellD.setCellStyle(cellStyle); } // 设置时间格式 cell=row.createCell(6); cell.setCellValue("xx平台"); //CellRangeAddressList(firstRow, lastRow, firstCol, lastCol)设置行列范围 CellRangeAddressList addressList = new CellRangeAddressList(1, 1000, 6, 6); String[] pos = {"PC","WAP","APP","PC+WAP","PC+APP","WAP+APP","PC+WAP+APP"}; DataValidationHelper helper = sheet.getDataValidationHelper(); DataValidationConstraint constraint = helper.createExplicitListConstraint(pos); DataValidation dataValidation = helper.createValidation(constraint, addressList); if(dataValidation instanceof XSSFDataValidation) { dataValidation.setSuppressDropDownArrow(true); dataValidation.setShowErrorBox(true); }else { dataValidation.setSuppressDropDownArrow(false); } sheet.addValidationData(dataValidation); wb.write(fos); fos.close(); response.setContentType("application/x-msdownload"); response.setContentLength((int) file.length()); response.setHeader("Content-Disposition", "attachment;filename=" + new String(file.getName().getBytes("gbk"), "iso-8859-1")); FileInputStream fis = new FileInputStream(file); BufferedInputStream buff = new BufferedInputStream(fis); byte[] b = new byte[1024]; long k = 0; OutputStream myout = response.getOutputStream(); while (k < file.length()) { int j = buff.read(b, 0, 1024); k += j; myout.write(b, 0, j); } myout.flush(); buff.close(); fis.close(); myout.close(); file.delete(); }
Excel文件读取:
/** * 读取excel表头 * * @param file * @return * @throws IOException */ @SuppressWarnings("unused") private String[] readExcelHead(File file) throws IOException { HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(file)); HSSFSheet sheet = wb.getSheetAt(0); HSSFRow row = null; HSSFCell cell = null; row = sheet.getRow(0); String[] buff = new String[row.getLastCellNum()]; for (int i = row.getFirstCellNum(); i < row.getLastCellNum(); i++) { cell = row.getCell(i); buff[i] = cell.getStringCellValue(); } return buff; }
/** * 读取2003excel * * @param file * @return */ private List<List<Object>> read2003Excel(File file) throws IOException { List<List<Object>> dataList = new ArrayList<List<Object>>(); HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(file)); HSSFSheet sheet = wb.getSheetAt(0); HSSFRow row = null; HSSFCell cell = null; Object val = null; DecimalFormat df = new DecimalFormat("0");// 格式化数字 DecimalFormat df2 = new DecimalFormat("#0.00");// 格式化小数 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 格式化日期字符串 for (int i = sheet.getFirstRowNum() + 1; i < sheet.getPhysicalNumberOfRows(); i++) { row = sheet.getRow(i); if (row == null) { continue; } List<Object> objList = new ArrayList<Object>(); for (int j = row.getFirstCellNum(); j < row.getLastCellNum(); j++) { cell = row.getCell(j); if (cell == null) { val = null; objList.add(val); continue; } switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_STRING: val = cell.getStringCellValue(); break; case HSSFCell.CELL_TYPE_NUMERIC: if ("@".equals(cell.getCellStyle().getDataFormatString())) { if (j == 3) { val = df2.format(cell.getNumericCellValue()); } else { val = df.format(cell.getNumericCellValue()); } } else if ("General".equals(cell.getCellStyle().getDataFormatString())) { if (j == 3) { val = df2.format(cell.getNumericCellValue()); } else { val = df.format(cell.getNumericCellValue()); } } else { val = sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue())); } break; case HSSFCell.CELL_TYPE_BOOLEAN: val = cell.getBooleanCellValue(); break; case HSSFCell.CELL_TYPE_BLANK: val = ""; break; default: val = cell.toString(); break; } objList.add(val); } dataList.add(objList); } return dataList; }
/** * 读取2007excel * * @param file * @return */ private List<List<Object>> read2007Excel(File file) throws IOException { List<List<Object>> dataList = new ArrayList<List<Object>>(); XSSFWorkbook xwb = new XSSFWorkbook(new FileInputStream(file)); XSSFSheet sheet = xwb.getSheetAt(0); XSSFRow row = null; XSSFCell cell = null; Object val = null; DecimalFormat df = new DecimalFormat("0");// 格式化数字 DecimalFormat df2 = new DecimalFormat("#0.00");// 格式化小数 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 格式化日期字符串 for (int i = sheet.getFirstRowNum() + 1; i < sheet.getPhysicalNumberOfRows(); i++) { row = sheet.getRow(i); if (row == null) { continue; } List<Object> objList = new ArrayList<Object>(); for (int j = row.getFirstCellNum(); j < row.getLastCellNum(); j++) { cell = row.getCell(j); if (cell == null) { val = null; objList.add(val); continue; } switch (cell.getCellType()) { case XSSFCell.CELL_TYPE_STRING: val = cell.getStringCellValue(); break; case XSSFCell.CELL_TYPE_NUMERIC: if ("@".equals(cell.getCellStyle().getDataFormatString())) { if (j == 3) { val = df2.format(cell.getNumericCellValue()); } else { val = df.format(cell.getNumericCellValue()); } } else if ("General".equals(cell.getCellStyle().getDataFormatString())) { if (j == 3) { val = df2.format(cell.getNumericCellValue()); } else { val = df.format(cell.getNumericCellValue()); } } else { val = sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue())); } break; case XSSFCell.CELL_TYPE_BOOLEAN: val = cell.getBooleanCellValue(); break; case XSSFCell.CELL_TYPE_BLANK: val = ""; break; default: val = cell.toString(); break; } objList.add(val); } dataList.add(objList); } return dataList; }
在追随技术的道路上,十年如一日~