精华内容
下载资源
问答
  • 2021-11-02 11:12:12

    1,处理接口返回表格数据

    const arr = []

    this.configData.forEach(ele => {

    const firstIndex = this.configData.findIndex(item => {

    return item.paramClass === ele.paramClass // 当paramClass相同的时候,返回第一个相同的Index 赋值给 firstIndex

    })

    if (arr.findIndex(item => {

    return item.firstIndex === firstIndex

    }) === -1) {

    arr.push({

    length: this.configData.filter(item => {

    return item.paramClass === ele.paramClass // 利用数组的filter方法,过滤出相同paramClass的数组的长度。数组长度-即为跨多少行

    }).length,

    firstIndex: firstIndex // firstIndex 返回的是第一个catergory就满足的第一个Index,即为rowIndex开始于第几行。

    })

    }

    // 如果是下拉框 获取下拉框的选项

    if (ele.identification == 0) {

    _this.getSelect(ele, ele.paramClass, ele.paramName)

    }

    })

    this.indexInfoList = arr

    2,绑定合并表格:span-method="objectSpanMethod"

    objectSpanMethod ({ row, column, rowIndex, columnIndex }) {

    // 表头合并-第一列和第二列合并一个表头

    const X = document.getElementsByClassName('el-table__header')[0].rows[0].cells

    X[0].colSpan = 2

    X[1].style.display = 'none'

    // 分级表头

    if (columnIndex === 0) {

    const index = this.indexInfoList.findIndex(item => { // 遍历数组

    return item.firstIndex === rowIndex

    })

    if (index > -1) {

    return {

    rowspan: this.indexInfoList[index].length,

    colspan: 1

    }

    } else {

    return {

    rowspan: 0,

    colspan: 0

    }

    }

    }

    }

    更多相关内容
  • easyexcel 合并单元格-表头

    千次阅读 2021-02-01 09:04:18
    1. 添加依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>...2.表头(含单元格合并) public List<

    1. 添加依赖

        <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>easyexcel</artifactId>
                <version>2.2.6</version>
            </dependency>

    2.表头(含单元格合并)

     public List<List<String>> ExcelHead() {
            List<List<String>> headList = new ArrayList();
    
            headList.add(new ArrayList() {{
                add("时间");
                add("参数名\\回路名");
            }});
            headList.add(new ArrayList() {{
                add("时间"        }});
            headList.add(new ArrayList() {{
                add("时间");
                add("电流I(A)");
            }});
            headList.add(new ArrayList() {{
                add("环境温度:" + temperature);
                add("相电压U");
            }});
            headList.add(new ArrayList() {{
                add("环境温度");
                add("线电压U");
            }});
            headList.add(new ArrayList() {{
                   add("环境温度");
                add("频率(Hz)");
            }});
            headList.add(new ArrayList() {{
                add("环境湿度");
                add("开关分合(分\\合)");
            }});
            headList.add(new ArrayList() {{
                 add("环境湿度");
                add("总有功功率(kW)");
            }});
            headList.add(new ArrayList() {{
                add("抄表记录单");
                add("总无功功率(kVar)");
            }});
            headList.add(new ArrayList() {{
                add("抄表记录单");
                add("总功率因数");
            }});
            headList.add(new ArrayList() {{
                add("抄表记录单");
                add("正向有功电能(kW.h)");
            }});
            headList.add(new ArrayList() {{
                add("项目");
                add("正向无功电能(kVar.h)");
            }});
            headList.add(new ArrayList() {{
                add("表单号");
                add("所属变压器");
            }});
            headList.add(new ArrayList() {{
                add("表单号");
                add("变压器温度(℃)");
            }});
    
            return headList;
        }

    3. 数据逻辑

        List<HashMap> data = statisticmapper.runreport(statisticdto);
            for (int i = 0; i < data.size(); i++) {
                String id = data.get(i).get("id").toString();
                String name = data.get(i).get("equipment_name").toString();
                if (data.get(i).get("paramid") == null) continue;
                String paramid = data.get(i).get("paramid").toString();
                String point_id = data.get(i).get("point_id").toString();
                String value = data.get(i).get("value").toString();
                switch (paramid) {
                    case "e2fa092c-6146-11eb-82f0-6c2b59bec1ff":
                        temperature = value + "℃ ";
                        continue;
                    case "70536171-6147-11eb-82f0-6c2b59bec1ff":
                        humidity = value + "%";
                        continue;
                }
    
                if (!devicecheck.contains(id)) {
                    tosave.add(rowdata(name, "A相"));
                    tosave.add(rowdata(name, "B相"));
                    tosave.add(rowdata(name, "C相"));
                    devicecheck.add(id);
                }
    
                if (dic.containsKey(id + point_id)) continue;
                dic.put(id + point_id, i);
    
                int index = devicecheck.indexOf(id) * 3;
                switch (paramid) {
                    case "069d9c73-6148-11eb-82f0-6c2b59bec1ff":
                        tosave.get(index).set(5, value);
                        tosave.get(index + 1).set(5, value);
                        tosave.get(index + 2).set(5, value);
                        break;
                    case "068d17d6-6148-11eb-82f0-6c2b59bec1ff":
                        tosave.get(index).set(7, value);
                        tosave.get(index + 1).set(7, value);
                        tosave.get(index + 2).set(7, value);
                        break;
                    case "071ce9e3-6148-11eb-82f0-6c2b59bec1ff":
                        tosave.get(index).set(8, value);
                        tosave.get(index + 1).set(8, value);
                        tosave.get(index + 2).set(8, value);
                        break;
                    case "05b23645-6148-11eb-82f0-6c2b59bec1ff":
                        tosave.get(index).set(9, value);
                        tosave.get(index + 1).set(9, value);
                        tosave.get(index + 2).set(9, value);
                        break;
                    case "062ee255-6148-11eb-82f0-6c2b59bec1ff":
                        tosave.get(index).set(10, value);
                        tosave.get(index + 1).set(10, value);
                        tosave.get(index + 2).set(10, value);
                        break;
                    case "06dd3edb-6148-11eb-82f0-6c2b59bec1ff":
                        tosave.get(index).set(11, value);
                        tosave.get(index + 1).set(11, value);
                        tosave.get(index + 2).set(11, value);
                        break;
                    case "061fa440-6148-11eb-82f0-6c2b59bec1ff":
                        tosave.get(index).set(2, value);
                        break;
                    case "06fa867e-6148-11eb-82f0-6c2b59bec1ff":
                        tosave.get(index).set(3, value + "kV");
                        break;
                    case "05952cc2-6148-11eb-82f0-6c2b59bec1ff":
                        tosave.get(index).set(4, "Uab(" + value + "kV)");
                        break;
                    case "06805737-6148-11eb-82f0-6c2b59bec1ff":
                        tosave.get(index + 1).set(2, value);
                        break;
                    case "05f1ca1b-6148-11eb-82f0-6c2b59bec1ff":
                        tosave.get(index + 1).set(3, value + "kV");
                        break;
                    case "06ab9dbf-6148-11eb-82f0-6c2b59bec1ff":
                        tosave.get(index + 1).set(4, "Uab(" + value + "kV)");
                        break;
                    case "0604e966-6148-11eb-82f0-6c2b59bec1ff":
                        tosave.get(index + 2).set(2, value);
                        break;
                    case "058946a7-6148-11eb-82f0-6c2b59bec1ff":
                        tosave.get(index + 2).set(3, value + "kV");
                        break;
                    case "06b858c6-6148-11eb-82f0-6c2b59bec1ff":
                        tosave.get(index + 2).set(4, "Uab(" + value + "kV)");
                        break;
                }
            }
     public List<String> rowdata(String name, String type) {
            return new ArrayList() {{
                add(name);
                add(type);
                add("-");
                add("-");
                add("-");
                add("-");
                add("-");
                add("-");
                add("-");
                add("-");
                add("-");
                add("-");
                add("无");
                add("-");
            }};
        }

    3.excel

       List<List<String>> head = ExcelHead();
    
            EasyExcel.write(fileUrl).head(head).sheet(sheetname)
               //     .registerWriteHandler(StyleStrategy())
               //     .registerWriteHandler(new ReportMergeStrategy(devicecheck.size()))//自定义合并 单元格
               //     .registerWriteHandler(new RowWriteHandler())
                    .doWrite(tosave);

    4. 结果

    时间环境温度环境湿度抄表记录单项目表单号
    参数名\回路名电流I(A)相电压U线电压U频率(Hz)开关分合(分\合)总有功功率(kW)总无功功率(kVar)总功率因数正向有功电能(kW.h)正向无功电能(kVar.h)所属变压器变压器温度(℃)
    1#高压出线A相0.0010.54kVUab(10.54kV)50.00-0.00-0.00---
    1#高压出线B相0.0010.52kVUab(10.50kV)50.00-0.00-0.00---
    1#高压出线C相0.0010.50kVUab(10.52kV)50.00-0.00-0.00---

     

    展开全文
  • C#语言WinForm框架下DataGridView合并表头列头和单元格示例,WPF下也可参考应用
  • DataGridview做的二维表头 合并单元格
  • DataGridView单元格合并和二维表头能满足你的使用
  • DataGridView单元格合并和二维表头,固定合计行,带行号表格。DataGridView实现添加合计行并始终显示在底部 DataGridView中没有合适的方法来冻结底部的合计行,这里用一种比较简单的方式实现。 1. 数据部分的...
  • DataGridView单元格合并和二维表头的实现实例,运行环境vs2010,可研究一下二维表格的变化和制作思路。 运行环境:Visual Studio2010
  • devexpress 自定义合并单元格表头

    热门讨论 2013-03-08 17:25:52
    根据自己需求合并对应的单元格,自定义固定表头
  • 定义表头和表内容 data(){ return{ // 表格数据 tableColumns: [], // 表头数据 titleData:[], } } 引入并注册子组件 import TableComponents from "../../components/table/table"; //注册子组件table ...
  • 表头单元格标签

    2022-03-02 10:34:57
    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta ...meta name="viewport" content="width=device-width, initial-scale=1.0">...表头.
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>表头单元格标签</title>
    </head>
    <body>
        <h3>&lt表头单元格标签&gt</h3><br/>
        一般表头单元格位于表格的第一行或第一列,表头单元格里面的文本内容加粗居中显示。
        &lt th &gt 标签表示HTML表格的表头部分(table head的缩写)<br/>
        <table>
            <tr>
                &lt th &gt 姓名 &lt th &gt <br/>
                ...
            </tr>
            <tr><th>姓名</th> <th>性别</th> <th>年龄</th></tr><br/>
        </table>
    
        <h3>&lt 表格属性 &gt</h3><br/>
        表格标签这部分属性我们实际开发我们不常用,后面通过CSS来设置。<br>
        目的有2个:<br>
        1、记住这些英语单词,后台CSS会使用。<br>
        2、直观感受表格的外观形态。<p></p>
    
        <table align="center" border="1" cellpadding="20" cellspacing="0"> 
        
                <tr><th>属性名</td> <th>属性值</td> <th>描述</td></tr>
                <tr>
                <td>align</td>
                <td>left、center、right</td> 
                <td>规定表格相对周围元素的对齐方式</td>
                </tr>
                <tr><td>border</td> <td>1或“”</td> <td>规定表格单元是否拥有边框,默认为“”,表示没有边框。</td></tr>
                <tr><td>cellpadding</td> <td>像素值</td> <td>规定单元边沿与其内容的空白,默认1像素</td></tr>
                <tr><td>cellspacing</td> <td>像素值</td> <td>规定单元格之间的空白,默认2像素。</td></tr>
                <tr><td> width</td> <td>像素值或百分比</td> <td>规定表格的宽度。</td></tr>
    
        </table>
    <p></p>
        <table align="center" border="1" cellpadding="20" width="500" height="246">
    
            <tr><th>姓名</td> <th>性别</td> <th>年龄</td></tr>
            <tr><td>刘德华</td> <td>男</td> <td>60</td></tr>
            <tr><td>张学友</td> <td>男</td> <td>60</td></tr>
            <tr><td>郭富城</td> <td>男</td> <td>58</td></tr>
    
    
        </table>
    
    </body>
    </html>

    <表头单元格标签>


    一般表头单元格位于表格的第一行或第一列,表头单元格里面的文本内容加粗居中显示。 < th > 标签表示HTML表格的表头部分(table head的缩写)
    < th > 姓名 < th >
    ...

    姓名性别年龄

    < 表格属性 >


    表格标签这部分属性我们实际开发我们不常用,后面通过CSS来设置。
    目的有2个:
    1、记住这些英语单词,后台CSS会使用。
    2、直观感受表格的外观形态。

    属性名属性值描述
    alignleft、center、right规定表格相对周围元素的对齐方式
    border1或“”规定表格单元是否拥有边框,默认为“”,表示没有边框。
    cellpadding像素值规定单元边沿与其内容的空白,默认1像素
    cellspacing像素值规定单元格之间的空白,默认2像素。
    width像素值或百分比规定表格的宽度。

    姓名性别年龄
    刘德华60
    张学友60
    郭富城58
    展开全文
  • EasyExcel 动态表头 + 数据单元格合并

    千次阅读 2022-01-25 15:38:32
    EasyExcel 动态表头 + 数据单元格合并

    前言

    本文想要达到以及最终实现的效果:

    在这里插入图片描述

    要实现这种效果,包含两个部分的操作:

    1. 动态表头

    EasyExcel 生成 Excel 时要使表头有合并效果,可以采用**注解和非注解(动态表头)**的方法。因为要导出的数据没有实体类,所以采用动态表头的方法。表头用一个 List<List<String>> 对象来封装,其中外层 List 表示每一列的表头,内层 List 表示同一列的多行表头,当同一列或同一行的数据相同时,会进行表头的合并。

    2. 数据合并

    数据合并本文实现了两种方法:一是相邻行的数据相同时自动合并,二是指定要合并的行列范围。具体思路请看代码中的注释。合并相同数据行的方法与目标结果有些微差别:

    在这里插入图片描述

    pom.xml

    <dependencies>
        <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
            </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.2.6</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.22</version>
        </dependency>
    </dependencies>
    

    MergeSameRowsStrategy

    package com.kuang;
    
    import com.alibaba.excel.metadata.CellData;
    import com.alibaba.excel.metadata.Head;
    import com.alibaba.excel.write.handler.CellWriteHandler;
    import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
    import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
    import lombok.Data;
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.CellType;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.ss.usermodel.Sheet;
    import org.apache.poi.ss.util.CellRangeAddress;
    
    import java.util.List;
    
    /**
     * 合并相同数据行策略
     *
     * @author wangbo
     * @since 2022年01月25日 10:16
     */
    @Data
    public class MergeSameRowsStrategy implements CellWriteHandler {
        private int[] mergeColumnIndex;
        private int mergeRowIndex;
    
        public MergeSameRowsStrategy() {
        }
    
        public MergeSameRowsStrategy(int mergeRowIndex, int[] mergeColumnIndex) {
            this.mergeRowIndex = mergeRowIndex;
            this.mergeColumnIndex = mergeColumnIndex;
        }
    
        @Override
        public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, Integer columnIndex, Integer relativeRowIndex, Boolean isHead) {
    
        }
    
        @Override
        public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
    
        }
    
        @Override
        public void afterCellDataConverted(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, CellData cellData, Cell cell, Head head, Integer integer, Boolean aBoolean) {
    
        }
    
        @Override
        public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<CellData> list, Cell cell, Head head, Integer integer, Boolean aBoolean) {
            // 当前行
            int curRowIndex = cell.getRowIndex();
            // 当前列
            int curColIndex = cell.getColumnIndex();
    
            if (curRowIndex > mergeRowIndex) {
                for (int i = 0; i < mergeColumnIndex.length; i++) {
                    if (curColIndex == mergeColumnIndex[i]) {
                        mergeWithPrevRow(writeSheetHolder, cell, curRowIndex, curColIndex);
                        break;
                    }
                }
            }
        }
    
        /**
         * 当前单元格向上合并
         *
         * @param writeSheetHolder sheet保持对象
         * @param cell             当前单元格
         * @param curRowIndex      当前行
         * @param curColIndex      当前列
         */
        private void mergeWithPrevRow(WriteSheetHolder writeSheetHolder, Cell cell, int curRowIndex, int curColIndex) {
            // 获取当前行的当前列的数据和上一行的当前列列数据,通过上一行数据是否相同进行合并
            Object curData = cell.getCellTypeEnum() == CellType.STRING ? cell.getStringCellValue() : cell.getNumericCellValue();
            Cell preCell = cell.getSheet().getRow(curRowIndex - 1).getCell(curColIndex);
            Object preData = preCell.getCellTypeEnum() == CellType.STRING ? preCell.getStringCellValue() : preCell.getNumericCellValue();
    
            // 比较当前行的第一列的单元格与上一行是否相同,相同合并当前单元格与上一行
            if (curData.equals(preData)) {
                Sheet sheet = writeSheetHolder.getSheet();
                List<CellRangeAddress> mergedRegions = sheet.getMergedRegions();
                boolean isMerged = false;
                for (int i = 0; i < mergedRegions.size() && !isMerged; i++) {
                    CellRangeAddress cellRangeAddr = mergedRegions.get(i);
                    // 若上一个单元格已经被合并,则先移出原有的合并单元,再重新添加合并单元
                    if (cellRangeAddr.isInRange(curRowIndex - 1, curColIndex)) {
                        sheet.removeMergedRegion(i);
                        cellRangeAddr.setLastRow(curRowIndex);
                        sheet.addMergedRegion(cellRangeAddr);
                        isMerged = true;
                    }
                }
                // 若上一个单元格未被合并,则新增合并单元
                if (!isMerged) {
                    CellRangeAddress cellRangeAddress = new CellRangeAddress(curRowIndex - 1, curRowIndex, curColIndex, curColIndex);
                    sheet.addMergedRegion(cellRangeAddress);
                }
            }
        }
    }
    

    AssignRowsAndColumnsToMergeStrategy

    import com.alibaba.excel.metadata.Head;
    import com.alibaba.excel.write.merge.AbstractMergeStrategy;
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.Sheet;
    import org.apache.poi.ss.util.CellRangeAddress;
    
    import java.util.List;
    
    /**
     * 指定合并行列范围策略
     *
     * @author wangbo
     * @since 2022年01月21日 20:31
     */
    
    public class AssignRowsAndColumnsToMergeStrategy extends AbstractMergeStrategy {
        // 合并坐标集合
        private List<CellRangeAddress> cellRangeAddresses;
    
        // 构造
        public AssignRowsAndColumnsToMergeStrategy() {
        }
    
        public AssignRowsAndColumnsToMergeStrategy(List<CellRangeAddress> cellRangeAddresses) {
            this.cellRangeAddresses = cellRangeAddresses;
        }
    
        /**
         * 合并操作:对每个单元格执行!!!
         *
         * @param sheet            sheet对象
         * @param cell             当前单元格
         * @param head             表头对象
         * @param relativeRowIndex 相关行索引
         */
        @Override
        protected void merge(Sheet sheet, Cell cell, Head head, Integer relativeRowIndex) {
            /*
             * 合并单元格
             *
             * 由于merge()方法会在写每个单元格(cell)时执行,因此需要保证合并策略只被添加一次。否则如果每个单元格都添加一次
             * 合并策略,则会造成重复合并。例如合并A2:A3,当cell为A2时,合并A2:A3,但是当cell为A3时,又要合并A2:A3,而此时
             * 的A2已经是之前的A2和A3合并后的结果了。
             * 由于此处的表头占了两行,因此数据单元格是从(2, 0)开始的,所以就对这个单元格(cell.getRowIndex() == 2 && cell.getColumnIndex() == 0)
             * 添加一次合并策略就可以了。如果表头只有一行,则判断条件改为「cell.getRowIndex() == 1 && cell.getColumnIndex() == 0」就可以了。
             */
            if (cell.getRowIndex() == 2 && cell.getColumnIndex() == 0) {
                for (CellRangeAddress item : cellRangeAddresses) {
                    sheet.addMergedRegion(item);
                }
            }
    
            /*
             * 如果不作判断,可以使用addMergedRegionUnsafe()方法,
             * 这样生成的Excel文件可以打开,只是打开时会提示内容有问题,修复后可以打开
             */
            // for (CellRangeAddress item : cellRangeAddresses) {
            //     sheet.addMergedRegionUnsafe(item);
            // }
        }
    }
    

    MergeTest

    import com.alibaba.excel.EasyExcel;
    import com.kuang.MergeSameRowsStrategy;
    import org.apache.poi.ss.util.CellRangeAddress;
    import org.junit.Test;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    
    /**
     * @author wangbo
     * @since 2022年01月21日 20:29
     */
    
    public class MergeTest {
    
        private static String fileName = "D:\\" + System.currentTimeMillis() + ".xlsx";
    
        @Test
        public void test01() {
            EasyExcel.write(fileName)
                    .head(header())
                    // 合并策略:合并相同数据的行。第一个参数表示从哪一行开始进行合并,由于表头占了两行,因此从第2行开始(索引从0开始)
                    // 第二个参数是指定哪些列要进行合并
                    .registerWriteHandler(new MergeSameRowsStrategy(2, new int[]{0, 1, 2, 3, 8, 9}))
                    // 注意:需要先调用registerWriteHandler()再调用sheet()方法才能使合并策略生效!!!
                    .sheet("模板")
                    .doWrite(data());
        }
    
        @Test
        public void test02() {
            // 合并策略:指定要合并的行列范围
            int[][] toMergeRows = {{2, 3}, {4, 6}};
            int[] toMergeColumns = {0, 1, 2, 3, 8, 9};
            List<CellRangeAddress> list = new ArrayList<>();
            for (int[] toMergeRow : toMergeRows) {
                for (int toMergeColumn : toMergeColumns) {
                    list.add(new CellRangeAddress(toMergeRow[0], toMergeRow[1], toMergeColumn, toMergeColumn));
                }
            }
    
            EasyExcel.write(fileName)
                    .head(header())
                    .registerWriteHandler(new AssignRowsAndColumnsToMergeStrategy(list))
                    .sheet("模板")
                    .doWrite(data());
        }
    
    
        /**
         * 创建表头
         */
        private List<List<String>> header() {
            List<List<String>> headers = new ArrayList<>();
            headers.add(Arrays.asList("提交人用户名", "提交人用户名"));
            headers.add(Arrays.asList("提交人姓名", "提交人姓名"));
            headers.add(Arrays.asList("创建时间", "创建时间"));
            headers.add(Arrays.asList("更新时间", "更新时间"));
            headers.add(Arrays.asList("学习经历", "时间"));
            headers.add(Arrays.asList("学习经历", "学校"));
            headers.add(Arrays.asList("学习经历", "专业"));
            headers.add(Arrays.asList("学习经历", "学位"));
            headers.add(Arrays.asList("工作单位", "工作单位"));
            headers.add(Arrays.asList("国籍", "国籍"));
            headers.add(Arrays.asList("获奖经历", "时间"));
            headers.add(Arrays.asList("获奖经历", "何种奖励"));
            return headers;
        }
    
        /**
         * 创建数据
         */
        private List<List<Object>> data() {
            List<List<Object>> data = new ArrayList<>();
            data.add(Arrays.asList("fengqingyang", "风清扬", "2022-01-25 11:08", "2022-01-25 11:08",
                    "2013.9 ~ 2017.7", "华山派", "剑宗", "剑宗高手", "隐居思过崖", "中国", "2015.12", "华山剑法高手"));
            data.add(Arrays.asList("fengqingyang", "风清扬", "2022-01-25 11:08", "2022-01-25 11:08",
                    "2017.9 ~ 2020.7", "独孤求败", "独孤剑法", "剑术通神", "隐居思过崖", "中国", "2019.12", "剑法高手"));
            data.add(Arrays.asList("linghuchong", "令狐冲", "2022-01-25 12:08", "2022-01-25 12:08",
                    "2020.9 ~ 2024.7", "华山派", "气宗", "气宗庸手", "漂泊江湖", "中国", "2022.12", "华山剑法庸手"));
            data.add(Arrays.asList("linghuchong", "令狐冲", "2022-01-25 12:08", "2022-01-25 12:08",
                    "2024.9 ~ 2027.7", "风清扬", "独孤剑法", "剑法高手", "漂泊江湖", "中国", "2025.12", "剑法高手"));
            data.add(Arrays.asList("linghuchong", "令狐冲", "2022-01-25 12:08", "2022-01-25 12:08",
                    "2027.9 ~ 2030.7", "少林寺", "易筋经", "内功高手", "漂泊江湖", "中国", "2029.12", "内功高手"));
            return data;
        }
    }
    

    参考

    1. EasyExcel · 语雀 (yuque.com)
    2. EasyExcel 动态表头生成且带合并
    3. easyexcel 复杂表头、动态表头、复杂数据导出(非注解方式)
    4. easyExcel实现动态表头的数据导出,合并单元格,列宽策略
    5. easyExcel 导出 合并表头 合并相同数据单元格
    6. easyexcel 合并单元格(非注解)
    展开全文
  • 实现功能点 1.行的合并 2.列的合并 3.给表头添加斜线 4.动态生成列
  • EPPlus功能齐全,太过臃肿,特别是对单元格合并比较复杂,我只需要简单的一个导出Excel的功能,所以进行了封装。 1.下载解压可直接运行项目 2.运行示例,访问api:GET ...
  • 前言 实现参考Enno Wulff的文章(德文):Zellen verbinden 效果 代码 主程序 ...---------------------------------------------------------------------* * TABLES 申明表类型工作区/Work area for declaring ...
  • elementui表格单元格合并及表头单元格合并 页面效果如下 代码 html部分 <base-table default-height="true" class="numTable sorTable noTableBorder" :border-style="true" :columns="column" :data-...
  • c# DataGridView单元格合并和二维表头.zip
  • wpf 动态合并datagrid表头单元格

    热门讨论 2014-12-11 22:35:41
    wpf 动态合并datagrid表头单元格
  • 很好用的DataGridView单元格合并和二维表头
  • vb.netDataGridView单元格合并和二维表头
  • DataGrid表头合并和单元格内容合并-升级版
  • ureport 报表双斜表头制作 本人翻遍了百度也没有找到合适的方法 无意间的操作竟然成功了 下面分享下步骤 具体细节朋友自己微调下 感觉对您有帮助 点个赞 1.首先打开报表制作中心 选择要合并的单元格 2.右键设置行高...
  • C#实现DataGridView二维表头单元格合并源码,我觉得这个GridView比较实用,大部分的DataGridView都是系统默认风格,对表头的定义功能比较少,本源码演示了自定义表头,实现了二维表头,大大扩展了DataGridView的...
  • 在做项目中常常遇到需要合并单元格的情况,有时候是表头合并在一起有时候需要表格内数据合并在一起,也有都合并的下面是我设置的都合并的情况表头合并:在column内要合并列的对象内设置colSpan:number(合并几个),...
  • HTML 表头单元格标签

    千次阅读 2021-07-03 07:21:14
    HTML 标签标签定义及使用说明 标签定义 HTML 表格中的表头单元格。HTML 表格有两种单元格类型:表头单元格 - 包含头部信息(由 元素创建)标准单元格 - 包含数据(由 元素创建) 元素中的文本通常呈现为粗体并且居中。 ...
  • python read_excel读取文件,文件存在合并单元格,如何处理。 目前想法是将四行列名进行拼接,求指导,谢谢
  • DataGridView单元格合并和二维表头,demo,通过重新封装实现
  • 原生JS写的表头固定及左边列固定功能,原创代码,代码比较简单,兼容IE8+、谷歌、火狐等主流浏览器。当前版本为1.6,此版本支持合并单元格后的表格,并修正了当表格行数较多时的性能问题。
  • 31-表头单元格标签

    2021-11-16 16:12:23
    1.3表头单元格标签 一般表头单元格位于表格的第一行或第一列,表头单元格里面的文本内容加粗居中显示。 <th> 标签表示HTML表格的表头部分(table head的缩写) <table> <tr> <th>姓名<...
  • 合并单元格示例模板 合并单元格示例模板

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 50,895
精华内容 20,358
关键字:

如何制作单元格表头