java poi导出excel,用excel 2013打开样式不能正常显示

我用的是poi3.02。用2010打开没问题,用2013打开只是合并单元格的地方,边框样式不能显示。

3个回答

升级jar包3.8就行了

poi设置的用07版的应该就可以

poi 针对03和07不同的版本会给出不同的类去处理的 你看看你的代码是 用 03还是 07 生成的 excel

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java poi导出excel文档 后台报下标越界 但文档正常导出且损坏
public static SXSSFWorkbook createCSVUtil2(int startRow, String sheetName, SXSSFWorkbook wb, Map<String, List<CellModel>> cellListMap, Integer cellRowNum, List<LinkedHashMap> exportData, int[] columnWidth, int totalcolumn, GgreportingtemplateDto ggreportingtemplateDto, int countRow) throws Exception { // 设置表格名称 SXSSFSheet sheet = (SXSSFSheet) wb.createSheet(sheetName); sheet.trackAllColumnsForAutoSizing(); // 设置表格标题 一般都是第一行第一个格子 // 标题样式 if (ggreportingtemplateDto.getTitle() != null) { XSSFCellStyle cellStyleTitle = (XSSFCellStyle) wb.createCellStyle(); cellStyleTitle.setWrapText(true); SXSSFRow rowTitle = (SXSSFRow) sheet.createRow(0); XSSFFont fontTitle = (XSSFFont) wb.createFont(); fontTitle.setFontHeightInPoints((short) 16); cellStyleTitle.setFont(fontTitle); // 合并标题单元格 sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, totalcolumn - 1)); for (int i = 0; i < totalcolumn; i++) { if (i == 0) { SXSSFCell cell = (SXSSFCell) rowTitle.createCell(0); cell.setCellValue(ggreportingtemplateDto.getTitle()); cell.setCellStyle(cellStyleTitle); } else { SXSSFCell cell = (SXSSFCell) rowTitle.createCell(i); cell.setCellStyle(cellStyleTitle); } } } if (ggreportingtemplateDto.getCondition() != null) { // 设置筛选条件格子 一般是第二行第一列 // 条件样式 XSSFCellStyle cellStyleCondition = (XSSFCellStyle) wb.createCellStyle(); cellStyleCondition.setWrapText(true); SXSSFRow rowCondition = (SXSSFRow) sheet.createRow(1); XSSFFont fontCondition = (XSSFFont) wb.createFont(); fontCondition.setFontHeightInPoints((short) 16); cellStyleCondition.setFont(fontCondition); // 合并条件单元格 sheet.addMergedRegion(new CellRangeAddress(1, 1, 0, 4)); for (int i = 0; i < 4; i++) { if (i == 0) { SXSSFCell cell = (SXSSFCell) rowCondition.createCell(0); cell.setCellValue(ggreportingtemplateDto.getCondition()); cell.setCellStyle(cellStyleCondition); } else { SXSSFCell cell = (SXSSFCell) rowCondition.createCell(i); cell.setCellStyle(cellStyleCondition); } } } // 设置表格通用样式 XSSFCellStyle cellStyle = (XSSFCellStyle) wb.createCellStyle(); // 设置边框 // 设置单元格内容水平对齐 cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER); // 设置单元格内容垂直对齐 cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER); // 设置自动换行 cellStyle.setWrapText(true); // 设置双边框 XSSFCellStyle cellStyleDouble = (XSSFCellStyle) wb.createCellStyle(); // 设置边框 // 设置单元格内容水平对齐 cellStyleDouble.setAlignment(XSSFCellStyle.ALIGN_CENTER); // 设置单元格内容垂直对齐 cellStyleDouble.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER); // 设置自动换行 cellStyleDouble.setWrapText(true); // 合并单元格 for (int t = 0; t < cellRowNum; t++) { SXSSFRow row = (SXSSFRow) sheet.createRow(t + startRow); List<CellModel> cellNameList = cellListMap.get(String.valueOf(t)); for (CellModel cellModel : cellNameList) { // 如果被合并的元素只占用了一个单元格则不进行合并 if (cellModel.getStartColumn() == cellModel.getEndColumn() && cellModel.getEndRow() == cellModel.getStartRow()) { continue; } sheet.addMergedRegion(new CellRangeAddress(cellModel.getStartRow(), cellModel.getEndRow(), cellModel.getStartColumn(), cellModel.getEndColumn())); } // create的cell Set<Integer> create = new HashSet<Integer>(); for (int i = 0; i < cellNameList.size(); i++) { CellModel cellModel = cellNameList.get(i); // 遍历插入表头 SXSSFCell cell = (SXSSFCell) row.createCell(cellModel.getStartColumn()); // 设置字体 XSSFFont font = (XSSFFont) wb.createFont(); font.setFontName("Times New Roman"); font.setFontHeightInPoints((short) 8); // 设置行高 if (i == 1) { row.setHeight((short) 500); } cellStyle.setFont(font); cell.setCellValue(cellModel.getCellName()); cell.setCellStyle(cellStyle); create.add(cellModel.getStartColumn()); } // 把所有没有create的cell都create for (int i = 0; i < totalcolumn; i++) { if (!(create.contains(i))) { // 设置字体 XSSFFont font = (XSSFFont) wb.createFont(); font.setFontName("Times New Roman"); font.setFontHeightInPoints((short) 8); cellStyle.setFont(font); SXSSFCell cell = (SXSSFCell) row.createCell(i); cell.setCellStyle(cellStyle); } } } for (LinkedHashMap hashMap : exportData) { SXSSFRow rowValue = (SXSSFRow) sheet.createRow(cellRowNum + startRow); Iterator<Map.Entry> iteratorRow = hashMap.entrySet().iterator(); while (iteratorRow.hasNext()) { Map.Entry entryRow = iteratorRow.next(); Integer key = Integer.valueOf(entryRow.getKey().toString()); String value = ""; if (entryRow.getValue() != null) { value = entryRow.getValue().toString(); } else { value = ""; } SXSSFCell cellValue = (SXSSFCell) rowValue.createCell(key - 1); // 设置字体 XSSFFont font = (XSSFFont) wb.createFont(); font.setFontName("Times New Roman"); font.setFontHeightInPoints((short) 8); cellValue.setCellValue(value); cellStyle.setFont(font); cellValue.setCellStyle(cellStyle); } cellRowNum++; } // 设置备注栏 List<String> reMarkList = ggreportingtemplateDto.getRemake(); if (reMarkList != null) { for (int i = 0; i < reMarkList.size() + 1; i++) { int rowNum = i + startRow + cellRowNum + 1; XSSFCellStyle cellStyleRemake = (XSSFCellStyle) wb.createCellStyle(); SXSSFRow rowRemake = (SXSSFRow) sheet.createRow(rowNum); XSSFFont fontRemake = (XSSFFont) wb.createFont(); fontRemake.setFontHeightInPoints((short) 8); cellStyleRemake.setFont(fontRemake); String cellValue = "Notes:"; // 合并条件单元格 if (i != 0) { sheet.addMergedRegion(new CellRangeAddress(rowNum, rowNum, 0, 4)); cellValue = reMarkList.get(i - 1); SXSSFCell cell = (SXSSFCell) rowRemake.createCell(0); cell.setCellValue(cellValue); cell.setCellStyle(cellStyleRemake); } else { SXSSFCell cell = (SXSSFCell) rowRemake.createCell(0); cell.setCellValue(cellValue); cell.setCellStyle(cellStyleRemake); } } } // 设置列宽 if (columnWidth != null) { for (int i = 0; i < columnWidth.length; i++) { sheet.setColumnWidth(i, columnWidth[i]); } } return wb; } 以上是我生成sheet表的内容 //exceptional Rpt public SXSSFWorkbook exceptionalRpt (GgreportingtemplateDto ggreportingtemplateDto, String startInputDate,String endInputDate) throws Exception { // 设置最大数据行数 SXSSFWorkbook wb = new SXSSFWorkbook(5050);//这里之前看到是说能设置这个表格最多能含有多少数据 Map<String, List<CellModel>> map = new HashMap<String, List<CellModel>>(); // 设置数据 // 第一级表头 List<CellModel> firstRow = new ArrayList<CellModel>(); CellModel cellModel1 = new CellModel(); // 总占用1行 Integer cellRow = 1; cellModel1.setCellName("Member English Name"); cellModel1.setStartRow(0); cellModel1.setEndRow(0); cellModel1.setStartColumn(0); cellModel1.setEndColumn(0); CellModel cellModel2 = new CellModel(); cellModel2.setCellName("Member Chinese Name"); cellModel2.setStartRow(0); cellModel2.setEndRow(0); cellModel2.setStartColumn(1); cellModel2.setEndColumn(1); CellModel cellModel3 = new CellModel(); cellModel3.setCellName("Staff No."); cellModel3.setStartRow(0); cellModel3.setEndRow(0); cellModel3.setStartColumn(2); cellModel3.setEndColumn(2); CellModel cellModel4 = new CellModel(); cellModel4.setCellName("HKID/Passport No."); cellModel4.setStartRow(0); cellModel4.setEndRow(0); cellModel4.setStartColumn(3); cellModel4.setEndColumn(3); CellModel cellModel5 = new CellModel(); cellModel5.setCellName("Sex"); cellModel5.setStartRow(0); cellModel5.setEndRow(0); cellModel5.setStartColumn(4); cellModel5.setEndColumn(4); CellModel cellModel6 = new CellModel(); cellModel6.setCellName("Plan Code"); cellModel6.setStartRow(0); cellModel6.setEndRow(0); cellModel6.setStartColumn(5); cellModel6.setEndColumn(5); CellModel cellModel7 = new CellModel(); cellModel7.setCellName("Plan Description"); cellModel7.setStartRow(0); cellModel7.setEndRow(0); cellModel7.setStartColumn(6); cellModel7.setEndColumn(6); CellModel cellModel8 = new CellModel(); cellModel8.setCellName("Effective Date"); cellModel8.setStartRow(0); cellModel8.setEndRow(0); cellModel8.setStartColumn(7); cellModel8.setEndColumn(7); CellModel cellModel9 = new CellModel(); cellModel9.setCellName("Status"); cellModel9.setStartRow(0); cellModel9.setEndRow(0); cellModel9.setStartColumn(8); cellModel9.setEndColumn(8); firstRow.add(cellModel1); firstRow.add(cellModel2); firstRow.add(cellModel3); firstRow.add(cellModel4); firstRow.add(cellModel5); firstRow.add(cellModel6); firstRow.add(cellModel7); firstRow.add(cellModel8); firstRow.add(cellModel9); map.put("0", firstRow); // 业务数据 List<LinkedHashMap> exportData = new ArrayList<LinkedHashMap>(); GuPolicyCopyItemMedgMembDto guPolicyCopyItemMedgMembDto = new GuPolicyCopyItemMedgMembDto(); List<GuPolicyCopyItemMedgMembDto> list = ServiceManager.prpall.getGuPolicyCopyItemMedgMembService().findALL(guPolicyCopyItemMedgMembDto, null);//这里查询出来是295条 //增加数据 用这端代码增加5000条数据 /*for (int i = 0; i < 5000; i++) { list.add((GuPolicyCopyItemMedgMembDto)list.get(0)); }*/ int countRow = 0; for (int i = 0; i < list.size(); i++) { GuPolicyCopyItemMedgMembDto data = (GuPolicyCopyItemMedgMembDto) list.get(i); LinkedHashMap<String,String> row = new LinkedHashMap<String,String>(); String struts = ""; String ename = ""; String cname = ""; String idno = ""; String staffno = ""; String sex = ""; String rationType = ""; String rationName = ""; String entryDate = ""; String chineseName = ""; String hKIDandPassportNo = ""; if(data.getFlag()==null||data.getFlag().equals("I")) { struts = "Add"; }else if(data.getFlag().equals("U")){ struts = "Amendment"; }else if(data.getFlag().equals("D")){ struts = "Deletion"; }else if(data.getFlag().equals("B")){ struts = "Cancellation"; } if(data.getClientEName() != null&&!(data.getClientEName().equals(""))) { ename = data.getClientEName(); } if(data.getClientCName() != null&&!(data.getClientCName().equals(""))) { cname = data.getClientCName(); } if(data.getIdNo() != null&&!(data.getIdNo().equals(""))) { idno = data.getIdNo(); } if(data.getStaffNo() != null&&!(data.getStaffNo().equals(""))) { staffno = data.getStaffNo(); } if(data.getSex() != null&&!(data.getSex().equals(""))) { sex = data.getSex(); } if(data.getRationType() != null&&!(data.getRationType().equals(""))) { rationType = data.getRationType(); } if(data.getRationName() != null&&!(data.getRationName().equals(""))) { rationName = data.getRationName(); } if(data.getEntryDate() != null) { entryDate = sim.format(data.getEntryDate()); } /*row.put("1", ""+ename+""); row.put("2", ""+cname+""); row.put("3", ""+staffno+""); row.put("4", ""+idno+""); row.put("5", ""+sex+""); row.put("6", ""+rationType+""); row.put("7", ""+rationName+""); row.put("8", ""+entryDate+""); row.put("9", ""+struts+"");*/ row.put("1", "1"); row.put("2", "2"); row.put("3", "3"); row.put("4", "4"); row.put("5", "5"); row.put("6", "6"); row.put("7", "7"); row.put("8", "8"); row.put("9", "9"); exportData.add(row); countRow++; } // 用于写入文件 // 列宽数组 int[] columnWidth = { 10000, 7500, 5000, 7500, 5000, 7500, 10000, 5000, 5000 }; // 报表标题 ggreportingtemplateDto.setTitle(null); List<String> remakeList = null; // 报表备注 ggreportingtemplateDto.setRemake(remakeList); ggreportingtemplateDto.setCondition(null); //数据分页 if(exportData.size()>5000) { double size = exportData.size(); double divisor = size/5000; int forNumber = (new Double(Math.ceil(divisor))).intValue(); for (int i = 0; i < forNumber; i++) { if((i+1)==forNumber) { List<LinkedHashMap> exportDataTemp = exportData.subList(0+(i*5000), exportData.size()-1); wb = this.createCSVUtil2(0, "Exceptional Rpt"+(i+1), wb, map, cellRow, exportDataTemp, columnWidth, columnWidth.length, ggreportingtemplateDto, 0); }else { List<LinkedHashMap> exportDataTemp = exportData.subList(0+(i*5000), 5000+(i*5000 )); wb = this.createCSVUtil2(0, "Exceptional Rpt"+(i+1), wb, map, cellRow, exportDataTemp, columnWidth, columnWidth.length, ggreportingtemplateDto, 0); } } }else { wb = this.createCSVUtil2(0, "Exceptional Rpt", wb, map, cellRow, exportData, columnWidth, columnWidth.length, ggreportingtemplateDto, 0); } /*wb = this.createCSVUtil2(0, "Exceptional Rpt", wb, map, cellRow, exportData, columnWidth, columnWidth.length, ggreportingtemplateDto, 0);*/ return wb; } 一开始SXSSFWorkbook wb = new SXSSFWorkbook(5050)这里的值给的5000 ,然后当数据量大于5000时直接报错,文件不能正常导出,然后我把5000改成7000,会报错但是文件能导出,是损坏文件,一条数据都没有,后来修改成分页导出,自己测试的时候任然报了数组下标越界,且越界的下标为负值,文件能正常导出,但导出的文件显示已损坏,看不到数据。报错代码图片以上传,求大神解答,解答有效我微信转账请大神喝奶茶 java.lang.ArrayIndexOutOfBoundsException: -20527 at java.util.ArrayList.elementData(ArrayList.java:418) at java.util.ArrayList.get(ArrayList.java:431) at org.apache.poi.xssf.model.StylesTable.getFontAt(StylesTable.java:386) at org.apache.poi.xssf.usermodel.XSSFWorkbook.getFontAt(XSSFWorkbook.java:954) at org.apache.poi.xssf.streaming.SXSSFWorkbook.getFontAt(SXSSFWorkbook.java:857) at org.apache.poi.ss.util.SheetUtil.getCellWidth(SheetUtil.java:148) at org.apache.poi.xssf.streaming.AutoSizeColumnTracker.updateColumnWidth(AutoSizeColumnTracker.java:367) at org.apache.poi.xssf.streaming.AutoSizeColumnTracker.updateColumnWidths(AutoSizeColumnTracker.java:333) at org.apache.poi.xssf.streaming.SXSSFSheet.flushOneRow(SXSSFSheet.java:1892) at org.apache.poi.xssf.streaming.SXSSFSheet.flushRows(SXSSFSheet.java:1871) at org.apache.poi.xssf.streaming.SXSSFSheet.flushRows(SXSSFSheet.java:1882) at org.apache.poi.xssf.streaming.SXSSFWorkbook.write(SXSSFWorkbook.java:931) at com.sinosoft.application.platform.web.action.GgReportingTemplateAction.download(GgReportingTemplateAction.java:267) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.sinosoft.application.common.BaseProcessAction.execute(BaseProcessAction.java:213) at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:216) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:117) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196) at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) at javax.servlet.http.HttpServlet.service(HttpServlet.java:661) at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:198) at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:176) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:265) at org.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:107) at org.acegisecurity.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:72) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) at org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:124) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:142) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) at org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:81) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) at org.acegisecurity.ui.logout.LogoutFilter.doFilter(LogoutFilter.java:110) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) at org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:149) at org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at com.sinosoft.application.common.CAS_LANGUATE.doFilter(CAS_LANGUATE.java:35) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at com.sinosoft.sysframework.web.control.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:99) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at com.sinosoft.application.common.CompatibleFilter.doFilter(CompatibleFilter.java:29) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at com.sinosoft.application.common.ValidateSalt.doFilter(ValidateSalt.java:56) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:160) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at com.sinosoft.application.common.LoadSalt.doFilter(LoadSalt.java:41) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:660) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:798) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:808) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748) 此问题已解决,导致报错的原因是sheet.trackAllColumnsForAutoSizing();poi自动设置列宽的代码,注释这行之后问题解决。
关于java中导出excel的问题 POI
怎样才能实现将excel表格中的单元格中的汉字样式导出来,不是标题,而是普通单元格,比如我在某个单元格中设置了字体加粗,怎么实现导出的excel中这个字体也是加粗的。
Java 使用POI导出excel表格,无法将单元格设置为文本格式
要把表格导出后,对id信息进行修改后再导回,修改过程中输入的都是数值类型的尝试使用两种方法设置单元格的文本格式后,任然单元格会在被双击后变成科学技术法。 使用的两种设置方式,第一种如下: // 生成一个(带标题)表格 HSSFSheet sheet = workbook.createSheet(); // 表数统计 int count = 1; // 生成一个表格 workbook.setSheetName(count - 1, sheetTitle + count); // 生成一个样式 HSSFCellStyle style = workbook.createCellStyle(); // 因为导出表格式不想要数字,保留原有编号,需要设置格式 HSSFDataFormat format = workbook.createDataFormat(); style.setDataFormat(format.getFormat("@")); 第二种: cell.setCellType(HSSFCell.CELL_TYPE_STRING); 在导出的表格中,单元格格式任然为常规 ![图片说明](https://img-ask.csdn.net/upload/201808/29/1535529917_824055.png)
java poi excel导出 弹出框不出来!
下面是代码.所有代码都能执行完,没有报错,也不弹出保存窗口!求助... ``` /** * 导出 */ public void exportData(HttpServletResponse response) throws Exception { HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = null; // 创建一行 HSSFRow row = null; HSSFCell cell = null; HSSFCellStyle stringstyle = null; HSSFCellStyle headStyle = null; headStyle = workbook.createCellStyle(); headStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN); headStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN); headStyle.setBorderRight(XSSFCellStyle.BORDER_THIN); headStyle.setBorderTop(XSSFCellStyle.BORDER_THIN); headStyle.setFillForegroundColor(IndexedColors.AQUA.getIndex()); headStyle.setFillPattern(CellStyle.SOLID_FOREGROUND); headStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER); HSSFFont headfont = workbook.createFont(); // 设置头部字体为宋体 headfont.setFontName("宋体"); // 粗体 headfont.setBoldweight(Font.BOLDWEIGHT_BOLD); headfont.setFontHeightInPoints((short) 11); // 单元格样式使用字体 headStyle.setFont(headfont); HSSFFont datafont = workbook.createFont(); stringstyle = workbook.createCellStyle(); stringstyle.setBorderBottom(XSSFCellStyle.BORDER_THIN); stringstyle.setBorderLeft(XSSFCellStyle.BORDER_THIN); stringstyle.setBorderRight(XSSFCellStyle.BORDER_THIN); stringstyle.setBorderTop(XSSFCellStyle.BORDER_THIN); stringstyle.setAlignment(XSSFCellStyle.ALIGN_CENTER); // 单元格样式使用字体 stringstyle.setFont(datafont); sheet = (HSSFSheet) workbook.createSheet(); sheet.setDefaultColumnWidth(16); //合并起始行,起始列,结束行,结束列 CellRangeAddress title1 = new CellRangeAddress(0, 0, 0, 10); sheet.addMergedRegion(title1); //设置第一行 row = (HSSFRow) sheet.createRow(0); cell = (HSSFCell) row.createCell(0); cell.setCellType(XSSFCell.CELL_TYPE_STRING); cell.setCellValue("部室员工绩效合约考核汇总表"); cell.setCellStyle(headStyle); //合并起始行,起始列,结束行,结束列 // CellRangeAddress row1 = new CellRangeAddress(1, 0, 1, 1); // sheet.addMergedRegion(row1); //设置第二行 row = (HSSFRow) sheet.createRow(1); cell = (HSSFCell) row.createCell(0); cell.setCellType(XSSFCell.CELL_TYPE_STRING); cell.setCellValue("项目"); cell.setCellStyle(headStyle); cell = (HSSFCell) row.createCell(1); cell.setCellType(XSSFCell.CELL_TYPE_STRING); cell.setCellValue("员工1"); cell.setCellStyle(headStyle); cell = (HSSFCell) row.createCell(2); cell.setCellType(XSSFCell.CELL_TYPE_STRING); cell.setCellValue("员工2"); cell.setCellStyle(headStyle); //合并起始行,起始列,结束行,结束列 // CellRangeAddress row2 = new CellRangeAddress(2, 0, 2, 1); // sheet.addMergedRegion(row2); //设置第三行 row = (HSSFRow) sheet.createRow(2); cell = (HSSFCell) row.createCell(0); cell.setCellType(XSSFCell.CELL_TYPE_STRING); cell.setCellValue("一、主体指标"); cell.setCellStyle(headStyle); cell = (HSSFCell) row.createCell(1); cell.setCellType(XSSFCell.CELL_TYPE_STRING); cell.setCellValue("111"); cell.setCellStyle(headStyle); cell = (HSSFCell) row.createCell(1); cell.setCellType(XSSFCell.CELL_TYPE_STRING); cell.setCellValue("222"); cell.setCellStyle(headStyle); ByteArrayOutputStream os = new ByteArrayOutputStream(); try { workbook.write(os); } catch (IOException e) { e.printStackTrace(); } byte[] content = os.toByteArray(); InputStream is = new ByteArrayInputStream(content); // 设置response参数,可以打开下载页面 response.reset(); response.setContentType("application/vnd.ms-excel;charset=utf-8"); response.setHeader("Content-Disposition", "attachment;filename=" + new String(("季度绩效工资分配.xls").getBytes(), "iso-8859-1")); ServletOutputStream out = response.getOutputStream(); BufferedInputStream bis = null; BufferedOutputStream bos = null; try { bis = new BufferedInputStream(is); bos = new BufferedOutputStream(out); byte[] buff = new byte[2048]; int bytesRead; // Simple read/write loop. while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) { bos.write(buff, 0, bytesRead); } bos.flush(); } catch (final IOException e) { throw e; } finally { if (bis != null) bis.close(); if (bos != null) bos.close(); } } } ```
java 使用POI导出大数据,服务器内存不释放
RT,我用java 使用POI导出大数据, 数据是可以导出来。但是服务器的内存一直不释放。导一次 内存就会增加100M-2G 视数据量大小。当超过JVM设置的15G时,服务就会瘫痪掉,无法访问、 主要代码如下, ``` MapList list = db.query(SQL); String EXCELNAME = (new StringBuilder(String.valueOf(unitId))).toString(); HSSFWorkbook workbook = new HSSFWorkbook(); //createSheet(excel工作表名) HSSFSheet sheet = workbook.createSheet(EXCELNAME); //下面是设置excel表中标题的样式 HSSFCellStyle title_style = workbook.createCellStyle(); title_style.setFillForegroundColor(HSSFColor.SKY_BLUE.index); title_style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); title_style.setBorderBottom(HSSFCellStyle.BORDER_THIN); title_style.setBorderLeft(HSSFCellStyle.BORDER_THIN); title_style.setBorderRight(HSSFCellStyle.BORDER_THIN); title_style.setBorderTop(HSSFCellStyle.BORDER_THIN); title_style.setAlignment(HSSFCellStyle.ALIGN_CENTER); HSSFFont title_font = workbook.createFont(); title_font.setColor(HSSFColor.VIOLET.index); title_font.setFontHeightInPoints((short) 12); title_font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); title_style.setFont(title_font); //内容的样式 HSSFCellStyle content_style = workbook.createCellStyle(); content_style.setFillForegroundColor(HSSFColor.LIGHT_YELLOW.index); content_style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); content_style.setBorderBottom(HSSFCellStyle.BORDER_THIN); content_style.setBorderLeft(HSSFCellStyle.BORDER_THIN); content_style.setBorderRight(HSSFCellStyle.BORDER_THIN); content_style.setBorderTop(HSSFCellStyle.BORDER_THIN); content_style.setAlignment(HSSFCellStyle.ALIGN_CENTER); content_style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); HSSFFont content_font = workbook.createFont(); content_font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL); content_style.setFont(content_font); //填充标题内容 HSSFRow row = sheet.createRow(0); for (int i = 0; i < TITLES.length; i++) { //设置标题的宽度自适应 sheet.setColumnWidth(i, TITLES[i].getBytes().length * 2 * 256); HSSFCell cell = row.createCell(i); cell.setCellStyle(title_style); HSSFRichTextString text = new HSSFRichTextString(TITLES[i]); cell.setCellValue(text); } for (int i = 0; i < list.size(); i++) { row = sheet.createRow( i + 1); for( int val=0;val<TITLES.length;val++){ HSSFCell cell = row.createCell(val); cell.setCellStyle(content_style); HSSFRichTextString richString = new HSSFRichTextString(list.getRow(i).get(val)); cell.setCellValue(richString); } } response.reset(); response.setContentType("application/vnd.ms-excel ;charset=" + LocaleConfig.getEncoding()); response.setHeader("Content-disposition", "attachment;filename=" +EXCELNAME + ".xls"); response.addHeader("Cache-Control", "no-cache"); response.addHeader("Cache-Control", "no-store"); OutputStream ouputStream = response.getOutputStream(); try { workbook.write(ouputStream); } catch (Exception e) { e.printStackTrace(); }finally{ if(ouputStream!=null){ ouputStream.flush(); ouputStream.close(); } } } ```
java poi 分组查询导出Excel怎么实现
有个用户表(t_user) 有一个 用户订单记录表(dngdan) 其中有主外键关联,我想导出这种样式 用户姓名 订单号 张三 1 2 3.... 李四 1 2 3 这样的格式 怎么导出啊
poi导出Excel模板,并在其中一列写入数据
这列的字体与其他列的不一样,改成其他样式的,poi导出时将所有的字体都改成一样的了,有大神知道怎么写吗
java POI3.8 Excel 下载 发现不可读取内容 解决办法??
![图片说明](https://img-ask.csdn.net/upload/201701/17/1484635471_937430.png) ![图片说明](https://img-ask.csdn.net/upload/201701/17/1484635688_899413.png) ``` /** * 导出历史记录 */ @SuppressWarnings({ "deprecation", "unchecked" }) @RequestMapping("export-TrainHistoryRecord") @ResponseBody protected void buildExcelDocument(EmployeeTrainHistoryQuery query,ModelMap model, SXSSFWorkbook workbook, HttpServletRequest request, HttpServletResponse response) throws Exception { //这里使用SXSSFWorkbook对象,支持1048576条数据 try { response.reset(); // 获得国际化语言 RequestContext requestContext = new RequestContext(request); String CourseCompany = requestContext .getMessage("manage-student-trainRecods"); response.setContentType("APPLICATION/vnd.ms-excel;charset=UTF-8"); // 注意,如果去掉下面一行代码中的attachment; 那么也会使IE自动打开文件。 response.setHeader( "Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode( DateUtil.getExportDate() + ".xlsx", "UTF-8"));//Excel 扩展名指定为xlsx SXSSFWorkbook对象只支持xlsx格式 OutputStream os = response.getOutputStream();// new CellStyle style = workbook.createCellStyle(); // 设置样式 style.setFillForegroundColor(HSSFColor.SKY_BLUE.index); style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); style.setBorderBottom(HSSFCellStyle.BORDER_THIN); style.setBorderLeft(HSSFCellStyle.BORDER_THIN); style.setBorderRight(HSSFCellStyle.BORDER_THIN); style.setBorderTop(HSSFCellStyle.BORDER_THIN); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); String employeeCode = requestContext.getMessage("employeeCode"); String employeeName = requestContext.getMessage("employeeName"); String orgName = requestContext.getMessage("orgName"); String startDate = requestContext.getMessage("start.date"); String endDate = requestContext.getMessage("end.date"); String courseCode = requestContext.getMessage("courseCode"); String courseName = requestContext.getMessage("courseName"); String sessionName = requestContext.getMessage("sessionName"); String hoursNunber = requestContext.getMessage("hoursNunber"); // FileOutputStream(filePath); List<EmployeeTrainHistoryModel> list = null; query.setNeedQueryAll(true); try { // if("0".equals(query.getTrainFlag())){ query.setTotalItem(employeeTrainHistoryService.fetchCountEmployeeTrainHistoryByQuery(query)); int page_size = 100000;// 数据库中存储的数据行数 int list_count =query.getTotalItem(); int export_times = list_count % page_size > 0 ? list_count / page_size + 1 : list_count / page_size; for (int m = 0; m < export_times; m++) { query.setNeedQueryAll(false); query.setPageSize(100000);//每页显示多少条数据 query.setCurrentPage(m+1);//设置第几页 list=employeeTrainHistoryService.getEmployeeTrainHistoryByQuery(query); int len = list.size() < page_size ? list.size() : page_size; //新建sheet Sheet sheet = null; sheet = workbook.createSheet(System.currentTimeMillis() + CourseCompany+m); // for (int n = 0; n < len; n++) { // 迭代数据 if (list != null && list.size() > 0) { int rowNum = 1; int max_row=300000; int sheet_count=0; for (int i = 0; i < list.size(); i++) { EmployeeTrainHistoryModel history=list.get(i); //如果当前行超过单页签可容纳最大行则换页签 // if(i==0||i==(max_row*sheet_count+1)){ sheet.setDefaultColumnWidth((short) 17); // 创建属于上面Sheet的Row,参数0可以是0~65535之间的任何一个, Row header = sheet.createRow(0); // 第0行 // 产生标题列 Cell cell; String[] headerArr = new String[] { employeeCode, employeeName, orgName, startDate, endDate, courseCode, courseName, sessionName, hoursNunber }; for (int j = 0; j < headerArr.length; j++) { cell = header.createCell((short) j); cell.setCellStyle(style); cell.setCellValue(headerArr[j]); } Row row = sheet.createRow(rowNum++); row.createCell((short) 0).setCellValue( history.getEmployeeCode()); row.createCell((short) 1).setCellValue( history.getEmployeeName()); row.createCell((short) 2) .setCellValue(history.getOrgName()); if (history.getTrainBeginTime() != null) { row.createCell((short) 3).setCellValue( DateUtil.toString(history.getTrainBeginTime())); } else { row.createCell((short) 3).setCellValue(""); } if (history.getTrainEndTime() != null) { row.createCell((short) 4).setCellValue( DateUtil.toString(history.getTrainEndTime())); } else { row.createCell((short) 4).setCellValue(""); } row.createCell((short) 5).setCellValue( history.getCourseCode()); row.createCell((short) 6).setCellValue( history.getCourseName()); row.createCell((short) 7).setCellValue( history.getSessionName()); if (history.getHoursNumber() != null) row.createCell((short) 8).setCellValue( history.getHoursNumber().toString()); } } list.clear(); } } catch (Exception e) { e.printStackTrace(); } try { workbook.write(os); model.put("msg", "1"); os.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (IOException e) { e.printStackTrace(); } } ```
java+poi实现下面的格式
![图片说明](https://img-ask.csdn.net/upload/201601/25/1453692519_563496.png) 请问怎么实现框框圈起来的部分?? 我的代码如下: public class ExportToExcelServiceImpl implements ExportToExcelService { @Autowired private ExportToExcelDao exportToExcelDao; public void setExportToExcelDao(ExportToExcelDao exportToExcelDao) { this.exportToExcelDao = exportToExcelDao; } /** * 导出合作渠道 * * @param HttpServletRequest * request, HttpServletResponse response, String startData, * String endtData * @return * */ @Override public void exportChannelToExcel(HttpServletRequest request, HttpServletResponse response, String startData, String endtData) { /** * 取出渠道数据 * */ List<CooperationChannel> channelList = exportToExcelDao .exportChannelToExcel(startData, endtData); // List<CooperationChannel> channelList = exportToExcelDao // .exportChannelToExcel(); /** * 创建渠道统计的excel * */ // 下载生成的合作渠道报表到自定义的位置 try { request.setCharacterEncoding("UTF-8"); } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } response.setCharacterEncoding("UTF-8"); response.setContentType("application/octet-stream"); // 设置生成的文件类型 String filedisplay = "合作渠道报表.xls"; try { filedisplay = URLEncoder.encode(filedisplay, "UTF-8"); } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } response.addHeader("Content-Disposition", "attachment;filename=" + filedisplay); // 设置文件头编码方式和文件名 // 创建一个workbook 对应一个excel应用文件 HSSFWorkbook workBook = new HSSFWorkbook(); // 在workbook中添加一个sheet,对应Excel文件中的sheet CellRangeAddress cra = new CellRangeAddress(0, 0, 0, 15); CellRangeAddress cra1 = new CellRangeAddress(1, 1, 0, 4); CellRangeAddress cra2 = new CellRangeAddress(1, 1, 5, 9); // CellRangeAddress cra3 = new CellRangeAddress(1, 1, 10, 15); HSSFSheet sheet = workBook.createSheet("合作渠道"); // 在sheet里增加合并单元格 sheet.addMergedRegion(cra); sheet.addMergedRegion(cra1); sheet.addMergedRegion(cra2); // sheet.addMergedRegion(cra3); // 获取表格样式 ExportUtil exportUtil = new ExportUtil(workBook, sheet); HSSFCellStyle titleStyle = exportUtil.getTitleStyle(); HSSFCellStyle titleStyle1 = exportUtil.getTitleStyle1(); HSSFCellStyle headStyle = exportUtil.getHeadStyle(); HSSFCellStyle bodyStyle = exportUtil.getBodyStyle(); // 构建表标题1 HSSFRow head = sheet.createRow(0); HSSFCell cell = null; String headTitle = "合作渠道数据统计表"; cell = head.createCell(0); cell.setCellStyle(titleStyle); cell.setCellValue(headTitle); // 构建表标题2 HSSFRow head1 = sheet.createRow(1); HSSFCell cell1 = null; String headTitle1= "部门:市场品牌部"; cell1 = head1.createCell(5); cell1.setCellStyle(titleStyle1); cell1.setCellValue(headTitle1); // 构建表标题2 // HSSFRow head2 = sheet.createRow(1); HSSFCell cell2 = null; String headTitle2= "日期:"; cell2 = head1.createCell(5); cell2.setCellStyle(titleStyle1); cell2.setCellValue(headTitle2); // // 构建表标题2 // HSSFRow head3 = sheet.createRow(1); // HSSFCell cell3 = null; // String headTitle3= "单位:元"; // cell3 = head3.createCell(4); // cell3.setCellStyle(headStyle); // cell3.setCellValue(headTitle3); // String[] headTitle1 = new String[] { "部门:市场品牌部", "日期:", "单位:元" }; // for (int i = 0; i < headTitle1.length; i++) { // cell = head1.createCell(i); // cell.setCellStyle(titleStyle1); // cell.setCellValue(headTitle1[i]); // } // 构建表头 HSSFRow headRow = sheet.createRow(2); String[] titles = new String[] { "序号", "渠道名称", "点击量", "下载量", "激活数", "注册数", "注册率", "实名数", "实名率", "登录数", "绑卡数", "绑卡率", "投资数", "投资率", "充值总额", "投资总额" }; for (int i = 0; i < titles.length; i++) { cell = headRow.createCell(i); cell.setCellStyle(headStyle); cell.setCellValue(titles[i]); } // 构建表体数据 if (channelList != null && channelList.size() > 0) { for (int j = 2; j < channelList.size(); j++) { HSSFRow bodyRow = sheet.createRow(j + 1); CooperationChannel cooperationChannel = channelList.get(j); // getChannel_id,并把数据写入excel中的单元格,下同。 cell = bodyRow.createCell(0); cell.setCellStyle(bodyStyle); cell.setCellValue(cooperationChannel.getChannel_id()); // getChannel_name cell = bodyRow.createCell(1); cell.setCellStyle(bodyStyle); cell.setCellValue(cooperationChannel.getChannel_name()); // getClick_amount cell = bodyRow.createCell(2); cell.setCellStyle(bodyStyle); cell.setCellValue(cooperationChannel.getClick_amount()); // getDownload_amount cell = bodyRow.createCell(3); cell.setCellStyle(bodyStyle); cell.setCellValue(cooperationChannel.getDownload_amount()); // getActivation_amount cell = bodyRow.createCell(4); cell.setCellStyle(bodyStyle); cell.setCellValue(cooperationChannel.getActivation_amount()); // getRegister_amount cell = bodyRow.createCell(5); cell.setCellStyle(bodyStyle); cell.setCellValue(cooperationChannel.getRegister_amount()); // getRegister_rate cell = bodyRow.createCell(6); cell.setCellStyle(bodyStyle); cell.setCellValue(cooperationChannel.getRegister_rate()); // getAutonym_amount cell = bodyRow.createCell(7); cell.setCellStyle(bodyStyle); cell.setCellValue(cooperationChannel.getAutonym_amount()); // getAutonym_rate cell = bodyRow.createCell(8); cell.setCellStyle(bodyStyle); cell.setCellValue(cooperationChannel.getAutonym_rate()); // getLogin_amount cell = bodyRow.createCell(9); cell.setCellStyle(bodyStyle); cell.setCellValue(cooperationChannel.getLogin_amount()); // getBound_card_amount cell = bodyRow.createCell(10); cell.setCellStyle(bodyStyle); cell.setCellValue(cooperationChannel.getBound_card_amount()); // getBound_card_rate cell = bodyRow.createCell(11); cell.setCellStyle(bodyStyle); cell.setCellValue(cooperationChannel.getBound_card_rate()); // getInvestment_amount cell = bodyRow.createCell(12); cell.setCellStyle(bodyStyle); cell.setCellValue(cooperationChannel.getInvestment_amount()); // getInvestment_rate cell = bodyRow.createCell(13); cell.setCellStyle(bodyStyle); cell.setCellValue(cooperationChannel.getInvestment_rate()); // getRecharge_total_amount cell = bodyRow.createCell(14); cell.setCellStyle(bodyStyle); cell.setCellValue(cooperationChannel.getRecharge_total_amount()); // getInvestment_total_amount cell = bodyRow.createCell(15); cell.setCellStyle(bodyStyle); cell.setCellValue(cooperationChannel .getInvestment_total_amount()); } } try { // FileOutputStream fos = new FileOutputStream( // "C:\\Users\\lida\\Desktop\\testData\\fr0_markbran_001.xls"); OutputStream ops = response.getOutputStream(); workBook.write(ops); ops.flush(); ops.close(); } catch (IOException e) { e.printStackTrace(); // } finally { // try { // // fos.close(); // } catch (IOException e) { // e.printStackTrace(); // } } }
如何用xssf方法在java中设置excel的cell的格式为文本格式
``` package com.sitech.dss.ssjf.service.impl; import java.io.OutputStream; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletResponse; import org.apache.commons.collections.MapUtils; import org.apache.log4j.Logger; import org.apache.poi.hssf.usermodel.HSSFDataFormat; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFCellStyle; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.struts2.ServletActionContext; import org.springframework.stereotype.Service; import com.sitech.dss.ssjf.service.ExportUniteService; /** * 统一导出功能实现类 * @author cfl * 2014-7-31 */ @Service("export_service") public class ExportUniteServiceImpl implements ExportUniteService { private Logger logger = Logger.getLogger(ExportUniteServiceImpl.class); /** * EXCEL单行表头导出功能实现 * @author cfl */ @Override public void exportExcelBySingleHeader(List<Map<String, Object>> dateList, Map<String,String> headMap,String filename, String sheetName,Map<String, Object> styleMap) { try { /**---------------------------------------输出控制---------------------------------------------------------**/ HttpServletResponse response = ServletActionContext.getResponse(); OutputStream os = response.getOutputStream();// 取得输出流 filename = filename+".xlsx"; filename = new String(filename.getBytes("GBK"), "iso8859-1"); response.reset();// 清空输出流 response.setHeader("Content-disposition", "attachment; filename="+filename);// 设定输出文件头 response.setContentType("application/msexcel");// 定义输出类型 /**---------------------------------------创建webbook---------------------------------------------------------**/ // 第一步,创建一个webbook,对应一个Excel文件 XSSFWorkbook wb = new XSSFWorkbook(); // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet XSSFSheet sheet = wb.createSheet(sheetName); // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short XSSFRow row = sheet.createRow((int) 0); sheet.setDefaultColumnWidth((short) 15); /**---------------------------------------表头样式设置---------------------------------------------------------**/ // 第四步,创建单元格,并设置值表头 设置表头居中 CellStyle style = wb.createCellStyle(); style.setAlignment(XSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式 //设置背景颜色 setBackColor(style,MapUtils.getShortValue(styleMap, "headerBackColor")); //设置边框颜色 setBorder(style,CellStyle.BORDER_THIN,MapUtils.getShortValue(styleMap, "borderColor")); //设置字体 Font font=wb.createFont(); setFont(font,style,(short)MapUtils.getIntValue(styleMap, "headerFontSize"),MapUtils.getShortValue(styleMap, "headerFontColor") , MapUtils.getString(styleMap, "font")); /**----------------------------------------表内容样式设置--------------------------------------------------------**/ CellStyle style2 = wb.createCellStyle(); //设置边框颜色 setBorder(style2,CellStyle.BORDER_THIN,MapUtils.getShortValue(styleMap, "borderColor")); //设置字体 Font font2=wb.createFont(); setFont(font2,style2,(short)MapUtils.getIntValue(styleMap, "bodyFontSize"),MapUtils.getShortValue(styleMap, "bodyFontColor") , MapUtils.getString(styleMap, "font")); style2.setAlignment(XSSFCellStyle.ALIGN_CENTER); /**----------------------------------------表头信息组装--------------------------------------------------------**/ XSSFCell cell = row.createCell((short) 0); int cellIndex = 0; for(Map.Entry<String, String> entry:headMap.entrySet()){ cell = row.createCell((short) cellIndex); cell.setCellValue(entry.getValue()); cell.setCellStyle(style); cellIndex++; } /**-----------------------------------------表内容信息组装-------------------------------------------------------**/ for (int i = 0; i < dateList.size(); i++) { row = sheet.createRow((int) i + 1); Map map = dateList.get(i); int rowCellIndex = 0; for(Map.Entry<String, String> entry:headMap.entrySet()){ cell = row.createCell((short) rowCellIndex); cell.setCellValue(MapUtils.getString(map, entry.getKey())); cell.setCellStyle(style2); rowCellIndex++; } } /**-----------------------------------------写入输出流,关闭输出流-------------------------------------------------------**/ wb.write(os); os.flush(); os.close(); } catch (Exception e) { e.printStackTrace(); } } /** * 设置背景颜色 * @author cfl * @param style style对象 * @param color :IndexedColors.SKY_BLUE.getIndex() * @return */ public static CellStyle setBackColor(CellStyle style,short color){ //设置前端颜色 style.setFillForegroundColor(color); //设置填充模式 style.setFillPattern(CellStyle.SOLID_FOREGROUND); return style; } /** * 设置单元格边框(四个方向的颜色一样) * @author cfl * @param style style对象 * @param borderStyle 边框类型 :dished-虚线 thick-加粗 double-双重 dotted-有点的 CellStyle.BORDER_THICK * @param borderColor 颜色 IndexedColors.BLUE.getIndex() * @return */ public static CellStyle setBorder(CellStyle style,short borderStyle,short borderColor){ //设置底部格式(样式+颜色) style.setBorderBottom(borderStyle); style.setBottomBorderColor(borderColor); //设置左边格式 style.setBorderLeft(borderStyle); style.setLeftBorderColor(borderColor); //设置右边格式 style.setBorderRight(borderStyle); style.setRightBorderColor(borderColor); //设置顶部格式 style.setBorderTop(borderStyle); style.setTopBorderColor(borderColor); return style; } /** * * 设置字体(简单的需求实现,如果复杂的字体,需要自己去实现)尽量重用 * @author cfl * @param style style对象 * @param fontSize 字体大小 shot(24) * @param color 字体颜色 IndexedColors.BLACK.getIndex() * @param fontName 字体名称 "Courier New" * @param */ public static CellStyle setFont(Font font, CellStyle style,short fontSize,short color,String fontName){ font.setFontHeightInPoints(fontSize); font.setFontName(fontName); //font.setItalic(true);// 斜体 //font.setStrikeout(true);//加干扰线 font.setColor(color);//设置颜色 // Fonts are set into a style so create a new one to use. style.setFont(font); return style; } } ``` 代码如上所示
请问在java中做导出的时候应该怎么实现下拉列表框
这里我给出了我的java源码 望各位大神仔细看看 小弟在此谢谢了 下面这段代码实现的效果是这样 ![CSDN移动问答][1] 而我想实现的效果是这样的 如图 在计价方式那 有3个选项 可以进行下拉选择的 ![CSDN移动问答][2] ```ruby #这里可以指定高亮语言类型# package com.devsun.action.pm.room; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFFont; import org.apache.poi.hssf.usermodel.HSSFRichTextString; 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; import org.springframework.beans.factory.annotation.Autowired; import com.devsun.action.BaseAction; import com.devsun.biz.pm.BuildingBiz; import com.devsun.biz.pm.HouseTypeBiz; import com.devsun.biz.pm.ProjectBiz; import com.devsun.biz.pm.RoomInfoBiz; import com.devsun.common.Constants; import com.devsun.entity.pm.RoomInfo; import com.dongdong.plugins.permissions.PermissionsAnnotation; /** * 导出房间面积/价格设置 * @author zhangyan * */ public class ZhangYanAction extends BaseAction { private static final long serialVersionUID = -940973448889670031L; @Autowired private RoomInfoBiz roomInfoBiz; //这个是自己获得list的类 @Autowired private ProjectBiz projectBiz;//这个是自己获得list的类 @Autowired private BuildingBiz BuildingBiz;//这个是自己获得list的类 @Autowired private HouseTypeBiz houseTypeBiz;//这个是自己获得list的类 // 楼栋Id private int buildingid; //导出排序 private int paishu = 0 ; @PermissionsAnnotation(name="导出房间面积/价格设置") public String execute() throws Exception { List<RoomInfo> listRoom = roomInfoBiz.daochu(buildingid,paishu); // 创建excel int i = 0; int j = 0; for(RoomInfo info:listRoom){ i = info.getProjectId(); j = info.getBuildingId(); break; } String pro = "项目:"+ projectBiz.findById(i).getProjectName()+"--楼栋:"+BuildingBiz.findById(j).getBuildingName();; String name = pro+"--房间面积价格设置"; //以上都是获得导出excel名字 downLoadFile(createExcel(listRoom, name), "房间面积/价格设置.xls"); return null; } /** * 创建excel标题 * @param academyList * @param title * @param resultMap * @return * @throws Exception */ public HSSFWorkbook createExcel(List<RoomInfo> listRoom, String title)throws Exception { try { HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet(); wb.setSheetName(0, title); HSSFRow titleRow = sheet.createRow(0); HSSFRow head = sheet.createRow(1); // 创建标题 createTitle(wb, titleRow, title); createCell(wb, head, 0, "编号",HSSFColor.GREY_25_PERCENT.index); createCell(wb, head, 1, "单元",HSSFColor.GREY_25_PERCENT.index); createCell(wb, head, 2, "楼层",HSSFColor.GREY_25_PERCENT.index); createCell(wb, head, 3, "号码",HSSFColor.GREY_25_PERCENT.index); createCell(wb, head, 4, "房间号码",HSSFColor.GREY_25_PERCENT.index); createCell(wb, head, 5, "户型构成",HSSFColor.GREY_25_PERCENT.index); createCell(wb, head, 6, "预售套内面积(㎡)",HSSFColor.RED.index); createCell(wb, head, 7, "预售建筑面积(㎡)",HSSFColor.RED.index); createCell(wb, head, 8, "计价方式",HSSFColor.RED.index); createCell(wb, head, 9, "底单价(元)",HSSFColor.RED.index); createCell(wb, head, 10, "底总价(元)",HSSFColor.RED.index); createCell(wb, head, 11,"表单价(元)",HSSFColor.RED.index); createCell(wb, head, 12, "表总价(元)",HSSFColor.RED.index); createCell(wb, head, 13, "门牌号",HSSFColor.RED.index); createCell(wb, head, 14, "销售状态",HSSFColor.GREY_25_PERCENT.index); sheet.addMergedRegion(getCellRangeAddress(1, 1, 1, 15)); int row=2;//行的记录数 int index=0; if(listRoom!=null &&listRoom.size()>0){ for (RoomInfo roomInfo : listRoom){ HSSFRow bodyRow = sheet.createRow(row++); index++; String jijia = ""; String sellStatus = ""; String menpaihao = ""; //这3个值我把他精简了 获取比较复杂 createCell(wb, bodyRow, 0, String.valueOf(roomInfo.getId()), HSSFColor.WHITE.index);//编号 createCell(wb, bodyRow, 1, roomInfo.getUtil()+"单元",HSSFColor.WHITE.index);//单元 createCell(wb, bodyRow, 2, String.valueOf(roomInfo.getStorey()),HSSFColor.WHITE.index);//楼层 createCell(wb, bodyRow, 3, roomInfo.getNum(),HSSFColor.WHITE.index);//号码 createCell(wb, bodyRow, 4, roomInfo.getRoomNum(),HSSFColor.WHITE.index);//房间号码 createCell(wb, bodyRow, 5, houseTypeBiz.findHouseType(roomInfo.getHoseTypeId()),HSSFColor.WHITE.index);//户型 createCell(wb, bodyRow, 6, String.valueOf(roomInfo.getPlanSaleIndoorArea()),HSSFColor.WHITE.index);//预售套内 createCell(wb, bodyRow, 7, String.valueOf(roomInfo.getPlanSaleBuildingArea()),HSSFColor.WHITE.index);//预售建筑 createCell(wb, bodyRow, 8, jijia,HSSFColor.WHITE.index);//计价方式 createCell(wb, bodyRow, 9, String.valueOf(roomInfo.getBottomPrice()),HSSFColor.WHITE.index);//表单价 createCell(wb, bodyRow, 10, String.valueOf(roomInfo.getBottomTotal()),HSSFColor.WHITE.index);//表总价 createCell(wb, bodyRow, 11, String.valueOf(roomInfo.getPrice()),HSSFColor.WHITE.index);//底单价 createCell(wb, bodyRow, 12, String.valueOf(roomInfo.getTotalPrice()),HSSFColor.WHITE.index);//底总价 createCell(wb, bodyRow, 13, menpaihao,HSSFColor.WHITE.index);//门牌号 createCell(wb, bodyRow, 14, sellStatus,HSSFColor.WHITE.index);//销售状态 } // 设置列宽 sheet.setColumnWidth(0, 3000);// 单位 sheet.setColumnWidth(1, 3000);// 单位 sheet.setColumnWidth(2, 3000);// 单位 sheet.setColumnWidth(3, 3000);// 单位 sheet.setColumnWidth(4, 3000);// 单位 sheet.setColumnWidth(5, 3000);// 单位 sheet.setColumnWidth(6, 5000);// 单位 sheet.setColumnWidth(7, 5000);// 单位 sheet.setColumnWidth(8, 3000);// 单位 sheet.setColumnWidth(9, 4000);// 单位 sheet.setColumnWidth(10, 4000);// 单位 sheet.setColumnWidth(11, 4000);// 单位 sheet.setColumnWidth(12, 4000);// 单位 sheet.setColumnWidth(13, 3000);// 单位 sheet.setColumnWidth(14, 3000);// 单位 } return wb; } catch (Exception e) { e.printStackTrace(); } return null; } /** * @功能:创建标题 * @param wb * @param titleRow * @param title */ private void createTitle(HSSFWorkbook wb, HSSFRow titleRow, String title) { titleRow.setHeight((short) 600); HSSFCell cell = titleRow.createCell(0); HSSFRichTextString h = new HSSFRichTextString(title); // 字体样式 HSSFFont font = wb.createFont(); font.setColor(HSSFColor.BLACK.index); font.setFontHeightInPoints((short) 18); font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); h.applyFont(font); cell.setCellValue(h); cell.setCellStyle(getCellDefaultStyle(wb,HSSFColor.WHITE.index)); } /** * @功能:获取单元格默认样式 * @param wb * @return */ private HSSFCellStyle getCellDefaultStyle(HSSFWorkbook wb,short color) { // 设置单元格样式 HSSFCellStyle cellstyle = wb.createCellStyle(); cellstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION);// 设置水平对齐方式 cellstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 设置垂直对齐方式 cellstyle.setFillForegroundColor(color); cellstyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); cellstyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); cellstyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); cellstyle.setBorderRight(HSSFCellStyle.BORDER_THIN); cellstyle.setBorderTop(HSSFCellStyle.BORDER_THIN); cellstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); cellstyle.setWrapText(true); return cellstyle; } /** * @功能:创建cell * @param wb * @param row * @param col * @param val */ private void createCell(HSSFWorkbook wb, HSSFRow row, int col, String val,short color) { HSSFCell cell = row.createCell(col); cell.setCellValue(val); if(val!=null){ System.out.println(val); if(!val.endsWith(".00")&&!val.endsWith(".000")){ cell.setCellStyle(getCellDefaultStyle(wb,color)); }else{ cell.setCellStyle(getCellMoneyStyle(wb,color)); } }else{ cell.setCellStyle(getCellDefaultStyle(wb,color)); } } private HSSFCellStyle getCellMoneyStyle(HSSFWorkbook wb,short color) { // 设置单元格样式 HSSFCellStyle cellstyle = wb.createCellStyle(); cellstyle.setAlignment(HSSFCellStyle.ALIGN_RIGHT);// 设置水平对齐方式 cellstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 设置垂直对齐方式 cellstyle.setFillForegroundColor(color); cellstyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); cellstyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); cellstyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); cellstyle.setBorderRight(HSSFCellStyle.BORDER_THIN); cellstyle.setBorderTop(HSSFCellStyle.BORDER_THIN); cellstyle.setAlignment(HSSFCellStyle.ALIGN_RIGHT); cellstyle.setWrapText(true); return cellstyle; } @SuppressWarnings("deprecation") private CellRangeAddress getCellRangeAddress(int startRow, int endRow, int startColumn, int endColumn) { return new CellRangeAddress(startRow - 1, endRow - 1, startColumn - 1, endColumn - 1); } public int getBuildingid() { return buildingid; } public void setBuildingid(int buildingid) { this.buildingid = buildingid; } public int getPaishu() { return paishu; } public void setPaishu(int paishu) { this.paishu = paishu; } } ``` [1]: http://p.qpic.cn/open3rd/100733789/A60E2E409FF097EC5465137449EFF6E0/sQcLVwMmibggmrFfSNsn02PAeE7tNsMuqYI918seqgF2YGibQ7rWXgFs1ERyXiasa6g/0#w=1439&h=517&t=jpg [2]: http://p.qpic.cn/open3rd/100733789/A60E2E409FF097EC5465137449EFF6E0/vnHGUH2yicaiaE3yvsuMkXhOZ99HlprHCqd7IKd9muYNb4395cdmwSsLA0WFFSYoF9/0#w=241&h=232&t=jpg
相见恨晚的超实用网站
搞学习 知乎:www.zhihu.com 简答题:http://www.jiandati.com/ 网易公开课:https://open.163.com/ted/ 网易云课堂:https://study.163.com/ 中国大学MOOC:www.icourse163.org 网易云课堂:study.163.com 哔哩哔哩弹幕网:www.bilibili.com 我要自学网:www.51zxw
花了20分钟,给女朋友们写了一个web版群聊程序
参考博客 [1]https://www.byteslounge.com/tutorials/java-ee-html5-websocket-example
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
字节跳动视频编解码面经
引言 本文主要是记录一下面试字节跳动的经历。 三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
Python 基础(一):入门必备知识
目录1 标识符2 关键字3 引号4 编码5 输入输出6 缩进7 多行8 注释9 数据类型10 运算符10.1 常用运算符10.2 运算符优先级 1 标识符 标识符是编程时使用的名字,用于给变量、函数、语句块等命名,Python 中标识符由字母、数字、下划线组成,不能以数字开头,区分大小写。 以下划线开头的标识符有特殊含义,单下划线开头的标识符,如:_xxx ,表示不能直接访问的类属性,需通过类提供
这30个CSS选择器,你必须熟记(上)
关注前端达人,与你共同进步CSS的魅力就是让我们前端工程师像设计师一样进行网页的设计,我们能轻而易举的改变颜色、布局、制作出漂亮的影音效果等等,我们只需要改几行代码,不需...
国产开源API网关项目进入Apache孵化器:APISIX
点击蓝色“程序猿DD”关注我回复“资源”获取独家整理的学习资料!近日,又有一个开源项目加入了这个Java开源界大名鼎鼎的Apache基金会,开始进行孵化器。项目名称:AP...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
编写Spring MVC控制器的14个技巧
本期目录 1.使用@Controller构造型 2.实现控制器接口 3.扩展AbstractController类 4.为处理程序方法指定URL映射 5.为处理程序方法指定HTTP请求方法 6.将请求参数映射到处理程序方法 7.返回模型和视图 8.将对象放入模型 9.处理程序方法中的重定向 10.处理表格提交和表格验证 11.处理文件上传 12.在控制器中自动装配业务类 ...
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
求小姐姐抠图竟遭白眼?痛定思痛,我决定用 Python 自力更生!
点击蓝色“Python空间”关注我丫加个“星标”,每天一起快乐的学习大家好,我是 Rocky0429,一个刚恰完午饭,正在用刷网页浪费生命的蒟蒻...一堆堆无聊八卦信息的网页内容慢慢使我的双眼模糊,一个哈欠打出了三斤老泪,就在此时我看到了一张图片:是谁!是谁把我女朋友的照片放出来的!awsl!太好看了叭...等等,那个背景上的一堆鬼画符是什么鬼?!真是看不下去!叔叔婶婶能忍,隔壁老王的三姨妈的四表...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC...
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下...
【管理系统课程设计】美少女手把手教你后台管理
【文章后台管理系统】URL设计与建模分析+项目源码+运行界面 栏目管理、文章列表、用户管理、角色管理、权限管理模块(文章最后附有源码) 1. 这是一个什么系统? 1.1 学习后台管理系统的原因 随着时代的变迁,现如今各大云服务平台横空出世,市面上有许多如学生信息系统、图书阅读系统、停车场管理系统等的管理系统,而本人家里就有人在用烟草销售系统,直接在网上完成挑选、购买与提交收货点,方便又快捷。 试想,若没有烟草销售系统,本人家人想要购买烟草,还要独自前往药...
8年经验面试官详解 Java 面试秘诀
作者 |胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。 Java程序员准备和投递简历的实...
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车?某胡同口的煎饼摊一年能卖出多少个煎饼?深圳有多少个产品经理?一辆公交车里能装下多少个乒乓球?一个正常成年人有多少根头发?这类估算问题,被称为费米问题,是以科学家费米命名的。为什么面试会问这种问题呢?这类问题能把两类人清楚地区分出来。一类是具有文科思维的人,擅长赞叹和模糊想象,它主要依靠的是人的第一反应和直觉,比如小孩...
碎片化的时代,如何学习
今天周末,和大家聊聊学习这件事情。 在如今这个社会,我们的时间被各类 APP 撕的粉碎。 刷知乎、刷微博、刷朋友圈; 看论坛、看博客、看公号; 等等形形色色的信息和知识获取方式一个都不错过。 貌似学了很多,但是却感觉没什么用。 要解决上面这些问题,首先要分清楚一点,什么是信息,什么是知识。 那什么是信息呢? 你一切听到的、看到的,都是信息,比如微博上的明星出轨、微信中的表情大战、抖音上的...
相关热词 c#选择结构应用基本算法 c# 收到udp包后回包 c#oracle 头文件 c# 序列化对象 自定义 c# tcp 心跳 c# ice连接服务端 c# md5 解密 c# 文字导航控件 c#注册dll文件 c#安装.net
立即提问