精华内容
下载资源
问答
  • 循环表格
    千次阅读
    2021-06-13 18:10:43

    尝试从网站上的表格中刮取数据。我得到了下面的PHP书面,但它不工作。收到使用简单HTML DOM循环表格

    以下错误:注意:试图让非对象的财产DataScraping.php第27行

    //Sets the HTML DOM Library

    require_once 'C:/xampp/php/lib/SimpleHTMLDOM/simple_html_dom.php';

    $html = new simple_html_dom();

    $html = file_get_html('https://www.flightradar24.com/data/flights/british-airways-ba-baw');

    foreach($html->find('table[id=tbl-datatable]') as $datatable) {

    foreach($datatable->find('tr') as $tr) {

    foreach($tr->find('td') as $td) {

    if(strpos($td->find('a', 0)->href, 'https://www.flightradar24.com/data/flights/') !== false) {

    echo $td->find('a', 0)->innertext .", " .$td->find('a', 0)->href;

    }

    }

    }

    }

    另外值得一提的是,这个数据是公开可用,它是只用于个人用途。请不要评论版权侵权 - 我想要做的事情没有错。

    我只是试图刮去航班号,只有内部文本和站点后面的网址。任何帮助,我要去哪里错了?

    附加测试提供我所需要的数据,但与行之间的同样的错误:

    foreach($html->find('table[id=tbl-datatable]') as $datatable) {

    foreach($datatable->find('tr') as $tr) {

    foreach($tr->find('td') as $td) {

    if (strpos($td->find('a', 0)->href, '/data/flights/') !== false) {

    $test = $td->find('a', 0)->href;

    $test2 = $td->find('a', 0)->innertext;

    echo $test .", " .$test2;

    }

    }

    }

    }

    +0

    铝对,那些线是27线? –

    +0

    if语句之后的回显。 –

    +0

    我很惊讶,如果语句评估为真(但它必须如果你看到这个错误);当我查看该页面的源代码时,hrefs都是相对的。也许我不明白SimpleHTMLDOM是如何工作的。 –

    更多相关内容
  • 下面是代码,如果看不懂,建议先把表格的一些<tr><td>的表格原理弄清楚了,就可以了 代码如下:”0″ cellpadding=”0″ cellspacing=”0″> <% dim rs,sqltext set rs = Server.CreateObject(“adodb....
  • 如果是PHP的话就简单多了,Jquery实现还是第一个,就开始狂的实验,最后还是实现了(知识点:Jquery创建节点、获取表单的值、循环语句)Jquery代码: 代码如下: [removed]$(function(){$(“#btn”).click(function...
  • 表格循环2.data数据格式3.方法定义4.实例5.全选操作后提交判断总结 前言 提示:遇到产品提到需求,根据批量查询条件搜索,渲染N个表格子数据,父级数据在表格上边显示,表格子数据循环,并且实现跨表格选中提交功能...


    前言

    提示:遇到产品提到需求,根据批量查询条件搜索,渲染N个表格子数据,父级数据在表格上边显示,表格子数据循环,并且实现跨表格选中提交功能。


    提示:以下是本篇文章正文内容,下面案例可供参考

    一、跨表格全选按钮功能

    示例:@selection-change选中方法众所周知,一般情况都是对单个表格实现,很少循环操作表格,这里关键是方法明($event,index)就能识别是哪一条数据点击的表格了。

    二、具体代码

    1.表格循环

    直接上代码(示例):

    <div>
        <el-tooltip effect="dark" content="全选" placement="top">
            <el-button type="primary" @click="checkAll">全选</el-button>
        </el-tooltip>
        <el-tooltip effect="dark" content="取消全选" placement="top">
            <el-button type="primary" @click="notCheckAll">取消全选</el-button>
        </el-tooltip>
    </div>
    <div v-for="(item,index) in dataList" :key="index" style="padding-bottom: 10px;">
        <div style="padding: 5px 0px;background: #fff;">
            <el-row>
                <el-col :span="6">
                    <el-tag>商品信息</el-tag>
                    <span>{{item.sapNo}}</span>
                </el-col>
                <el-col :span="6">
                    <el-tag>金额</el-tag>
                    <span>{{item.deliverMoney}}</span>
                </el-col>
                <el-col :span="6">
                    <el-tag>发票抬头</el-tag>
                    <span>{{item.invoiceHand}}</span>
                </el-col>
                <el-col :span="6">
                    <el-tag>主单号</el-tag>
                    <span>{{item.masterId}}</span>
                </el-col>
            </el-row>
        </div>
        <el-table :data="item.List" ref="multipleTable" style="width: 100%"
            @selection-change="handleSelectionChange($event,index)" row-key="id">
            <el-table-column type="selection" width="55" :reserve-selection="true">
            </el-table-column>
            <el-table-column prop="lineItem" label="行号">
            </el-table-column>
            <el-table-column prop="productName" label="商品名称" show-overflow-tooltip
                min-width="180px">
            </el-table-column>
            <el-table-column prop="totalMoney" label="金额">
            </el-table-column>
            <el-table-column prop="skuNum" label="数量">
            </el-table-column>
        </el-table>
    </div>
    

    2.data数据格式

    数据格式如下(示例):

    dataList: [{
        "sapNo": '123',
        "deliverMoney": '99',
        "invoiceHand": '你猜',
        "masterId": '321',
        "List": [{
            "lineItem": '1',
            "productName": '我的天',
            "totalMoney": '666',
            "skuNum": '857',
        }, {
            "lineItem": '3',
            "productName": '不知道',
            "totalMoney": '888',
            "skuNum": '564',
        }],
    }, {
        "sapNo": '456',
        "deliverMoney": '100',
        "invoiceHand": '你不猜',
        "masterId": '654',
        "List": [{
            "lineItem": '2',
            "productName": '不清楚',
            "totalMoney": '999',
            "skuNum": '789',
        }],
    }],
    multipleSelection: [],
    

    3.方法定义

    代码如下(示例):

    handleSelectionChange(e, index) {
    	//(这里是对于取子集每一行携带父级字段进行批量提交)
        let data = JSON.parse(JSON.stringify(this.dataList))
        data[index].List = e;
        this.multipleSelection[index] = data[index];
        // console.log(JSON.stringify(this.multipleSelection))
    
    	//this.multipleSelection[index] = e;(这行代码针对以下操作)
        //es5遍历取值(这里和下边的方法是对于取子集每一行进行合并操作,批量提交)
        // let arry = []
        // this.multipleSelection.forEach(ele => {
        //     ele.forEach(item => {
        //         arry.push(item)
        //     });
        // });
        
        //es6flat铺平数组方法
        // let arry = this.multipleSelection.flat();
        // console.log(JSON.stringify(arry))
    },
    //全部选中状态true
    checkAll() {
        let dataList = this.dataList;
        for (var i in dataList) {
            for (var j in dataList[i].List) {
                this.$refs.multipleTable[i].toggleRowSelection(dataList[i].List[j],
                    true);
            }
        }
    },
    //全部选中状态false
    notCheckAll() {
        let dataList = this.dataList;
        for (var i in dataList) {
            for (var j in dataList[i].List) {
                this.$refs.multipleTable[i].clearSelection();
            }
        }
    },
    

    4.实例

    提示:以下是子集每一行携带父级字段进行批量提交实例
    子集每一行携带父级字段进行批量提交子集每一行携带父级字段进行批量提交

    [{"sapNo":"123","deliverMoney":"99","invoiceHand":"你猜","masterId":"321","List":[{"lineItem":"1","productName":"我的天","totalMoney":"666","skuNum":"857"},{"lineItem":"3","productName":"不知道","totalMoney":"888","skuNum":"564"}]},{"sapNo":"456","deliverMoney":"100","invoiceHand":"你不猜","masterId":"654","List":[{"lineItem":"2","productName":"不清楚","totalMoney":"999","skuNum":"789"}]}]
    

    提示:以下是子集合并成一个数组进行批量提交实例,注意要更改代码,如下:
    (具体代码有解释)

    this.multipleSelection[index] = e;
    

    子集每一行提交
    子集合并成一个数组提交

    [{"lineItem":"1","productName":"我的天","totalMoney":"666","skuNum":"857"},{"lineItem":"3","productName":"不知道","totalMoney":"888","skuNum":"564"},{"lineItem":"2","productName":"不清楚","totalMoney":"999","skuNum":"789"}]
    

    5.全选操作后提交判断

    提示:这里点击全选再点击不全选,只会对第一种携带父级参数存在问题,父级参数不会清空,所以再提交的时候要判断一下子集的List是否为空,如下:

    if (this.multipleSelection.length == 0) {
        this.$message({
            type: 'warning',
            message: '请选中数据再进行操作!'
        });
    } else {
        let newArry = [];
        this.multipleSelection.forEach(item => {
            if (item.List.length != 0) {
                newArry.push(item)
            }
        });
        if (newArry.length == 0) {
            this.$message({
                type: 'warning',
                message: '请选中数据再进行操作!'
            });
            return
        }
    }
    

    总结

    慢慢积累,慢慢成长,慢慢蜕变。
    展开全文
  • java使用poi操作.doc word模板替换,循环插入表格
  • 我们先循环行然后再循环列,然后依次将数据填到td里面就可以了。如下: var TableObj = document.getElementById('table'); var table = [{value:123,code:0},{value:223,code:0}]; var tableStr = ''; for(var i ...

    正常思维是:

    我们先循环行然后再循环列,然后依次将数据填到td里面就可以了。如下:

    var TableObj = document.getElementById('table');
    var table = [{value:123,code:0},{value:223,code:0}];
    var tableStr = '';
    for(var i =0;i<table.length;i++){
        tableStr += '<tr>';
        tableStr += '<td>'+table[i]++'</td>';
        tableStr += '</tr>';
    }
    TableObj.innerHtml = tableStr;

    这样我们就可以得到一个两行一列的表格了。

    但是,假如我们得到的数据在得到的那一刻就已经规定了这一行数据在第几行第几列呢?

    //row == 规定这条数据放在第几行,
    //col == 规定这条数据放在第几列,
    //rowspan == 规定数据占几行
    //colspan == 规定数据占几列
    //rowNumber == 表的总行数
    //colNumber == 表的总列数
    
    var json = [
        {rowNumber:2,colNumber:4,row:1,col:1,rowspan:2,colspan:1,value:"序号"},
        {rowNumber:2,colNumber:4,row:2,col:3,rowspan:1,colspan:1,value:"单元格4"},
        {rowNumber:2,colNumber:4,row:1,col:2,rowspan:1,colspan:2,value:"单元格2"},
        {rowNumber:2,colNumber:4,row:1,col:3,rowspan:1,colspan:1,value:"单元格5"},
        {rowNumber:2,colNumber:4,row:2,col:2,rowspan:1,colspan:1,value:"单元格3"},
        {rowNumber:2,colNumber:4,row:2,col:4,rowspan:1,colspan:1,value:"单元格6"},
    ]

    如果数据结构是这样子的,那就算咱们将其循环出来,也不能按着顺序去拿数据。理想效果应该是这样:

    序号单元格2单元格5
    单元格3单元格4单元格6

    解决方案:

    //思路:先把行列循环出来,再对当前所在的单元格去匹配所有数据,符合当前位置的将值直接填到当前单元格中
    
    //因为表的总行数和列数已经得到,事情办起来就简单多了,我们随便去取
    for(var row=1;row<json[0].rowNumber;row++){
        tableStr += "<tr>";
        for(var col=1;col<json[0].colNumber;col++){
            for(var value = 0;value<json.length;value++){
                if(json[value].row == row && json[value].col == col){
                    TableStr += "<td>"+json[value].value+"</td>";
                }
            }
        }
        tableStr += "</tr>";
    }
    
    

    展开全文
  • 官网表格循环: http://deepoove.com/poi-tl/#hack-loop-table 下面展示一些 内联代码片。 创建类工具类:RowspanPolicy import com.deepoove.poi.data.TextRenderData; import ...

    官网表格行循环: http://deepoove.com/poi-tl/#hack-loop-table

    下面展示一些 内联代码片

    创建类工具类:RowspanPolicy

    
    import com.deepoove.poi.data.TextRenderData;
    import com.deepoove.poi.policy.HackLoopTableRenderPolicy;
    import com.deepoove.poi.util.TableTools;
    import org.apache.commons.lang3.reflect.FieldUtils;
    import org.apache.poi.xwpf.usermodel.XWPFTable;
    
    import java.util.List;
    import java.util.Map;
    
    /**
     * 根据,字段值判断是否合并单元格,
     * Results 泛型传入实体类,
     * 0 为第0列(列下标)
     * “type” 为字段名称
     * 使用方式如下
     * new RowspanPolicy<Results>(0, "type")
     * <p>
     * 仅适需要于用实体类列表循环的表格
     * 循环单元格,改变字体颜色等,为完成
     */
    public class RowspanPolicy<T> extends HackLoopTableRenderPolicy {
        private int rowIndex;
        private String fieldName;
    
        public RowspanPolicy2(boolean onSameLine) {
            this("[", "]", onSameLine, 0, "");
        }
    
        public RowspanPolicy2(int rowIndex, String fieldName) {
            this("[", "]", false, rowIndex, fieldName);
        }
    
        public RowspanPolicy2(String prefix, String suffix) {
            this(prefix, suffix, false, 0, "");
        }
    
        public RowspanPolicy2(String prefix, String suffix, boolean onSameLine, int rowIndex, String fieldName) {
            super(prefix, suffix, onSameLine);
            this.rowIndex = rowIndex;
            this.fieldName = fieldName;
        }
    
        protected void afterloop(XWPFTable table, Object data) {
            if (null == data) return;
            if (null == fieldName || "".equals(fieldName)) return;
            List<T> list = (List<T>) data;
            String curr = null;
            int count = 0;//重复数量
            for (int i = 0; i < list.size(); i++) {
                String str = getFieldValue(list.get(i), fieldName);
                if (curr == null) {
                    curr = str;
                    count = 1;
                } else if (curr.equals(str)) {
                    ++count;
                } else {
                    mergeCellsVertically(table, rowIndex, i, count);
                    curr = str;
                    count = 1;
                }
            }
            mergeCellsVertically(table, rowIndex, list, count);
        }
    
        /**
         * 合并行
         *
         * @param rowIndex 列
         * @param index    重复行下标
         * @param count    重复数量
         */
        static void mergeCellsVertically(XWPFTable table, int rowIndex, int index, int count) {
            if (count > 1) TableTools.mergeCellsVertically(table, rowIndex, index - count + 1, index);
        }
    
        static <T> void mergeCellsVertically(XWPFTable table, int rowIndex, List<T> list, int count) {
            if (count > 1) TableTools.mergeCellsVertically(table, rowIndex, list.size() - count + 1, list.size());
        }
    
        /**
         * 获取值,判断是重复
         *
         * @param target    数据源
         * @param fieldName 字段名
         * @return 值
         */
        public String getFieldValue(Object target, String fieldName) {
            try {
                if (target instanceof Map) {
                    return ((Map<?, ?>) target).get(fieldName).toString();
                }
    
                Object HSSFCell = FieldUtils.readField(target, fieldName, true);
                if (HSSFCell instanceof String) {
                    return (String) HSSFCell;
                }
                TextRenderData textRenderData = (TextRenderData) HSSFCell;
                return textRenderData.getText();
            } catch (IllegalAccessException e) {
                throw new RuntimeException("字段类型不匹配,请检查字段类型和实体类是否一致");
            }
        }
    }
    
    

    应用示例

    		//第1列,0为下标需要-1
    		//字段名为name
    		//TableData: 实体类名称,如果使用的是map 传入map
            RowspanPolicy<TableData> rowspanPolicy = new RowspanPolicy<>(0, "name");
            RowspanPolicy<Map> rowspanPolicy = new RowspanPolicy<>(0, "name");
            Configure.builder().bind("tableData", rowspanPolicy).build();
    

    在这里插入图片描述

    实现思路:

    1.基础原来的循环组件,在循环结束的地方重写 afterloop 方法
    2.通过循环判断当前字段是否于上一个字段内容一致,
    3.发现不一致的就合并上一组数据,结束时合并未循环的数据

    注意

    数据合并之前要先按照要合并的列排序
    只能合并相邻并且内容一致的数据

    展开全文
  • 先看看ElementUI里关于el-table的template数据结构: xss=removed> label=日期 width=180> label=姓名 width=180> <el-table-
  • 普通模板 模板中设置${ }标志,freemarker将匹配到的内容替换 Map<String, Object>...循环模板 在word中编辑好模板后另存为.xml格式,打开后如下图: //<w:tbl></w:tbl>表格标志 //
  • vue v-for循环表格,1行2列(兼容IE)

    千次阅读 2021-02-22 10:41:41
    <table class="form" id="form"> <colgroup> <col width="50%"/> <col width="50%"/> </colgroup> <t.
  • 这里小编使用easypoi+jfree的形式进行word生成,使用jfree生成统计图表(饼图、折线图、柱状图等)图片,使用easypoi进行占位符替换、表格循环、图片插入已达到根据word模板生成word的效果。通过这个方式生成word只...
  • 想要循环数据,生成不单元格内换行的操作,如下 1:如果看到这 那应该知道怎么把doc文件转化为.xml文件,并格式化.xml文件(https://tool.oschina.net/codeformat/xml/) 如果还不知道那请移步...
  • 不要用表格 tr td <div v-for="item in xxList" class="box"> <div class="content">{{item}}</div> </div> .box{ display: flex; flex-warp: wrap; } .content{ width: 33%; }
  • java循环结构.pdf

    2019-10-14 13:30:00
    java循环结构,while、for循环、do-while,及调试解决程序错误
  • HTML循环数据表格

    千次阅读 2022-04-22 15:38:13
    原创不是我 这是我看的原创,然后自己稍微有些改的 由于原创找不到了 就只能原创了
  • 后台的json数据在前台用ajax循环表格显示
  • 数据库中有张名为commanders的表存有多个人的信息, 现在通过后台去查询整张表, 返回一个集合, 要求使用thymeleaf动态的把集合内容以表格的形式展示在网页上 表的内容如下 后台关键代码如下 @Controller public ...
  • 、、、、、、、循环动态展示表格内容 border :header-cell-style="{ background: '#f2f6fc' }" :data="proGroup" :height="tableheight" > v-for="(item, index) in roleList" :key="index" align="center" :label=...
  • 前端table表格循环

    千次阅读 2021-12-16 14:43:11
    // 获取表格所有行 for(var i = 0; i; i++ ){ for(var j = 0; j[i].cells.length; j++ ){ // 遍历该行的 td alert("第"+(i+1)+"行,第"+(j+1)+"个td的值:"+rows[i].cells[j].innerHTML+"。"); // 输出每个td的内容...
  • 本文实例为大家分享了js实现表格循环滚动的具体代码,供大家参考,具体内容如下 css table{width: 500px;border: 1px solid gray;border-collapse: collapse;} th,td{line-height: 35px;border: 1px solid gray;...
  • vue + element 表格循环

    2022-02-23 16:01:20
    vue表格数据循环
  • 在ftl文件中需要循环的代码块增加list循环<#list sys as sysUser>..... <#list sys as sysUser> ${sysUser.nickName} ${sysUser.password} ${sysUser.phoneNumber} 3.导出word public void createDoc(String ...
  • 最近做项目遇到一个问题:循环表格给最后一行重新设置样式问题。???????????? 解决方法 动态添加class名设置样式(:class="{'special-style':idx===item.data.length - 1}")。 代码 <table v-for="item in ...
  • # -*- coding: utf-8 -*- # @__author__:choppa # @DATA 2021/8/23 import xlrd from xlutils.copy import copy ... 根据表格的表单名,以list格式返回表单的数据 :param exceldir: 表格路径 :param sheet_i.
  • 嵌套的HTML表格在javascript for循环

    千次阅读 2021-06-09 15:17:25
    我想在第一列创建一个表格,并在for循环中包含第一列中的文本和重复的HTML表格(id'questable')。我不知道如何将重复的HTML表格与文档HTML的其余部分分离。当在第二个createTextNode()中使用+ =运算符时,我会得到...
  • 用javascript中的for循环编写表格

    千次阅读 2019-07-19 09:01:30
    直接上代码 script type="text/javascript"> var row=Number(prompt("请输入行数")); var col=Number(prompt("请输入列数")); document.write("<table>"); for (j=0;... docume...

空空如也

空空如也

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

循环表格