ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3414|回复: 20

[分享] AirScript金山文档智能表和数据表的简单演示

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-11-11 11:34 | 显示全部楼层 |阅读模式
金山在线文档居然有网络API、SQL数据库API、邮件API、Buffer对象,这么一看JS宏几乎是砍废了两条腿
AirScript脚本采用标准 JavaScript 语言进行编写,支持大部分ES6语法。要求必须熟悉 JavaScript 语言,不然看不懂文档!!!
没学过JS语言的E友推荐,ES5、ES6语法重中之重

https://www.w3school.com.cn/js/index.asp
https://www.runoob.com/w3cnote/es6-tutorial.html

AirScript官方文档
https://airsheet.wps.cn/docs/api/excel/workbook/overview.html


智能表格和数据表演示地址:
https://www.kdocs.cn/l/ciO6B3FyjqND?from=docs&reqtype=kdocs&startTime=1699629319592
https://www.kdocs.cn/l/crzCjgwAapqh?newFile=true&startTime=1699660349553&referer=pc_new__2.0.117__other__kdocs__0&R=L1MvMQ==




智能表格演示


抓取哔哩哔哩视频收藏列表
录制_2023_11_11_11_07_11_674.gif





var url = 'https://api.bilibili.com/x/v3/fav/resource/list?media_id=1017007045&pn=1&ps=20&keyword=&order=mtime&type=0&tid=0&platform=web'
var iurl = []

Range('A1:E1').Value2 = ['视频封面', 'up主', '视频标题', '视频简介', '视频链接']
request(url, callback)

//循环抓取剩下的页
iurl.forEach((url, index) => {
  request(url, data => {
    Time.sleep(500) //休眠500毫秒
    writTable(data, (index + 1) * 20 + 2)
  })
})

function request(url, callback) {
  var resp = HTTP.get(url, {
    timeout: 2000,  //请求超时时间
    headers: {      //请求头
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.47',
      'Accept': 'application/json, text/plain, */*'
    }
  })
  callback(resp.json()) //回调函数
}

function callback(data) {
  var icount = data.data.info.media_count        //获取视频总数
  Rows('2:' + (icount + 1)).RowHeight = 26       //行高

  if (icount > 20) {
    var limit = Math.ceil(icount / 20)           //根据视频总数计算分页数量,每个分页最多20个视频
    var pn = Number(url.match(/(?<=pn=)\d+/)[0]) //截取当前页码
    for (var i = 1; i <= limit; i++) {
      if (i != pn) {
        iurl.push(url.replace(/(?<=pn=)\d+/, i)) //处理每个分页的请求url,剔除当前页码
      }
    }
  }

  writTable(data)
}

function writTable(data, index) {
  var medias = data.data.medias
  var arr = []
  medias.forEach(i => arr.push([
    i.cover + '@320w_200h_1c_!web-space-favlist-video.webp',
    i.upper.name,
    i.title,
    i.intro,
    'https://www.bilibili.com/video/' + i.bvid
  ]))

  //写入单元格
  var iRow = arr.length
  if (!index) {
    Range('A2').Resize(iRow, 5).Value2 = arr

  } else {
    Range('A' + index).Resize(iRow, 5).Value2 = arr
  }

}

需要添加网络API,不然报错
QQ截图20231111111222.png








数据表演示




抓取哔哩哔哩视频收藏列表
录制_2023_11_11_11_16_00_372.gif



let url = 'https://api.bilibili.com/x/v3/fav/resource/list?media_id=1017007045&pn=1&ps=20&keyword=&order=mtime&type=0&tid=0&platform=web'
let iurl = []
let sheet = Application.Selection.GetActiveSheet() //获取当前表

request(url, callback)

iurl.forEach(url => {
  request(url, data => {
    Time.sleep(500) //休眠500毫秒
    writTable(data)
  })
})

function request(url, callback) {
  let resp = HTTP.get(url, {
    timeout: 2000,  //请求超时时间
    headers: {      //请求头
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.47',
      'Accept': 'application/json, text/plain, */*'
    }
  }).json()        //处理为JSON
  callback(resp)   //回调函数
}

function callback(data) {
  let icount = data.data.info.media_count        //获取视频总数
  if (icount > 20) {
    let limit = Math.ceil(icount / 20)           //根据视频总数计算分页数量,每个分页最多20个视频
    let pn = Number(url.match(/(?<=pn=)\d+/)[0]) //截取当前页码
    for (let i = 1; i <= limit; i++) {
      if (i != pn) {
        iurl.push(url.replace(/(?<=pn=)\d+/, i)) //处理每个分页的请求url,剔除当前页码
      }
    }
  }

  writTable(data)
}

function writTable(data) {
  var medias = data.data.medias //获取视频集合
  var arr = []
  medias.forEach(i => arr.push({
    '视频封面': i.cover + '@320w_200h_1c_!web-space-favlist-video.webp',
    'up主': i.upper.name,
    '视频标题': i.title,
    '视频简介': i.intro,
    '视频链接': 'https://www.bilibili.com/video/' + i.bvid
  }))

  //新增记录
  Application.Record.CreateRecords({
    SheetId: sheet.sheetId,     //指定要操作的表
    Records: arr.map(item => ({ //插入数据
      fields: item
    }))
  })
}





评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-11-11 23:06 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
感谢楼主大神分享!
如果需要用document.querySelector分析采集数据的,能否做个案例?

TA的精华主题

TA的得分主题

