精华内容
下载资源
问答
  • Java导出Excel表合并行合并
    千次阅读
    2020-08-25 09:34:46

    Controller层代码

    @RequestMapping(value = "/productExportExcel", method = RequestMethod.GET)
    	public void productExportExcel(HttpServletRequest request,HttpServletResponse response) throws Exception {
    		Record rd = this.getCurrentUser();
    		try {
    			List<Integer> columnWidthList = new ArrayList<Integer>();//列宽 用list比较方便在某处插入新字段和数数
    			columnWidthList.add(20);columnWidthList.add(20);columnWidthList.add(20);
    			columnWidthList.add(20);columnWidthList.add(20);columnWidthList.add(20);
    			columnWidthList.add(15);
    			String[] title = {"一级产品线","详细描述","二级产品线","详细描述","三级产品线","详细描述"};
    			String[] key = {"NAME","DETAIL","Z_NAME","Z_DETAIL","ZZ_NAME","ZZ_DETAIL"};
    			String fileName = "产品线信息表";
    			exportExcel.productExport(request, response, columnWidthList, title, key, fileName);
    			logService.showLog(fileName, "4",rd,request);
    		} catch (Exception e) {
    			// TODO: handle exception
    			logger.error(e.getMessage());
    			String fileName = "产品线信息表";
    			logService.showLog(fileName, "5",rd,request);
    		}
    	}
    

    Service层代码

    public void productExport(HttpServletRequest request,HttpServletResponse response,List<Integer> columnWidthList,String[] title,String[] key,String fileName) throws Exception{
    		/*
    		 * 1.设置样式
    		 */
    		HSSFWorkbook workbook = new HSSFWorkbook(); 
    		HSSFFont titleFont = workbook.createFont(); //属性字体
    		HSSFFont valueFont = workbook.createFont(); //值字体
    		HSSFCellStyle titleStyle = workbook.createCellStyle();//属性格式
    		HSSFCellStyle valueStyle = workbook.createCellStyle();//值格式
    		setStyle(titleFont,valueFont,titleStyle,valueStyle);
    		
        	HSSFSheet sheet = workbook.createSheet(fileName);
        	for (int i = 0; i < columnWidthList.size(); i++) {
        		sheet.setColumnWidth(i,(int) ((columnWidthList.get(i)+0.72)*256));
        	}
        	/*
        	 * 2.处理查询条件,获取导出数据 
        	 */
        	List<Object> param = new ArrayList<Object>();
    		StringBuffer from = new StringBuffer(" FROM pro_product a left join pro_product b on a.code=b.PARENT_CODE and b.STATE='1' LEFT JOIN pro_product c on b.CODE=c.PARENT_CODE and c.STATE='1' ");
    		StringBuffer where = new StringBuffer(" where a.PARENT_CODE='' and a.state='1' ");
    		String sql = "SELECT a.CODE,a.NAME,a.DETAIL,a.PARENT_CODE,b.CODE Z_CODE,b.NAME Z_NAME,b.DETAIL Z_DETAIL,b.PARENT_CODE Z_PARNET_CODE,c.CODE ZZ_CODE,c.NAME ZZ_NAME,c.DETAIL ZZ_DETAIL,c.PARENT_CODE ZZ_PARENT_CODE " + from+where.toString()+" ORDER BY a.sort,b.sort,c.sort ASC";//便于打印 
    		List<Map<String, Object>> list = registerService.findSQL(sql, param.toArray());
    		
        	List<List<Integer>> rowList = new ArrayList<List<Integer>>();//合并行
        	String[] rowKeys = {"NAME","DETAIL","Z_NAME","Z_DETAIL","",""};//需要合并列名,与key对应,不需要合并的列对应的数组位置列名为空字符串即可跳过
        	String[] rowValue = {"NAME","DETAIL","Z_NAME","Z_DETAIL","",""};//
        	for (int i = 0; i < rowKeys.length; i++) {
        		rowList.add(new ArrayList<Integer>());
        	}
    		/*
    		 * 3.填充数据
    		 */
        	if(list.size()>0){
        		//列名
        		HSSFRow rowTitle = sheet.createRow(0);
        		HSSFCell[] cellTitle = new HSSFCell[title.length];
        		for (int i = 0; i < cellTitle.length; i++) {
        			cellTitle[i] = rowTitle.createCell(i);
        			cellTitle[i].setCellStyle(titleStyle);
        			cellTitle[i].setCellValue(new HSSFRichTextString(title[i]));
    			}
        		HSSFRow[] row = new HSSFRow[list.size()];
        		HSSFCell[][] cell = new HSSFCell[title.length][list.size()];
        		Map<Object,String> typeMap = new HashMap<Object, String>();
        		for (int i = 0; i < list.size(); i++) {
        			/*System.out.println((i+1)+"/"+list.size());*/
        			//行
        			row[i] = sheet.createRow(i+1);
        			row[i].setHeight((short) ((30+0.72)*20));
        			Map<String, Object> content = list.get(i);
        			//判断合并内容
        			for (int j = 0; j < rowKeys.length; j++) {
        				if(!"".equals(rowKeys[j])){
        					if(null==content.get(rowKeys[j])){
        						rowList.get(j).add(i);
        						rowValue[j] = "";
        					}else if(!rowValue[j].equals(content.get(rowKeys[j]).toString())){
        						rowList.get(j).add(i);
        						rowValue[j] = content.get(rowKeys[j]).toString();
        					}
        				}
        			}
        			//遍历导出数据
        			for (int j = 0; j < title.length; j++) {
        				//列
    					cell[j][i] = row[i].createCell(j);
    					cell[j][i].setCellStyle(valueStyle);
    					
    					/*String contentValue = "";
    					//特殊数据处理
    					cell[j][i].setCellValue(contentValue);*/
    					String contentValue = "";
    					//特殊数据处理
    					if(null!=content.get((key[j]))){
    					  if(key[j].equals("DETAIL")||key[j].equals("Z_DETAIL")||key[j].equals("ZZ_DETAIL")){
    							contentValue = content.get(key[j]).toString().replaceAll("&lt;br&gt;",String.valueOf((char)10));
    						}else{
    							contentValue = content.get(key[j]).toString();
    						}
    					}
    					cell[j][i].setCellValue(contentValue);
    				}
    			}
        		
        		//合并单元格
        		for (int j = 0; j < rowList.size(); j++) {
    				List<Integer> rlist = rowList.get(j);
    				if(rlist.size()>0){
    					if(rlist.get(rlist.size()-1)!=list.size()) rlist.add(list.size());
    					for (int i = 0; i < rlist.size()-1; i++) {
    						sheet.addMergedRegion(new CellRangeAddress(rlist.get(i)+1, rlist.get(i+1),j, j));
    					}
    				}
    				
    			}
        	}
        	fileName += ".xls";
        	response.setContentType("application/octet-stream");
        	response.setHeader(
        			"Content-Disposition",
        			"attachment;"
        					+ (new StringBuilder("filename=").append(encode(
        							request, fileName)).toString()));
        	response.addHeader("Content-Length", "");
        	
        	ServletOutputStream localServletOutputStream = response
        			.getOutputStream();
        	workbook.write(localServletOutputStream);
        	localServletOutputStream.flush();
        	localServletOutputStream.close();
    	}
    

    设置样式,设置列宽方法

    public void setStyle(HSSFFont titleFont,HSSFFont valueFont,HSSFCellStyle titleStyle,HSSFCellStyle valueStyle){
    		//属性字体
    		titleFont.setFontHeightInPoints((short) 11);
    		titleFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
    		//值字体
    		valueFont.setFontHeightInPoints((short) 10);
    		//属性格式
    		titleStyle.setFont(titleFont);
    		titleStyle.setBorderBottom((short) 1);
    		titleStyle.setBorderLeft((short) 1);
    		titleStyle.setBorderRight((short) 1);
    		titleStyle.setBorderTop((short) 1);
    		titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
    		titleStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
    		//值格式
    		valueStyle.setFont(valueFont);
    		valueStyle.setWrapText(true);
    		valueStyle.setBorderBottom((short) 1);
    		valueStyle.setBorderLeft((short) 1);
    		valueStyle.setBorderRight((short) 1);
    		valueStyle.setBorderTop((short) 1);
    		valueStyle.setBottomBorderColor(HSSFColor.BLACK.index);
    		valueStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
    		valueStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
    	}
    

    设置编码方法

    public String encode(HttpServletRequest request, String fileName)
    			throws UnsupportedEncodingException {
    		Boolean isIE = false;
    		String[] IEBrowserSignals = {"MSIE", "Trident", "Edge"};
            String userAgent = request.getHeader("User-Agent");
            userAgent = userAgent == null ? "" : userAgent;
            for (String signal : IEBrowserSignals) {
                if (userAgent.contains(signal)){  
                	isIE = true;
                }
            }
            if (isIE) {
            	fileName = java.net.URLEncoder.encode(fileName, "UTF-8");
            } else {
            	fileName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");
            }
            return fileName;
    	}
    

    前端代码就不发了,就一个导出按钮加一个url带参数,没其他的了

    更多相关内容
  • //表头1 要合并的格表头描述字段 已@分割 注意 这里的表头是至第一行表头 var gauge_head2="日期@交易量汇总@设备占比@WEB占比@APP占比@互生币支付@互商订单支付@代兑互生币@兑换互生币@货币转银行";// 表头描述...
  • 主要介绍了Java导出excel时合并同一列中相同内容的,需要的朋友可以参考下
  • java导出Excel 时候 相同行合并(可合并多列); 已测试通过;
  • MySQL多选数据合并成为一行--GROUP_CONCAT()当数据中出现一对多,且需要把多的数据转换为一,形成一对一的数据形式。此时,可以通过程序实现,也可以通过sql直接实现。此处采取SQL方式进行数据处理。SQL方法:利用...

    MySQL多选数据合并成为一行--GROUP_CONCAT()

    当数据中出现一对多,且需要把多的数据转换为一,形成一对一的数据形式。

    此时,可以通过程序实现,也可以通过sql直接实现。此处采取SQL方式进行数据处理。

    SQL方法:

    利用GROUP_CONCAT ()方法,参数为需要合并的字段,合并的字段分隔符默认为逗号,可通过参数separator指定。此方法一般与 GROUP BY配合使用。

    例子如下 :

    1、 测试数据

    Sql:

    select a.goods_name as '商品名', a.supply_name '供应商' from tb_goods_info as a;

    6dbd8669c94e8fe5ce8f611d249c4b60.png

    2、 没有GROUP BY情况下,进行多端数据的合并。此时一般无法达到要求。

    Sql:

    select GROUP_CONCAT(a.goods_name) as '商品名', a.supply_name '供应商' from tb_goods_info as a;

    c0f1d7aae9ff8471ed7f7c28f2c642b9.png

    3、 与GROUP BY配合使用,使用默认分隔符。

    Sql:

    select GROUP_CONCAT(a.goods_name) as '商品名', a.supply_name '供应商'

    from tb_goods_info as a

    GROUP BY a.supply_name;

    292bfdedfeb920e5d5c79b6bfc27b37c.png

    4、 与GROUP BY配合使用,指定分隔符。

    Sql:

    select GROUP_CONCAT(a.goods_name SEPARATOR '--/--') as '商品名', a.supply_name '供应商'

    from tb_goods_info as a

    GROUP BY a.supply_name;

    e45b0fee0047dbad4480a8ba358d6ed5.png

    展开全文
  • java excel 一行合并多个单元格

    千次阅读 2019-10-23 10:25:35
    最主要的是AAA占两个单元格并合并,BBB占个单元格,CCC占两个单元格并合并。 代码如下: import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import org.apache.poi.hssf....

    效果图如下:

    最主要的是AAA占两个单元格并合并,BBB占一个单元格,CCC占两个单元格并合并。

    代码如下:

    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFCellStyle;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.util.CellRangeAddress;
    
    public class TestExcel {
    
        public static void main(String[] args) throws IOException {
    
            HSSFWorkbook workbook = new HSSFWorkbook();
    
            HSSFCellStyle style = workbook.createCellStyle();
            style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
            style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
    
            HSSFSheet sheet = workbook.createSheet("sheet");
    
            HSSFRow row0 = sheet.createRow(0);
            HSSFCell cell_00 = row0.createCell(0);
            cell_00.setCellStyle(style);
            cell_00.setCellValue("AAA");
            CellRangeAddress region = new CellRangeAddress(0, 0, 0, 1);
            sheet.addMergedRegion(region);
            
            HSSFCell cell_01 = row0.createCell(2);
            cell_01.setCellStyle(style);
            cell_01.setCellValue("BBB");
            region = new CellRangeAddress(0, 0, 2, 2);
            sheet.addMergedRegion(region);
            
            HSSFCell cell_02 = row0.createCell(3);
            cell_02.setCellStyle(style);
            cell_02.setCellValue("CCC");
            region = new CellRangeAddress(0, 0, 3, 4);
            sheet.addMergedRegion(region);
    
            File file = new File("/home/liu/test/demo.xls");
            FileOutputStream fout = new FileOutputStream(file);
            workbook.write(fout);
            fout.close();
        }
    
    }

    其中容易出错的是:

     HSSFCell cell_00 = row0.createCell(0);

     HSSFCell cell_01 = row0.createCell(2);

     HSSFCell cell_02 = row0.createCell(3);

    新的单元格所在的位置是按照合并后的单元格来计算的。

    展开全文
  • 这是个MyEclipse项目,如果用是用其它开发工具则可在工具中新建个项目把源码与第三方包拷出放入新建项目就可,有样例和详细注释。
  • 使用codec的multiline插件实现多行匹配,这是个可以将多行进行合并的插件,而且可以使用what指定将匹配与前面的行合并还是和后面的行合并。 1.java日志收集测试 input { stdin { codec => multiline {...

    介绍

    使用codec的multiline插件实现多行匹配,这是一个可以将多行进行合并的插件,而且可以使用what指定将匹配到的行与前面的行合并还是和后面的行合并。
    1.java日志收集测试

    input {
    	stdin {
    		codec => multiline {
    			pattern => "^\["						//以"["开头进行正则匹配
    			negate => true 							//正则匹配成功
    			what => "previous"						//和前面的内容进行合并
    		}
    	}
    }
    output {
    	stdout {
    		codec => rubydebug 
    	}
    }
    

    2.查看elasticsearch日志,已"["开头

    # cat /var/log/elasticsearch/cluster.log 
    [2018-05-29T08:00:03,068][INFO ][o.e.c.m.MetaDataCreateIndexService] [node-1] [systemlog-2018.05.29] creating index, cause [auto(bulk api)], templates [], shards [5]/[1], mappings []
    [2018-05-29T08:00:03,192][INFO ][o.e.c.m.MetaDataMappingService] [node-1] [systemlog-2018.05.29/DCO-zNOHQL2sgE4lS_Se7g] create_mapping [system]
    [2018-05-29T11:29:31,145][INFO ][o.e.c.m.MetaDataCreateIndexService] [node-1] [securelog-2018.05.29] creating index, cause [auto(bulk api)], templates [], shards [5]/[1], mappings []
    [2018-05-29T11:29:31,225][INFO ][o.e.c.m.MetaDataMappingService] [node-1] [securelog-2018.05.29/ABd4qrCATYq3YLYUqXe3uA] create_mapping [secure]
    

    3.配置logstash

    #vim /etc/logstash/conf.d/java.conf
    input {
            file {
                    path => "/var/log/elasticsearch/cluster.log"
                    type => "elk-java-log"
                    start_position => "beginning"
                    stat_interval => "2"
                    codec => multiline {
                            pattern => "^\["
                            negate => true
                            what => "previous"
                    }
            }
    }
    output {
            if [type] == "elk-java-log" {
                    elasticsearch {
                            hosts => ["192.168.1.31:9200"]
                            index => "elk-java-log-%{+YYYY.MM.dd}"
                    }
            }
    }
    

    4.启动

    logstash -f /etc/logstash/conf.d/java.conf -t
    systemctl restart logstash 
    

    5.head插件查看
    在这里插入图片描述
    6.kibana添加日志
    在这里插入图片描述
    在这里插入图片描述

    参考链接 :

    logstash收集java日志,多行合并成一行 : https://www.cnblogs.com/lovelinux199075/p/9104389.html

    展开全文
  • java poi导出 合并行 合并

    千次阅读 2019-07-29 16:16:26
    在excel 导出的时候 碰到要合并行 和合并列的问题 这里使用了个重要的函数: CellRangeAddress(int, int, int, int) ...忘记给每列都设置样式,这就导致在合并后后面的列没有设置样式。 sty...
  • **使用java实现合并Excel表格中指定列中相同的** 1、话不多说,先上代码 public static void main(String[] args) throws IOException, InvalidFormatException { File file=new File("C:\\Users\\MrYan\\...
  • 使用java开发的个大文件切割成多个小文件的工具,只要安装了java环境,之间点击运行就了。
  • JAVA 导出Excel 单元格合并

    千次阅读 2022-02-15 18:28:11
    java 导出Excel 合并单元格
  • Excel合并单元格既可以用鼠标操作,也可以用快捷键;其中用鼠标操作共有三个选项,分别为合并后居中、跨越...也可分为两处情况,种是按列合并,另种是按行合并。以下是Excel合并单元格及内容的方法,操作中所用 ...
  • oracle多行数据合并一行

    千次阅读 2021-07-01 14:50:50
    、将查询的多条部门数据名称合并成一条(逗号隔开)。sql如下: select (wm_concat(t.name)) as AllName from test t
  • Java代码对Excel进行增,删,改。及样式
  • java excel 合并单元格

    千次阅读 2020-12-11 14:44:05
    Excel 导入导出,大部分使用 easy-poi 或者 easy-excel 两个工具类就可以了,对于简单的一行一行(像关系型数据库表记录)的导出那可真的是啪的一声,很快啊。 就像下图这样: 可是要想导出成下图: 这就有点难度...
  • Java中如何把两个数组合并

    千次阅读 2021-02-12 16:38:24
    Java中,如何把两个String[]合并为一个?看起来是一个很简单的问题。...在apache-commons中,有一个ArrayUtils.addAll(Object[], Object[])方法,可以让我们一行搞定:String[]both =(String[])Ar...
  • 由于第列需要根据日期合并行, 而且行数不是固定的, 是需要根据上面的筛选条件, 查询出来, 将结果按照日期分组合并, 所以左边第列需要合并是灵活多变的, 不能简单按照合并列那样。 下面是我的解决方案, 如有...
  • 将SQL语句合并一行

    千次阅读 2018-03-29 18:02:54
    当然可以手工进行合并一行,如果sql行特别多的话,这个方法就捉襟见肘了,解决方法是: 将上面代码复制新建的Word文件里,然后打开查找替换(英文状态下shift+6)替换为空格,如图(^p代表段落标记) 替换...
  • 多行数据合并一行

    千次阅读 2018-10-30 16:46:42
    然而现在只能在大数据平台(maxcompute)编写sql,不能借助任何高级语句(如java),要实现将表内的数据以一行的形式存储   with a1 as ( select user_level,count(id) as count from XXXXXXX where ...
  • java poi 跨行合并 并赋值

    千次阅读 2018-05-29 11:27:33
     //生成标题,第一行标题默认下标为:0,这里 sheet.createRow(0);创建第一行 HSSFRow row = sheet.createRow(0); // 产生表格标题行  for (int j = 0; j ; j++) {   HSSFCell cell = row.createCell(j);...
  • 关于java EXCEL poi 合并后无法显示或无法设置边框问题 【本人亲测】 excel poi 新手! 坑了1.5天!
  • 需求:合并一行和第二行 解决: CellRangeAddress region = new CellRangeAddress(0, 1, 0, 0); sheet.addMergedRegion(region); 示例图: 解释1: firstRow,lastRow,即合并从第N行到第N行,从0开始 ...
  • //记录合并了多少 File templateFile = TemplateFileUtil.getTemplateFile(agentId, request, templateCode); JxlsWorkBook jwb = new JxlsWorkBook(templateFile); for (int i = 0; i ()-1;i++) { ...
  • Java使用POI操作Excel合并单元格

    千次阅读 2022-04-07 15:32:30
    1、引入poi依赖 <!--poi--> <dependency> <groupId>org.apache.poi<...2、合并单元格两种方案: ...1)数据有规则:比如部门和部门下的员工,对多,返回数据结构是类似树结构 p
  • java导出excel合并行跟列

    千次阅读 2014-05-07 15:36:54
    sheet.addMergedRegion(new CellRangeAddress(row + i, row + i, 2, 4));// 分公司数据单元格合并
  • ["/opt/logs/catalina.out"] } } filter { # 以-------------开头的全忽略 if ([message] =~ "-------------") { drop {} } # 没匹配上这种正则开头的,全部合并到匹配上正则的里面作为段 multiline { ...
  • 网上找的某个大佬的,忘了大佬地址了,就不附链接了。... * @param mergeIndex 合并单元格的列(0,1,2)代表前三列需要行合并。必须要传值,也必须从0开始传。 */ public static String createE
  • Java实现导出excel对重复数据进行单元格合并

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 170,913
精华内容 68,365
关键字:

java 合并到一行

java 订阅