精华内容
下载资源
问答
  • //同组信息合并单元格,添加限制条件 //id就是每条数据数据的唯一表示,进行数据前后比对保证相同的数据进行单元格合并 if (PerValue == CurValue && rows[row-1] && rows[row] && rows[row]["id"] == rows[row...
    	function MergeCells(tableID, fldList) {
    	    var Arr = fldList.split(",");
    	    var dg = $('#' + tableID);
    	    var fldName;
    	    var RowCount = dg.datagrid("getRows").length;
    	    var span;
    	    var PerValue = "";
    	    var CurValue = "";
    	    var length = Arr.length - 1;
    	    var rows = dg.datagrid("getRows");
    	
    	    for (i = length; i >= 0; i--) {
    	        fldName = Arr[i];
    	        PerValue = "";
    	        span = 1;
    	
    	        for (row = 0; row <= RowCount; row++) {
    	            if (row == RowCount) {
    	                CurValue = "";
    	            }
    	            else {
    	                CurValue = dg.datagrid("getRows")[row][fldName];
    	
    	            }
    	
    	            //同组信息合并单元格,添加限制条件  
                    //id就是每条数据数据的唯一表示,进行数据前后比对保证相同的数据进行单元格合并
    	            if (PerValue == CurValue && rows[row-1] && rows[row] && rows[row]["id"] == rows[row - 1]["id"])
    	            {
    	                span += 1;
    	            }
    	            else {
    	                var index = row - span;
    	                dg.datagrid('mergeCells', {
    	                    index: index,
    	                    field: fldName,
    	                    rowspan: span,
    	                    colspan: null
    	
    	                });
    	
    	                span = 1;
    	                PerValue = CurValue;
    	            }
    	        }
    	
    	    }
    	
    	}

    在数据加载成功的函数中回调函数,选择需要合并的单元格,

     onLoadSuccess: function (data) {
                        if (data.rows.length > 0) {
                            //调用mergeCellsByField()合并单元格
                            MergeCells("qryGrid", "siteName,product,process,locationname,equipmentId,manQty,dateTime,shift,scanQty,scanType");
                        }
    	            }
    展开全文
  • Excel合并单元格批量填充的2种方法

    万次阅读 2018-08-24 14:25:55
    他要把这样一份数据放入数据库,显然直接导入是不行的,结构化数据库中容不下这种不伦不类的合并单元格。 需要把合并单元格中的内容写到其对应的每一个拆分后的单元格中。 数据分析师妙计1:巧用空值填充 ...

    合并单元格问题

    拿到了这样一个Excel表格,根据层级关系,里面有大量的合并单元格。他要把这样一份数据放入数据库,显然直接导入是不行的,结构化数据库中容不下这种不伦不类的合并单元格。
    这里写图片描述

    需要把合并单元格中的内容写到其对应的每一个拆分后的单元格中。

    数据分析师妙计1:巧用空值填充

    1. 选中目标列,取消合并后居中
    2. 定位空值
    3. 批量填充空值

    1) 取消合并居中
    如下图所示,取消合并居中后,每一个合并单元格只有第一个单元格是有值的,其他的单元格都是空值。
    这里写图片描述
    2) 空值定位
    选中目标列,在Excel的开始菜单栏下,找到“查找和选择”联级菜单,点击“定位条件(s)”子菜单,
    这里写图片描述
    也可以通过快捷键ctrl+g调出定位功能,如下图所示:
    这里写图片描述
    定位条件选择“空值“这一项,点击确定。
    这里写图片描述
    确定之后,如下图所示,会对定位出的空值进行灰暗标记:
    这里写图片描述

    3) 批量填充空值
    定位出空值后,千万不要乱点,因为鼠标一动,定位出的空值就没了。接下来要做的是直接敲击键盘上的等于号,输入公式后同时按下:ctrl+enter
    这里写图片描述

    数据分析师妙计2:只用一个IF函数
    这个公式很巧妙,要基于对合并单元格的理解,以及对Excel中相对引用的掌握。新建一个列,在第二个单元格中输入公式。
    这里写图片描述
    这个公式输入完成后,回车。直接双击十字号,或者复制该公式到以下所有单元格。

    聪明的你学会了嘛?

    👏👏👏再看看我们以前的文章😃😃😃
    🌺 Excel中数据分析工具库-相关系数篇
    🌺 干货,手把手教会你做相关性分析
    🌺 5年数据分析路,小结。
    🌺 用户细分及画像分析
    🌺 K-近邻算法及实践

    欢迎关注,微信公众号“数据分析师之家
    扫描二维码 关注我们
    💁提供职业规划、简历指导、面试辅导服务哦
    QQ交流群:254674155
    在这里插入图片描述

    展开全文
  • 摘要:C#源码,数据库应用,合并单元格,DataGridView Vs2008编程实例:在C#的DataGridView控件中实现合并单元格,因为数据库文件遗失了,所以演示效果什么也没看到,不过源代码还在,可根据源码还原出数据库,最主要的...
  • DataGridView合并单元格

    2011-11-18 22:15:41
    DataGridView合并单元格,附加数据库详细的开发注释说明。直接打开运行。
  • jxl暂时不支持excel2007(xlsx格式),解析xlsx格式可以使用poi,大体思路:先解析旧的excel,将合并单元格拆分成一个个的单元格生成新的excel,在通过解析新的excel存入数据库/** * 不支持xlsx * @throws ...
    jxl暂时不支持excel2007(xlsx格式),解析xlsx格式可以使用poi,大体思路:先解析旧的excel,将合并的单元格拆分成一个个的单元格生成新的excel,在通过解析新的excel存入数据库
    /**
    * 不支持xlsx
    * @throws BiffException
    * @throws IOException
    * @throws WriteException
    */
    public void createExcel() throws BiffException, IOException, WriteException {
    String path = "C:/Users/hasee/Desktop/标签对照.xls"; //源文件
    String newPath = "C:/Users/hasee/Desktop/副本.xls"; //目标文件

    Workbook wb = Workbook.getWorkbook(new FileInputStream(new File(path)));
    WritableWorkbook wwb = Workbook.createWorkbook(new File(newPath));

    Sheet sheet = wb.getSheet(0);
    WritableSheet sheet1 = wwb.createSheet("副本",0);

    Range[] rangeCell = sheet.getMergedCells(); //获取合并单元格的数组
    //将合并单元部分全部展示出来
    for (int i = 1; i < sheet.getRows(); i++) {
    for (int j = 0; j < sheet.getColumns(); j++) {
    String str = sheet.getCell(j, i).getContents();
    for (Range r : rangeCell) {
    if (i > r.getTopLeft().getRow() && i <= r.getBottomRight().getRow()
    && j >= r.getTopLeft().getColumn() && j <= r.getBottomRight().getColumn()) {
    str = sheet.getCell(r.getTopLeft().getColumn(),r.getTopLeft().getRow()).getContents();
    }
    }
    Label label = new Label(j,i,str);
    sheet1.addCell(label);
    }
    }
    wwb.write();
    wwb.close();
    wb.close();
    //将数据导入数据库
    //readExcel(newPath);
    }

    转载于:https://www.cnblogs.com/funnyb0y/p/6183507.html

    展开全文
  • 本文是介绍利用POI导出数据到Excel表格中,并且需要合并单元格。第一次写觉得还是有点难度的,当时花了一天的时间写这个导出,不过最后完成了,也没有觉得它很难。只要掌握它实现的原理,不管怎么的导出都可以解决

           本文是介绍利用POI导出数据到Excel表格中,并且需要合并单元格。第一次写觉得还是有点难度的,当时花了一天的时间写这个导出,不过最后完成了,也没有觉得它很难。只要掌握它实现的原理,不管怎么的导出都可以解决

    导出结果先看一下 (根据选择的时间段导出的,所以表头是循环设置的。下面代码有) 

    监控点目标数导出

     实现思路:

            1、得到我们需要导出的数据(这个就很简单了,从数据库里查)

            2、一如既往的导入jar包等等(找jar包就自己找了)

            3、创建一个Excel表格--->XSSFWorkbook xssfWorkbook = new XSSFWorkbook();

         XSSFWorkbook 和HSSFWorkbook 都可以,只是针对Excel版本不一样,XSSFWorkbook 是2007版之后的

            4、创建Excel表格的sheet-->XSSFSheet xssfSheet = xssfWorkbook.createSheet("监控点统计");

            5、设置一下单元格样式

            6、合并单元格

            7、循环得到的值,一行一行的插入到Excel表格中

            8、导出操作。这样就是大概的思路了

    以下是我的这个业务实现的代码,里面都有很详细的注释

    1、承载数据的实体类

    package com.byavs.drwisas.system.domain.vo;
    
    import io.swagger.annotations.ApiModelProperty;
    
    /**
     * @author Created by jovin .
     * @date Created on 18:52 2020/3/10.
     */
    public class CountAimAmountVo {
    
        @ApiModelProperty("设备编号")
        private String deviceCode;
    
        @ApiModelProperty("设备名称")
        private String cameraName;
    
        /**
         * 第二主键IntId
         * 相机ID
         */
        @ApiModelProperty("第二主键intId")
        private Integer cameraID;
    
        /**
         * 状态 1-未开启 2-暂停 3-执行中  4-异常 5-已完成 6-已关闭(手动关闭)
         */
        @ApiModelProperty("状态 1-未开启 2-暂停 3-执行中  4-异常 5-已完成 6-已关闭(手动关闭)")
        private Integer status;
    
        /**
         * 统计日、格式yyyyMMdd
         */
        @ApiModelProperty("统计日、格式yyyyMMdd")
        private Integer countDay;
    
        /**
         * 人体目标数
         */
        @ApiModelProperty("人体目标数")
        private Long pedestrianCount;
    
        /**
         * 人脸目标数
         */
        @ApiModelProperty("人脸目标数")
        private Long faceCount;
    
        /**
         * 机动车目标数
         */
        @ApiModelProperty("机动车目标数")
        private Long vehicleCount;
    
        /**
         * 非机动车目标数
         */
        @ApiModelProperty("非机动车目标数")
        private Long nonMotorCount;
    
        /**
         * 状态描述,如果异常状态,就应该填异常原因
         */
        @ApiModelProperty("状态描述,如果异常状态,就应该填异常原因")
        private String statusDesc;
    
        //set和get方法就省了
    
    }

    2、导出到Excel表格的代码

    /**
     * 监控点位目标数统计导出
     *
     * @param qo
     * @param
     */
    @ApiOperation(value = "监控点位目标数统计导出.xlsx")
    @PostMapping(value = "/export")
    public void exportCount(@ApiParam(value = "监控点位目标数统计", required = false)         
        @RequestBody(required = false) ExportCountQo qo,
        HttpServletResponse response) throws IOException {
        //得到需要导出的数据、export()方法在下面。
        Map<Integer, List<CountAimAmountVo>> map = taskService.export(qo);
        //这两个是用来创建导出文件名称的
        String startTime = DateUtil.format2String(qo.getStartDate(), DateUtil.DATE_CHS_SMALL);
        String endTime = DateUtil.format2String(qo.getEndDate(), DateUtil.DATE_CHS_SMALL);
        String filename = startTime + "-" + endTime + "监控点目标数统计" + ".xlsx";
    
        //1、创建工作本、就是你的Excel表格(XSSFWorkbook是用在2007版本的,之前的用HSSFWorkbook,本文使用XSSFWorkbook,操作其实一样)
        XSSFWorkbook xssfWorkbook = new XSSFWorkbook();
        //2、新建工作表(就是Excel表格中下方的sheet)
        XSSFSheet xssfSheet = xssfWorkbook.createSheet("监控点统计");
        //3、单元格样式(因为要合并单元格,所有就设置了单元格的样式居中,还有其他样式自己可以去网上找,有很多)
        CellStyle cellStyle = xssfWorkbook.createCellStyle();
        cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//单元格水平居中
        cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//单元格垂直居中
        //4、创建行(此处是第一行,Excel表格中都是从第0行、第0列开始的)
        XSSFRow row = xssfSheet.createRow(0);
    
        //合并单元格(设备编号),从导出结果可以看出,第一行和第二行需要合并的,只有第一列
        merge(cellStyle, xssfSheet, row, 0, 1, 0, 0, 0, "设备编号");
        //合并单元格(设备名称),从导出结果可以看出,第一行和第二行需要合并的,只有第二列
        merge(cellStyle, xssfSheet, row, 0, 1, 1, 1, 1, "设备名称");
    
        //目标数统计表头设计(因为这个业务是根据选择的时间而导出的,所以表头需要循环设置。count表示多少天)
        int count = (int) DateUtil.subtractOfDay(qo.getEndDate(), qo.getStartDate());
        //创建第二行
        XSSFRow row1 = xssfSheet.createRow(1);
        for (int i = 0; i <= count; i++) {
            int firstCol = (i) * 5 + 2;
            int lastCol = (i + 1) * 5 + 1;
            //得到当前要存储的日期
            Date date = DateUtil.addDays(qo.getStartDate(), i);
            String strDate = DateUtil.format2String(date, DateUtil.DATE_CHS_SMALL);
            String countDay = strDate.substring(5);
            merge(cellStyle, xssfSheet, row, 0, 0, firstCol, lastCol, firstCol, countDay);
            //创建单元格
            row1.createCell(firstCol).setCellValue("状态");
            row1.createCell(firstCol + 1).setCellValue("人体");
            row1.createCell(firstCol + 2).setCellValue("人脸");
            row1.createCell(firstCol + 3).setCellValue("机动车");
            row1.createCell(firstCol + 4).setCellValue("非机动车");
    
        }
        int i = 1;
        //遍历map集合、找到同一台设备的所有数据、再次遍历list集合,分别按照不同的统计日期添加值
        for (Map.Entry<Integer, List<CountAimAmountVo>> countMap : map.entrySet()) {
            //创建行、从第三行开始
            i = i + 1;
            int n = 0;
            XSSFRow row2 = xssfSheet.createRow(i);
            List<CountAimAmountVo> list = countMap.getValue();
            list.sort((o1, o2) -> {
                Integer countDay1 = o1.getCountDay();
                Integer countDay2 = o2.getCountDay();
                if (countDay1 > countDay2) {
                    return 1;
                } else {
                    return -1;
                }
            });
            row2.createCell(0).setCellValue(list.get(0).getDeviceCode());//添加设备编号
            row2.createCell(1).setCellValue(list.get(0).getCameraName());//添加设备名称
            for (CountAimAmountVo countAimVo : list) {
                n = n + 1;
                int firstCol = (n - 1) * 5 + 2;
                switch (countAimVo.getStatus()) {
                    case 6:
                        row2.createCell(firstCol).setCellValue(TaskStatusEnum.CLOSE.message);//添加状态
                        break;
                    case 3:
                        row2.createCell(firstCol).setCellValue(TaskStatusEnum.DOING.message);//添加状态
                        break;
                    case 4:
                        row2.createCell(firstCol).setCellValue(TaskStatusEnum.EXCEPTION.message);//添加状态
                        break;
                    case 5:
                        row2.createCell(firstCol).setCellValue(TaskStatusEnum.FINISH.message);//添加状态
                        break;
                    case 1:
                        row2.createCell(firstCol).setCellValue(TaskStatusEnum.NOT_BEGIN.message);//添加状态
                        break;
                    default:
                        break;
                }
                row2.createCell(firstCol + 1).setCellValue(countAimVo.getPedestrianCount());//添加人体
                row2.createCell(firstCol + 2).setCellValue(countAimVo.getFaceCount());//添加人脸
                row2.createCell(firstCol + 3).setCellValue(countAimVo.getVehicleCount());//添加机动车
                row2.createCell(firstCol + 4).setCellValue(countAimVo.getNonMotorCount());//添加非机动车
            }
        }
        //导出到Excel
        outExportFile(xssfWorkbook, filename, response);
    }
    
    /**
     * 合并单元格(其实就4个坐标的点合并成一个单元格)
     *
     * @param cellStyle 合并单元格的样式
     * @param xssfSheet Excel表格的sheet
     * @param row 第几行
     * @param firstRow 合并开始行
     * @param lastRow 合并结束行
     * @param firstCol 合并开始列
     * @param lastCol 合并结束列
     * @param columnIndex 从第几列开始
     * @param cellValue 单元格的值
     */
    private void merge(CellStyle cellStyle, XSSFSheet xssfSheet, XSSFRow row, int firstRow, int lastRow, int firstCol, int lastCol, int columnIndex, String cellValue) {
        //指定合并开始行、合并结束行 合并开始列、合并结束列
        CellRangeAddress rangeAddress = new CellRangeAddress(firstRow, lastRow, firstCol, lastCol);
        xssfSheet.addMergedRegion(rangeAddress);
    
        //创建单元格,指定起始列号,从0开始
        XSSFCell cell = row.createCell(columnIndex);
        cell.setCellValue(cellValue);//单元格赋值
        cell.setCellStyle(cellStyle);//设置单元格样式
    }
    
    /**
     * 数据导出
     *
     * @param xssfWorkbook
     * @param filename
     * @param response
     * @throws IOException
     */
    public void outExportFile(XSSFWorkbook xssfWorkbook, String filename, HttpServletResponse response) throws IOException {
        BufferedOutputStream fos = null;
        try {
            response.setContentType("application/x-msdownload");
            response.addHeader("Content-Disposition", "attachment; filename=" + filename);
            response.setCharacterEncoding("UTF-8");
            fos = new BufferedOutputStream(response.getOutputStream());
            xssfWorkbook.write(fos);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (fos != null) {
                fos.close();
            }
        }
    }

    3、得到数据库里的数据export()方法

    /**
     * 得到需要导出的监控点统计数据
     *
     * @param qo
     * @return
     */
    public Map<Integer , List<CountAimAmountVo>> export(ExportCountQo qo){
        //将时间转为yyyyMMdd格式
        Integer startDay = Integer.valueOf(DateUtil.format2String(qo.getStartDate(),DateUtil.DATE_DIGIT_SMALL));
        Integer endDay = Integer.valueOf(DateUtil.format2String(qo.getEndDate(),DateUtil.DATE_DIGIT_SMALL));
    
        Query query = new Query();
        query.addCriteria(Criteria.where("countDay").gte(startDay).lte(endDay));
        List<String> cameraIds = qo.getCameraIdList();
        List<Camera> cameraList = null;
        List<Integer> intIds = null;
        if (!CollectionUtils.isEmpty(cameraIds)){
            cameraList = cameraService.findCameraByIds(cameraIds);
            intIds = cameraList.stream().map(Camera::getIntid).collect(Collectors.toList());
        }
        if (!CollectionUtils.isEmpty(intIds)){
            query.addCriteria(new Criteria("cameraID").in(intIds));
        }
        List<CountAimAmount> countAimAmountList = mongoTemplate.find(query, CountAimAmount.class);
        logger.info("=========在MongoDB里一共找到了:"+ countAimAmountList.size()+"条数据============");
        List<CountAimAmountVo> list = BeanCopyUtil.cloneObject(countAimAmountList, CountAimAmountVo.class);
        //得到所有的cameraID==》intId集合
        List<Integer> intIdList = list.stream().map(CountAimAmountVo::getCameraID).collect(Collectors.toList());
    
        Map<Integer , List<CountAimAmountVo>> map = new HashMap<>();
        for (Integer integer : intIdList){
            List<CountAimAmountVo> countAimAmountVoList = new ArrayList<>();
            for (CountAimAmountVo countAimAmountVo : list){
                if (countAimAmountVo.getCameraID().equals(integer)){
                    countAimAmountVoList.add(countAimAmountVo);
                }
            }
            map.put(integer,countAimAmountVoList);
        }
        return map;
    }
    展开全文
  • java代码,实现从数据库中查询出数据,然后通过poi实现合并单元格生成excel
  • java excel 合并单元格

    2020-12-11 14:44:05
    easy-poi注解导出,@Excel 注解有个 needMerge 属性,属性描述:是否需要纵向合并单元格(用于含有list中,单个的单元格,合并list创建的多个row),这个属性默认为false,若为true,则会将当前单元格与上
  • C#合并单元格

    2020-05-29 15:44:23
    我们知道,在查询数据的时候,从数据库中查出来显示到页面,但是一般数据库的数据比较多,而且会有重复的信息出现,为了让页面更可观更简洁,可以将相同的信息或单元格合并在一起。也就是如下效果: 调用合并的方法...
  • 第一个项目就是导入合并的excel表格并进行评分,网上搜了下合并单元格的导入资料很少,项目功能出来了,就先进行总结一下吧。 话不多说,先上图 导入一张这样的excel表格,行列都有合并,网上暂时没有搜到这样...
  • /// <summary> /// 合并单元格,并赋值,对指定WorkSheet操作 /// </summary> /// <param name="sheetIndex">WorkSheet索引</param> /// 开始行索引</param> /// 开始列索引</param> /// 结束行索引</param> /// ...
  • excel合并单元格导入

    2020-08-26 16:52:44
    博客地址:https://blog.csdn.net/bless924295/article/details/108242789 压缩包里有源码,excel测试文件及数据库文件
  • 以下代码是动态填充数据,这些数据是从数据库取得的批量的,并合并单元格,最终导出excel。但是有一点需要注意,一定是先填充数据在合并单元格,而且每个单元格的样式都是提前设置好的 。 举个例子:合并单元格,第...
  • 0:无分组,需要合并单元格</param> void FormatTableTwo(string depid, string depnm, int m) { //统计各分组或部门(无分组)下的人员列表,包括有部门无人员的情况也需要列出 DataRow[] drs = dt.Select("depno in...
  • 一、点击在拖入的显示控件(TreeList)右上方的箭头,在Treelist任务中选择数据源,添加项目数据源,依次选择数据库、数据集,... #region"合并单元格(多行多列)" //需要(行、列)合并的所有列标题名 List<...
  •  目的:因为涉及到导入到数据库,具有合并单元格的多行必然要拆分,而NPOI自动解析的时候拆分单元格除第一个单元格外其余值都是空,对于列头有合并项目的,数据库设计一般才有合并单元格下面的最小列单元作为数据库...
  • 数据库拿出来行跟列,合并单元格不写死值,可能还要添加行跟列来形成新的单元格,只合并行就行,例如我从数据库取出来的数据时这样的 ![图片说明]...
  • java excel表格含义空单元格合并单元格怎么导入数据库
  • '首先合并单元格 Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter For k = 0 To UBound (arr) Set rng = rng.Offset( 0 , arr(k) - 1 ) rng.Resize(j, 1 ). ...
  • 数据库合并列数据

    2015-07-29 16:57:34
    数据库合并列数据,就是一列下面的多个单元格合并为一个单元格
  • 导入,要导入到页面上,让用户可以看到自己的数据,同时后台也要解析,保存到数据库。这就分两步。第一步显示到页面上。我是用StringBuffer,直接APPEND tr td,然后通过STRUTS2的SET GET方法可以让前台得到,前台...
  • 大虾们推荐个可合并单元格的支持数据库的表格组件?
  • easyui 报表合并单元格

    2017-12-07 11:33:00
    前段时间工作中碰到有需求,要求数据按下图所示格式来显示,当时在园子里看到了一篇文章(时间久... 数据库临时建的DEMO表,如下:  前台代码,如下: <form id="form1"> <div data-options=...
  • 目录一、问题需求二、解决办法 一、问题需求      ...但是当程序需要分析或数据库使用时,就需要对这些合并单元格进行拆分,并填补对应单元格中的数据。 想要的结果如
  • 关于java生成excel和读取...这次需求是将有合并单元格的Excel数据读取出来并保存,难点是要将合并的单元格所占的行列数都保存下来,以便到时候可以完成还原Excel的表现格式。 excel模板: 要求进入数据库的格式...
  • 但是,课程表的显示可不是这么简单,它需要将普通记录继续加工,需要根据记录中具体的数据来确定数据需要显示在哪一行、哪一列,而且需要根据课程开始时间和结束时间动态合并单元格,最后才是数据的显示。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 449
精华内容 179
关键字:

数据库合并单元格