发表于 2023-11-13 09:03 | 显示全部楼层
我测试了下,为什么单条语句可以执行,但是funtion就不能执行呢?
image.png

TA的精华主题

TA的得分主题

发表于 2023-11-13 09:13 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-11-13 09:14 | 显示全部楼层
金山文档现在支持Python,又有AirScript,现在不知道该学哪个了?

TA的精华主题

TA的得分主题

发表于 2023-11-13 09:33 | 显示全部楼层
如果WPSJS宏编辑器也能这样就好了,脚本程序这里搞一个(WPSJS加载项),那里搞一个(AirScript),不成体系。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-11-13 21:04 | 显示全部楼层
LIUZHU 发表于 2023-11-13 09:03
我测试了下,为什么单条语句可以执行,但是funtion就不能执行呢?

单条语句是点击运行脚本直接就执行了,你写了函数又不调用当然不会执行,你得再加一句test(),或者自调用函数:(function test(arg) { Range('A1').Value2 = arg })('测试')
邮件api文档在高级服务那里,还没测试
智能表格跟js宏差不多的,数据表有点像SQL,增删查改的方法需要看文档

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-11-13 21:42 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
一江春水1688 发表于 2023-11-11 23:06
感谢楼主大神分享!
如果需要用document.querySelector分析采集数据的,能否做个案例?

这个得向网页注入js才办得到,AirScript干不了这活,这属于网页前端开发范围必须会html、css、js。得写Chrome浏览器插件,或者油猴脚本
比如写浏览器插件获取boss直聘职位信息,如果你是前端开发,下面的代码应该不难
IMG_20231113_213739.png

插件需要引入2个js文件:jquery.js 和 JsonExportExcel.js
IMG_20231113_213714.png

1、清单文件 manifest.json
{
    "name": "职位导出插件",
    "description": "将BOSS直聘上的招聘信息导出Excel",
    "version": "1.0",
    "manifest_version": 3,

    "background": {
        "service_worker": "background.js",
        "type": "module"
    },

    "permissions": [
        "activeTab",
        "downloads"
    ],

    "icons": {
        "16": "icon/doge_16.png",
        "32": "icon/doge_32.png",
        "48": "icon/doge_48.png",
        "128": "icon/doge_128.png"
    },

    "content_scripts": [
        {
          "matches": ["https://www.zhipin.com/*"],
          "css": ["bossjob.css"],
          "js": ["jquery-2.1.4.min.js", "JsonExportExcel.min.js", "bossjob.js"]
        }
    ]
}

2、样式文件 bossjob.css
.mydiv{
    display: block;
    position: fixed;
    right: 10%;
    top: 235px;
    z-index: 1000;
}

.mya{
    position: absolute;
    width: 70px;
    height: 30px;
    color: #fff;
    background: #202329;
    text-align: center;
}

3、业务代码  bossjob.js
$(document).ready(function () {
    $('body').append('<div class="mydiv">' +
        '<a id="acdown" class="mya" href="javascript:;">导 出</a>' +
        '</div>');
    $('#acdown').on('click', function () {
        if ($('.job-primary').length > 0) {
            var data = [];
            $('.job-primary').each(function (index) {
                var a = $(this).find('.primary-wrapper').text().match(/\S+/g);
                var b = $(this).find('.info-company').text().match(/\S+/g);
                var c = $(this).find('.tags').text().match(/\S+/g);
                var d = $(this).find('.info-desc').text().match(/\S+/g);
                c = c ? c.toString() : null;
                d = d ? d.toString() : null;
                data[index] = {
                    post: a[0],//------------------------------职位
                    job_position: a[1],//----------------------工作位置
                    salary: a[2],//----------------------------薪资
                    experience: a[3],//------------------------工作经验/学历
                    recruiter: a[4],//-------------------------招聘人
                    enterprise: b[0],//------------------------招聘企业
                    industry: b[1],//--------------------------所属行业/融资阶段/企业规模
                    tag: c,//----------------------------------职位标签
                    welfare: d//-------------------------------福利
                }
            })
            var option = {};
            option.fileName = '职位信息'
            option.datas = [{
                    sheetData: data,
                    sheetHeader: ['职位', '工作位置', '招聘企业', '薪资', '福利', '工作经验/学历', '招聘人', '所属行业/融资阶段/企业规模', '职位标签'],
                    sheetFilter: ['post', 'job_position', 'enterprise', 'salary', 'welfare', 'experience', 'recruiter', 'industry', 'tag']
                }]
            var toExcel = new ExportJsonExcel(option);
            toExcel.saveExcel();
        } else {alert('没有匹配到职位信息!');}
    })
})


IMG_20231113_213700.png

TA的精华主题

TA的得分主题

发表于 2023-11-15 21:43 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
仙女配凡人 发表于 2023-11-13 21:04
单条语句是点击运行脚本直接就执行了,你写了函数又不调用当然不会执行,你得再加一句test(),或者自调用 ...

嗯,这个问题明白了,但是还是没有workbook对象,有多个工作簿时,不能通过workbook来切换

TA的精华主题

TA的得分主题

发表于 2023-11-15 21:45 | 显示全部楼层
仙女配凡人 发表于 2023-11-13 21:04
单条语句是点击运行脚本直接就执行了,你写了函数又不调用当然不会执行,你得再加一句test(),或者自调用 ...

大佬测试下邮件呗,我测试失败了,正好现在单位强制卸载了office,以前用通过VBA和outlook点对点发送邮件,现在不行啦,想测试金山文档的邮件功能。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-4 01:31 , Processed in 0.066035 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表