说明:的确是用JXL、HSSF、XSSF三种方式导入、导出Excel数据,但是跟所用项目的业务有所关联,摘出来比较麻烦,我就直接贴代码了。当给自己一个备份吧。
目前我知道的、会用的用来处理Excel的也就JXL和POI两种,JXL是用来处理Excel2003格式的,也只能处理这种格式。POI有HSSF和XSSF两种,前者用来且只处理Excel2003版本,后者用来处理2007版本且只处理2007版本的,要是用错了,系统会报错,譬如说:
1、org.apache.poi.openxml4j.exceptions.InvalidOperationException: Can't open the specified file:xxx
2、org.apache.poi.POIXMLException: org.apache.poi.openxml4j.exceptions.InvalidFormatException: Package should contain a content type part [M1.13]。
这两种错基本上都是跟Excel版本有关系的。
好啦,言归正传,直接贴代码:
1、JXL读取Excel和将数据写入到Excel中:
/** * 该方法用来读取指定的Excel文件,将其中的内容拼接成String返回到调用方法处 * @param filepath:需要读取的文件路径 * @param fieldList:参数列表 * @param viewID:指定的视图序号 * @param user:当前登录人 * */ public String readExcelInJXL(String filepath,String fieldList,String viewID,SUser user) throws Exception { StringBuffer retuStr= new StringBuffer(); StringBuffer columnVal = new StringBuffer(); String fields = ""; String afterSql=""; String sql=""; //3、获取需要insert的表和字段数据 SView view = this.dataEngine.getView(Integer.parseInt(viewID)); Integer size = this.dataEngine.getViewDatabindView(view.getSViewId(), 2).size();//获取要求显示的字符串 //说明有添加条件(在导入数据模块,将该条件作为前执行sql) if(view.getQuery()!=null && view.getQuery().trim().length()>0){ fields = replaceFieldList(fieldList,view.getQuery())+";"; } //在导入数据模块,将该条件作为后执行sql if(view.getOrdersql()!=null && view.getOrdersql().trim().length()>0){ afterSql = replaceFieldList(fieldList,view.getOrdersql())+";"; } //拼接SQL fields = fields+"insert into "+view.getSelectcondition()+"("+this.dataEngine.getViewColumn(view)+")"; String paramVal = getFieldList(fieldList);//获取参数键数据 paramVal +=this.dataEngine.getDefaultData(view,user);//获取默认值信息 //System.out.println(fields); //4、读取上传的Excel文件 File excelFile = new File(filepath); Workbook book = Workbook.getWorkbook(excelFile);//获取Excel文件对象,便于读取 //5、获取每个sheet并读取其中数据 String cellContent = "";//单元格内容 DateCell dc=null;//单元格日期类型 Sheet[] sheets = book.getSheets();//获取当前Excel下所有sheet集合 for(int j=0;j<sheets.length;j++){ Sheet sheet = sheets[j];//获取单个sheet String sheetName = sheet.getName();//当前sheet的名称 Integer column = sheet.getColumns();//当前sheet所有列 if(column!=size) break;//说明上传的excel与给定的字段不想符合,那么当前工作簿不加载 Integer row = sheet.getRows();//当前sheet所有行 retuStr.append("<center><h3>"+sheetName+"</h3></center>") .append("<table border='0' cellspacing='0' cellpadding='0' class='p_show' width='100%'>"); for(int m=0;m<row;m++){//一行一行的遍历 if(m==0){//第一行:标题行 retuStr.append("<tr class='tabFirstTr'>"); for(int n=0;n<column;n++){ //getCell(int columu,int row):获取第columu列,第row行的单元格,getContents()获取单元格的内容 if(null!=sheet.getCell(n,0).getContents() && !sheet.getCell(n,0).getContents().equals("")){//不为空,进行拼接 retuStr.append("<td>"+sheet.getCell(n,0).getContents()+"</td>"); }else{ column=n-1;//避免空的列也显示出来 break; } } retuStr.append("<td>操作</td>"); retuStr.append("</tr>"); }else{//其他内容行 retuStr.append("<tr>"); columnVal.delete(0, columnVal.length());//清空 sql=""; for(int n=0;n<column;n++){ //值如是为空或者空字符串,那么设置默认值0 //日期格式为date类型,需要进行判断 // System.out.print("************\n"+sheet.getCell(n,m).getContents()+sheet.getCell(n,m).getType()); if(sheet.getCell(n,m).getType().equals(CellType.DATE)){ dc = (DateCell)sheet.getCell(n,m); Date jxlDate = dc.getDate(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); sdf.setTimeZone(TimeZone.getTimeZone("GMT")); // System.out.println("格式化后的日期:"+sdf.format(jxlDate)); cellContent = sdf.format(jxlDate); }else{ cellContent =(sheet.getCell(n,m).getContents()==null || sheet.getCell(n,m).getContents().equals(""))?"":sheet.getCell(n,m).getContents(); } columnVal.append(",'"+(cellContent.equals("")?"0":cellContent)+"'"); retuStr.append("<td>"+cellContent+"</td>"); } if(columnVal.length()>0){sql = columnVal.substring(1);} sql = fields+" values("+paramVal+sql+");"+afterSql; retuStr.append("<td><a href='javascript:void(0);' class='deleteTr' onclick='deleteTheTr(this);' title='删除'><img src='images/alldel.png'/></a><textarea name='sql'>"+sql+"</textarea></td>"); retuStr.append("</tr>"); } } retuStr.append("</table>"); } //删除文件 excelFile.delete(); return retuStr.toString(); } /** * 该方法从数据库中查询数据并写入到Excel文件中,最后返回Excel文件路径 * @param parametersStr:参数字符串,告知获取哪个视图的哪些字段哪些数据信息 * @param user:当前登录人信息 * @param flag:查询标记 1-模糊查询 0-精确查询 * */ public String exportToExcelInJXL(String parametersStr,SUser user,int flag) throws Exception { String result=""; Parameters paramters=this.getParameters(parametersStr); List<Object[]> dataList = this.dataEngine.getTableData(paramters,user,flag); if(dataList!=null && dataList.size()>0){ String fileName = System.currentTimeMillis()+".xls";//以当前时间作为Excel的名称:2003版本的 File saveDir = this.initFileDir();//获取Excel文件导出后保存路径 // System.out.println(saveDir+ java.io.File.separator + fileName); String filePath = saveDir+ java.io.File.separator + fileName; File excel = new File(filePath); //工作簿名称 list Object [] title = dataList.get(dataList.size()-2); WritableWorkbook workBook = Workbook.createWorkbook(excel);//创建可写入的Excel工作薄 Object [] sheetName= dataList.get(dataList.size()-1); WritableSheet sheet = workBook.createSheet(sheetName[0].toString(), 0);//生成名为“当前视图名称”的工作表,参数0表示这是第一页,1表示第二页,以此类推 /** * 定义excel主标题的格式 */ WritableFont title2 = new WritableFont(WritableFont.ARIAL,12,WritableFont.BOLD);//加粗 WritableCellFormat titlewcf = new WritableCellFormat(title2); // 单元格定义 titlewcf.setAlignment(jxl.format.Alignment.CENTRE); //设置对齐方式 titlewcf.setBorder(Border.ALL, BorderLineStyle.THIN);//设置边框样式 titlewcf.setBackground(Colour.LIGHT_GREEN);//设置背景色 /** * 定义excel列标题的格式 */ WritableFont wf = new WritableFont(WritableFont.ARIAL,14,WritableFont.BOLD);//加粗 WritableCellFormat wcf = new WritableCellFormat(wf); // 单元格定义 wcf.setAlignment(jxl.format.Alignment.CENTRE); // 设置对齐方式 wcf.setBorder(Border.ALL, BorderLineStyle.THIN);//设置边框样式 wcf.setBackground(Colour.LIGHT_GREEN);//设置背景色 /** * 定义excel内容的格式 */ WritableFont comtent = new WritableFont(WritableFont.ARIAL,12,WritableFont.NO_BOLD);//常规 WritableCellFormat comtent_c = new WritableCellFormat(comtent); // 单元格定义 comtent_c.setAlignment(jxl.format.Alignment.CENTRE); // 设置对齐方式 comtent_c.setBorder(Border.ALL, BorderLineStyle.THIN);//设置边框样式 comtent_c.setBackground(Colour.LIGHT_GREEN);//设置背景色 String objStr=""; //遍历“标题”内容并添加到Excel中 for(int i=0;i<title.length;i++){ sheet.setColumnView(i, 23);//设置单元格的宽度 sheet.setRowView(i, 20*23,false);//设置单元格的宽度,目前为23,高度大概得设置成Excel里面行高的20倍才能达到相应的效果 objStr=(title[i]==null?"":title[i].toString()); Label label=new Label(i,0,objStr,wcf);//在第一行中添加文本类单元格 sheet.addCell(label); } //遍历list中的内容并添加到Excel中 for(int i=0;i<dataList.size()-2;i++){ Object [] objs= dataList.get(i); for(int j=0;j<objs.length;j++){ objStr=objs[j]==null?"":objs[j].toString(); // System.out.println(i+" "+j+" "+objStr); //添加序号列 Label orderLabel = new Label(0,i+1,new Integer(i+1).toString(),comtent_c);//第一列为序号列 sheet.addCell(orderLabel); Label label = new Label(j+1,i+1,objStr,comtent_c);//从第二行开始添加单元格,第一行是标题 sheet.addCell(label); } } //在Excel中写入数据并关闭文件 workBook.write(); workBook.close(); result=filePath; } return result; }
2、HSSF读取Excel和将数据写入到Excel中:
/** * 该方法用来读取指定的Excel文件,将其中的内容拼接成String返回到调用方法处 * @param filepath:需要读取的文件路径 * @param fieldList:参数列表 * @param viewID:指定的视图序号 * @param user:当前登录人 * */ public String readExcelInHSSF(String filepath,String fieldList,String viewID,SUser user) throws Exception { StringBuffer retuStr= new StringBuffer(); StringBuffer columnVal = new StringBuffer(); String fields = ""; String afterSql=""; String sql=""; //3、获取需要insert的表和字段数据 SView view = this.dataEngine.getView(Integer.parseInt(viewID)); Integer size = this.dataEngine.getViewDatabindView(view.getSViewId(), 2).size();//获取要求显示的字符串 //说明有添加条件(在导入数据模块,将该条件作为前执行sql) if(view.getQuery()!=null && view.getQuery().trim().length()>0){ fields = replaceFieldList(fieldList,view.getQuery())+";"; } //在导入数据模块,将该条件作为后执行sql if(view.getOrdersql()!=null && view.getOrdersql().trim().length()>0){ afterSql = replaceFieldList(fieldList,view.getOrdersql())+";"; } //拼接SQL fields = fields+"insert into "+view.getSelectcondition()+"("+this.dataEngine.getViewColumn(view)+")"; String paramVal = getFieldList(fieldList);//获取参数键数据 paramVal +=this.dataEngine.getDefaultData(view,user);//获取默认值信息 //System.out.println(fields); //4、读取上传的Excel文件 File excelFile = new File(filepath); POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(excelFile)); HSSFWorkbook workBook = new HSSFWorkbook(fs);//获取Excel文件对象,便于读取 //5、获取每个sheet并读取其中数据 String cellContent = "";//单元格内容 HSSFSheet sheet = null; for(int j=0;j<workBook.getNumberOfSheets();j++){//获取当前Excel下所有sheet集合 sheet = workBook.getSheetAt(j);//获取单个sheet String sheetName = workBook.getSheetName(j);//当前sheet的名称 Integer columnNum = sheet.getRow(0).getPhysicalNumberOfCells();;//当前sheet总共有多少列 if(columnNum!=size) break;//说明上传的excel与给定的字段不想符合,那么当前工作簿不加载 Integer rowNum = sheet.getLastRowNum();//当前sheet所有行 retuStr.append("<center><h3>"+sheetName+"</h3></center>") .append("<table border='0' cellspacing='0' cellpadding='0' class='p_show' width='100%'>"); HSSFRow row=null;//行 for(int m=0;m<=rowNum;m++){//一行一行的遍历 row = sheet.getRow(m);//获取当前行 if(m==0){//第一行:标题行 retuStr.append("<tr class='tabFirstTr'>"); for(short n=0;n<columnNum;n++){ if(null!=row.getCell(n) && !row.getCell(n).getRichStringCellValue().toString().equals("")){//不为空,进行拼接 retuStr.append("<td>"+row.getCell(n).getRichStringCellValue().toString()+"</td>"); }else{ columnNum=n-1;//避免空的列也显示出来 break; } } retuStr.append("<td>操作</td>"); retuStr.append("</tr>"); }else{//其他内容行 retuStr.append("<tr>"); columnVal.delete(0, columnVal.length());//清空 sql=""; for(short n=0;n<columnNum;n++){ //值如是为空或者空字符串,那么设置默认值0 cellContent = row.getCell(n)!=null?parseExcel(row.getCell(n)):""; columnVal.append(",'"+(cellContent.equals("")?"0":cellContent)+"'"); retuStr.append("<td>"+cellContent+"</td>"); } if(columnVal.length()>0){sql = columnVal.substring(1);} sql = fields+" values("+paramVal+sql+");"+afterSql; retuStr.append("<td><a href='javascript:void(0);' class='deleteTr' onclick='deleteTheTr(this);' title='删除'><img src='images/alldel.png'/></a><textarea name='sql'>"+sql+"</textarea></td>"); retuStr.append("</tr>"); } } retuStr.append("</table>"); } //删除文件 excelFile.delete(); return retuStr.toString(); } /** * 该方法从数据库中查询数据并写入到Excel文件中,最后返回Excel文件路径 * @param parametersStr:参数字符串,告知获取哪个视图的哪些字段哪些数据信息 * @param user:当前登录人信息 * @param flag:查询标记 1-模糊查询 0-精确查询 * */ public String exportToExcelInHSSF(String parametersStr,SUser user,int flag) throws Exception { String result=""; Parameters paramters=this.getParameters(parametersStr); List<Object[]> dataList = this.dataEngine.getTableData(paramters,user,flag); if(dataList!=null && dataList.size()>0){ //1、创建Excel文件 String fileName = System.currentTimeMillis()+".xls";//以当前时间作为Excel的名称:2003版本的 File saveDir = this.initFileDir();//获取Excel文件导出后保存路径 String filePath = saveDir+ java.io.File.separator + fileName; FileOutputStream fout = new FileOutputStream(filePath); //2、获取工作簿名称和主标题 Object [] title = dataList.get(dataList.size()-2); Object [] sheetName= dataList.get(dataList.size()-1); //3、创建一个webbook,对应一个Excel文件 HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet(sheetName[0].toString());//添加sheet sheet.setDefaultColumnWidth(23);//设置当前sheet的默认列宽 sheet.setDefaultRowHeightInPoints(23); //4、创建标题行,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short HSSFRow row = sheet.createRow((int) 0); //定义excel主标题的格式 HSSFCellStyle titleStyle = workbook.createCellStyle(); titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//居中 titleStyle.setFillForegroundColor(HSSFColor.LIGHT_GREEN.index);//前景色,浅绿色 titleStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); titleStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); titleStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); titleStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); titleStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); //创建标题的字体样式 HSSFFont titleFont = workbook.createFont(); titleFont.setColor(HSSFColor.BLACK.index);//字体颜色,黑色 titleFont.setFontHeightInPoints((short) 14);//14号字体 titleFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); //加粗 titleStyle.setFont(titleFont); String objStr=""; //遍历“标题”内容并添加到Excel中 for(int i=0;i<title.length;i++){ objStr=(title[i]==null?"":title[i].toString()); HSSFCell cell = row.createCell(i); cell.setCellStyle(titleStyle); HSSFRichTextString text = new HSSFRichTextString(objStr); cell.setCellValue(text); } //5、创建内容样式 //定义excel主标题的格式 HSSFCellStyle contentStyle = workbook.createCellStyle(); contentStyle.setFillForegroundColor(HSSFColor.LIGHT_GREEN.index);//浅绿色 contentStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); contentStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); contentStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); contentStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); contentStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); contentStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); contentStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); //生成内容字体样式 HSSFFont contentFfont = workbook.createFont(); contentFfont.setColor(HSSFColor.BLACK.index);//字体颜色,黑色 contentFfont.setFontHeightInPoints((short) 12);//12号字体 contentFfont.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL); // 把字体应用到当前的样式 contentStyle.setFont(contentFfont); //遍历list中的内容并添加到Excel中 for(int i=0;i<dataList.size()-2;i++){ row = sheet.createRow((i+1));//创建行 Object [] objs= dataList.get(i); //添加其他列 HSSFCell cell = row.createCell(0);//第一列为序号列 cell.setCellStyle(contentStyle); cell.setCellValue((i+1)); for(short j=0;j<objs.length;j++){ objStr=objs[j]==null?"":objs[j].toString(); cell = row.createCell(j+1); cell.setCellStyle(contentStyle); HSSFRichTextString text = new HSSFRichTextString(objStr); cell.setCellValue(text); } } //6、在Excel中写入数据并关闭文件 workbook.write(fout); fout.flush(); fout.close(); result=filePath; } // System.out.println(result); return result; }
3、XSSF读取Excel和将数据写入到Excel中(与XSSF大同小异):
/** * 该方法用来读取指定的Excel文件,将其中的内容拼接成String返回到调用方法处 * @param filepath:需要读取的文件路径 * @param fieldList:参数列表 * @param viewID:指定的视图序号 * @param user:当前登录人 * */ public String readExcelInXSSF(String filepath,String fieldList,String viewID,SUser user) throws Exception { StringBuffer retuStr= new StringBuffer(); StringBuffer columnVal = new StringBuffer(); String fields = ""; String afterSql=""; String sql=""; //3、获取需要insert的表和字段数据 SView view = this.dataEngine.getView(Integer.parseInt(viewID)); Integer size = this.dataEngine.getViewDatabindView(view.getSViewId(), 2).size();//获取要求显示的字符串 //说明有添加条件(在导入数据模块,将该条件作为前执行sql) if(view.getQuery()!=null && view.getQuery().trim().length()>0){ fields = replaceFieldList(fieldList,view.getQuery())+";"; } //在导入数据模块,将该条件作为后执行sql if(view.getOrdersql()!=null && view.getOrdersql().trim().length()>0){ afterSql = replaceFieldList(fieldList,view.getOrdersql())+";"; } //拼接SQL fields = fields+"insert into "+view.getSelectcondition()+"("+this.dataEngine.getViewColumn(view)+")"; String paramVal = getFieldList(fieldList);//获取参数键数据 paramVal +=this.dataEngine.getDefaultData(view,user);//获取默认值信息 //System.out.println(fields); //4、读取上传的Excel文件 File excelFile = new File(filepath); XSSFWorkbook workBook = new XSSFWorkbook(new FileInputStream(excelFile));//获取Excel文件对象,便于读取 //5、获取每个sheet并读取其中数据 String cellContent = "";//单元格内容 XSSFSheet sheet = null; for(int j=0;j<workBook.getNumberOfSheets();j++){//获取当前Excel下所有sheet集合 sheet = workBook.getSheetAt(j);//获取单个sheet String sheetName = workBook.getSheetName(j);//当前sheet的名称 Integer columnNum = sheet.getRow(0).getPhysicalNumberOfCells();;//当前sheet总共有多少列 if(columnNum!=size) break;//说明上传的excel与给定的字段不想符合,那么当前工作簿不加载 Integer rowNum = sheet.getLastRowNum();//当前sheet所有行 retuStr.append("<center><h3>"+sheetName+"</h3></center>") .append("<table border='0' cellspacing='0' cellpadding='0' class='p_show' width='100%'>"); XSSFRow row=null;//行 for(int m=0;m<=rowNum;m++){//一行一行的遍历 row = sheet.getRow(m);//获取当前行 if(m==0){//第一行:标题行 retuStr.append("<tr class='tabFirstTr'>"); for(short n=0;n<columnNum;n++){ if(null!=row.getCell(n) && !row.getCell(n).getRichStringCellValue().toString().equals("")){//不为空,进行拼接 retuStr.append("<td>"+row.getCell(n).getRichStringCellValue().toString()+"</td>"); }else{ columnNum=n-1;//避免空的列也显示出来 break; } } retuStr.append("<td>操作</td>"); retuStr.append("</tr>"); }else{//其他内容行 retuStr.append("<tr>"); columnVal.delete(0, columnVal.length());//清空 sql=""; for(short n=0;n<columnNum;n++){ //值如是为空或者空字符串,那么设置默认值0 cellContent = row.getCell(n)!=null?parseExcel(row.getCell(n)):""; columnVal.append(",'"+(cellContent.equals("")?"0":cellContent)+"'"); retuStr.append("<td>"+cellContent+"</td>"); } if(columnVal.length()>0){sql = columnVal.substring(1);} sql = fields+" values("+paramVal+sql+");"+afterSql; retuStr.append("<td><a href='javascript:void(0);' class='deleteTr' onclick='deleteTheTr(this);' title='删除'><img src='images/alldel.png'/></a><textarea name='sql'>"+sql+"</textarea></td>"); retuStr.append("</tr>"); } } retuStr.append("</table>"); } //删除文件 excelFile.delete(); //System.out.println("XSSF:"+retuStr.toString()); return retuStr.toString(); } /** * 该方法从数据库中查询数据并写入到Excel文件中,最后返回Excel文件路径 * @param parametersStr:参数字符串,告知获取哪个视图的哪些字段哪些数据信息 * @param user:当前登录人信息 * @param flag:查询标记 1-模糊查询 0-精确查询 * */ public String exportToExcelInXSSF(String parametersStr,SUser user,int flag) throws Exception { String result=""; Parameters paramters=this.getParameters(parametersStr); List<Object[]> dataList = this.dataEngine.getTableData(paramters,user,flag); if(dataList!=null && dataList.size()>0){ //1、创建Excel文件 String fileName = System.currentTimeMillis()+".xlsx";//以当前时间作为Excel的名称:2007版本的 File saveDir = this.initFileDir();//获取Excel文件导出后保存路径 String filePath = saveDir+ java.io.File.separator + fileName; FileOutputStream fout = new FileOutputStream(filePath);//文件不存在时会自动新建 // System.out.println(filePath); //2、获取工作簿名称和主标题 Object [] title = dataList.get(dataList.size()-2); Object [] sheetName= dataList.get(dataList.size()-1); //3、创建一个webbook,对应一个Excel文件 XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet sheet = workbook.createSheet(sheetName[0].toString());//添加sheet sheet.setDefaultColumnWidth(23);//设置当前sheet的默认列宽 sheet.setDefaultRowHeightInPoints(23); //4、创建标题行,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short XSSFRow row = (XSSFRow) sheet.createRow((int) 0); //定义excel主标题的格式 XSSFCellStyle titleStyle = (XSSFCellStyle) workbook.createCellStyle(); titleStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);//居中 titleStyle.setFillForegroundColor(HSSFColor.LIGHT_GREEN.index);//前景色,浅绿色 titleStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND); titleStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN); titleStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN); titleStyle.setBorderRight(XSSFCellStyle.BORDER_THIN); titleStyle.setBorderTop(XSSFCellStyle.BORDER_THIN); titleStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER); //创建标题的字体样式 XSSFFont titleFont = (XSSFFont) workbook.createFont(); titleFont.setColor(HSSFColor.BLACK.index);//字体颜色,黑色 titleFont.setFontHeightInPoints((short) 14);//14号字体 titleFont.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD); //加粗 //将字体添加到样式中 titleStyle.setFont(titleFont); String objStr=""; //遍历“标题”内容并添加到Excel中 for(int i=0;i<title.length;i++){ objStr=(title[i]==null?"":title[i].toString()); XSSFCell cell = row.createCell(i); cell.setCellStyle(titleStyle); XSSFRichTextString text = new XSSFRichTextString(objStr); cell.setCellValue(text); } //5、创建内容样式 //定义excel主标题的格式 XSSFCellStyle contentStyle = (XSSFCellStyle) workbook.createCellStyle(); contentStyle.setFillForegroundColor(HSSFColor.LIGHT_GREEN.index);//浅绿色 contentStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND); contentStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN); contentStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN); contentStyle.setBorderRight(XSSFCellStyle.BORDER_THIN); contentStyle.setBorderTop(XSSFCellStyle.BORDER_THIN); contentStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER); contentStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER); //生成内容字体样式 XSSFFont contentFfont = (XSSFFont) workbook.createFont(); contentFfont.setColor(HSSFColor.BLACK.index);//字体颜色,黑色 contentFfont.setFontHeightInPoints((short) 12);//12号字体 contentFfont.setBoldweight(XSSFFont.BOLDWEIGHT_NORMAL); // 把字体应用到当前的样式 contentStyle.setFont(contentFfont); //遍历list中的内容并添加到Excel中 for(int i=0;i<dataList.size()-2;i++){ row = (XSSFRow) sheet.createRow((i+1));//创建行 Object [] objs= dataList.get(i); //添加其他列 XSSFCell cell = row.createCell((short)(0));//第一列为序号列 cell.setCellStyle(contentStyle); cell.setCellValue((i+1)); for(short j=0;j<objs.length;j++){ objStr=objs[j]==null?"":objs[j].toString(); cell = row.createCell((short)(j+1)); cell.setCellStyle(contentStyle); XSSFRichTextString text = new XSSFRichTextString(objStr); cell.setCellValue(text); } } //6、在Excel中写入数据并关闭文件 workbook.write(fout); fout.flush(); fout.close(); result=filePath; } // System.out.println(result); return result; }
4、用到的一些公用方法:
/** * 该方法用来替换参数值 * @param fieldList:参数集合,格式:参数键1:参数值1;参数键2:参数值2;以此类推 * @param reg:需要进行替换的字符串 * */ private String replaceFieldList(String fieldList,String reg){ //只要双方有一个为null或者为空字符串,都返回原来的值reg if(fieldList==null || fieldList.trim().equals("") || reg==null || reg.trim().equals("")){ return reg; } fieldList = fieldList.trim();//去除空格 reg = reg.trim(); String[] fields = fieldList.split(";");// String[] val = null; if(fields.length>0){//说明至少有一组 for(String f:fields){ val = f.split(":"); reg = reg.replaceAll("<"+val[0]+">", val[1]); } } return reg; } private Parameters getParameters(String parametersStr) { return ParametersUitls.getParametersByStrForXML(parametersStr); } /** * 该方法用来获取参数键的参数值 * @param fieldList:参数集合,格式:参数键1:参数值1;参数键2:参数值2;以此类推 * */ private String getFieldList(String fieldList){ //只要双方有一个为null或者为空字符串,都返回原来的值reg if(fieldList==null || fieldList.trim().equals("")){ return ""; } fieldList = fieldList.trim();//去除空格 String[] fields = fieldList.split(";");// StringBuffer result= new StringBuffer(); if(fields.length>0){//说明至少有一组 for(String f:fields){ result.append("'"+f.split(":")[1]+"'").append(","); } } return result.toString(); } /** * 导出数据时,先判断指定目录是否存在,若不存在则新建 * 若存在,则删除指定目录下的文件,避免每次下载都生成文件导致硬盘容量不够 */ private File initFileDir() { String savePath = WebAppConfig.app("excelDir");//从配置文件中获取保存Excel的目录 savePath=savePath.trim(); if(savePath==null || savePath.equals("null") || savePath.length()<=0 ){ savePath = "D:"+java.io.File.separator+"bfp"+java.io.File.separator+"ed"; } File saveDir = new File(savePath); if(!saveDir.isDirectory()){//指定目录不存在则新建 saveDir.mkdir(); }else{//若是已经存在,那么删除里面的内容,避免每次下载都生成文件导致硬盘容量不够 deleteFiles(saveDir); //saveDir.mkdir(); } return saveDir; } /** * 删除文件 * @param file:File类型,指定要删除的文件 * */ private void deleteFiles(File file){ Calendar cal = Calendar.getInstance(); Calendar cal2 = Calendar.getInstance(); cal2.setTime(new Date());//设置当前时间 int day1=0,day2=0; if(file.isDirectory()){ File[] files = file.listFiles();//获取指定目录下的所有文件 for(int i=0;i<files.length;i++){ cal.setTimeInMillis(files[i].lastModified()); if(cal2.get(Calendar.YEAR)-cal.get(Calendar.YEAR)>0){//說明是以前的文件,那麼直接刪除 deleteFiles(files[i]); }else{//說明是今年或以後的文件 day1= cal.get(Calendar.DAY_OF_YEAR); day2 = cal2.get(Calendar.DAY_OF_YEAR); if((day2-day1)>0){//說明是今天之前的文件 deleteFiles(files[i]); } } } } file.delete();//删除文件 } /** * 该方法用来处理单元格中的数据 * */ private String parseExcel(Cell cell) { String result = new String(); switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_NUMERIC:// 数字类型 short format = cell.getCellStyle().getDataFormat(); SimpleDateFormat sdf = null; if(format == 14 || format == 31 || format == 57 || format == 58){ //日期 sdf = new SimpleDateFormat("yyyy-MM-dd"); }else if (format == 20 || format == 32) { //时间 sdf = new SimpleDateFormat("HH:mm"); } //若为数字,获取到的Value会自动添加一个0,变成xxx.0,这种格式的数据不能保存到数据类型为int的字段中 Double value = cell.getNumericCellValue(); if(sdf!=null){//需要进行格式化 Date date = HSSFDateUtil.getJavaDate(value); result = sdf.format(date); }else{//可能是数字 Long longVal = Math.round(value);//转换成long类型,此时没有小数点 // System.out.println(longVal+"\t"+Double.parseDouble(longVal + ".0")); if(Double.parseDouble(longVal + ".0") == value) result = longVal.toString(); else result = value.toString(); } break; case HSSFCell.CELL_TYPE_STRING:// String类型 result = cell.getRichStringCellValue().toString(); break; case HSSFCell.CELL_TYPE_BLANK: result = ""; default: result = ""; break; } return result; }
POI的两种方式弄了很久,也碰到了很多问题。这篇粘代码粘太多了,问题就不写在这篇了,呵呵呵!
相关推荐
在Java编程环境中,处理Excel数据是一项常见的任务,而`jxl`库是一个广泛使用的开源库,专门用于读取和写入Microsoft Excel文件。本篇将详细介绍如何使用`jxl`库进行Excel的操作,包括导入、导出、读取以及更新Excel...
在IT行业中,处理和操作Excel数据是一项常见的任务,特别是在数据导入导出、分析和报告生成等领域。JXL是一个Java库,专门用于读取、写入和修改Excel文件,它为Java开发者提供了一种方便的方式来处理Excel数据,而...
总之,使用jxl库在Android上快速导出Excel表格需要理解jxl的API,处理Android特有的文件操作和线程管理,以及适当地设置单元格内容和样式。通过实践和参考示例项目,你将能够有效地实现这一功能。
本篇将详细介绍如何利用`jxl`库来操作Excel文件,并结合实例说明如何从Excel文件中提取数据并生成TXT文件。 首先,我们需要理解`jxl`库的基本结构。`jxl`库主要提供了`Workbook`、`Sheet`、`Cell`等类,分别对应...
这里我们将深入探讨如何使用jxl.jar库在Android环境中操作Excel表格,特别是处理隐藏表的情况。 首先,jxl是一个Java库,它允许我们以编程方式读取和写入Microsoft Excel文件。由于Android系统基于Java,因此可以...
JXL库是一个广泛使用的Java库,它允许开发者读取、写入和修改Excel文件。本篇将深入探讨如何使用JXL库在Java中打印Excel报表。 首先,要使用JXL库,你需要在项目中引入它的依赖。在本例中,`jxl.jar`是JXL库的核心...
本篇主要介绍如何使用Java库jxl来将数据写入Excel文件中,这对于数据分析、报告生成或者自动化测试等场景非常实用。 jxl是一个开源的Java库,它提供了读取和写入Excel文件的功能。在Java项目中,如果你需要处理...
标题“利用jxl把excel中的数据导入数据库”指的是使用Java Excel API(jxl)这个库来读取Excel文件中的数据,并将这些数据批量地导入到关系型数据库中。这是一个常见的需求,特别是在处理大量结构化数据时,例如进行...
本篇文章将深入探讨如何利用JXL库在Java环境下操作Excel文件,并将其数据与Oracle数据库进行交互。 首先,JXL库提供了丰富的API,能够方便地对Excel文件进行各种操作。例如,可以创建新的工作簿,添加工作表,设置...
JXL的使用相对简单,开发者可以通过以下步骤操作Excel: 1. 引入JXL库的jar文件。 2. 创建`Workbook`对象,可以是读取现有文件或创建新文件。 3. 添加`Sheet`到`Workbook`,并进行数据操作。 4. 使用`Cell`对象填充...
jxl对下拉列表的读写操作以及相应的修改功能
1. **基本操作**:使用jxl.jar,你可以创建新的Excel工作簿,添加工作表,设置单元格的值,以及读取已有Excel文件中的数据。例如,可以创建一个新的Workbook对象,然后在这个工作簿中添加Sheet对象,再在Sheet上填充...
JXL库是一个广泛使用的开源库,它提供了方便的方式来读取、写入和操作Excel文件。下面我们将深入探讨如何使用JXL库实现导出Excel数据。 首先,你需要在你的项目中引入JXL库。可以通过Maven或Gradle来添加依赖,如果...
本篇文章将深入探讨如何使用jxl库来实现数据从数据库导出到Excel的过程。 首先,要使用jxl库,你需要将其添加到项目的类路径中。如果使用Maven,可以在pom.xml文件中添加以下依赖: ```xml <groupId>...
- `java_Jxl导入导出Excel表.doc`和`POI导入导出EXCEL文件.doc`可能会详细讲解如何使用这两个库进行数据的导入导出。 - `jxl中文教程.doc`、`jxl.doc`和`jxl_api.docx`是jxl库的中文教程和API文档,可以帮助开发者...
Java中的JXL库是一个流行的API,它允许开发者方便地读取、写入...通过研究这些实例,你将能熟练掌握Java中使用JXL库进行Excel文件操作的技巧,无论是简单的数据读写,还是复杂的格式设置和公式计算,都将变得易如反掌。
本篇文章将深入探讨如何使用jxl.jar库来实现Java操作Excel。 首先,jxl是一个广泛使用的Java库,它允许开发者读写Microsoft Excel文件。它的主要优势在于简单易用且功能丰富,支持多种Excel格式,包括老版本的.BIFF...
Java使用JXL库进行Excel操作是Java开发中常见的任务,特别是在数据处理、报表生成和数据分析等领域。JXL是一个流行的开源库,它提供了丰富的API来读取、写入和修改Microsoft Excel文件。以下是对这个主题的详细说明...