power query 有办法实时抓取腾讯文档表格吗?

Power Query Go ⋅ 于 2020-08-17 21:06:13 ⋅ 最后回复由 Go 2020-09-18 19:10:51 ⋅ 640 阅读

有办法实时抓取腾讯文档在线表格吗?
例如:https://docs.qq.com/sheet/DV2RHaXR5cGJERkRJ?tab=BB08J2
根据大佬的提示,做了下改进,中间有空格、空行或空列新增或删除行列都可以原样抓取

let
web=Json.Document(Web.Contents("https://docs.qq.com/dop-api/opendoc?tab=BB08J2&id=DV2RHaXR5cGJERkRJ&outformat=1&normal=1"))[clientVars][collab_client_vars],
doc=Table.FromRows(List.Split(List.Transform({0..web[maxCol]*web[maxRow]-1},(x)=>try Record.Field(web[initialAttributedText][text]{0}{2}{0}[c]{1},Text.From(x))[2]?{1}? otherwise null),web[maxCol]))
in doc
本帖已被设为精华帖!
本帖由 Alex 于 2个月前 加精
最佳答案
回复数量: 20
  • 畅心 你的问题其实爆照就能解决
    2020-08-22 13:30:44

    重新构造一下网址:https://docs.qq.com/dop-api/opendoc?tab=BB08J2&id=DV2RHaXR5cGJERkRJ&outformat=1&normal=1

    Table.FromRows(List.Split(List.Transform(Record.ToTable(Json.Document(Web.Contents("https://docs.qq.com/dop-api/opendoc?tab=BB08J2&id=DV2RHaXR5cGJERkRJ&outformat=1&normal=1"))[clientVars][collab_client_vars][initialAttributedText][text]{0}{2}{0}[c]{1})[Value],(x)=>x[2]?{1}?),4))
  • 畅心 你的问题其实爆照就能解决
    2020-08-22 13:43:18

    比如你要获取第二张表的信息,鼠标点第二张表看网址的变化:
    file
    https://docs.qq.com/sheet/DV2RHaXR5cGJERkRJ?tab=grxnml
    构造网址:https://docs.qq.com/dop-api/opendoc?tab=grxnml&id=DV2RHaXR5cGJERkRJ&outformat=1&normal=1
    你可以对应改变公式为:

    Table.FromRows(List.Split(List.Transform(Record.ToTable(Json.Document(Web.Contents("https://docs.qq.com/dop-api/opendoc?tab=grxnml&id=DV2RHaXR5cGJERkRJ&outformat=1&normal=1"))[clientVars][collab_client_vars][initialAttributedText][text]{0}{2}{0}[c]{1})[Value],(x)=>x[2]?{1}?),3))
  • 罗简单 从业近二十年,长期服务于上市公司,负责企业信息化建设和商业智能分析。...
    2020-08-23 00:18:11

    畅神,带权限的文档能搞定么?
    https://docs.qq.com/sheet/DU3pKRWdTdkNGbGls?tab=BB08J2

  • 罗简单 从业近二十年,长期服务于上市公司,负责企业信息化建设和商业智能分析。...
    2020-08-23 00:18:40

    @畅心
    畅神,有权限的文档能搞定么?
    https://docs.qq.com/sheet/DU3pKRWdTdkNGbGls?tab=BB08J2

  • 罗简单 从业近二十年,长期服务于上市公司,负责企业信息化建设和商业智能分析。...
    2020-08-23 00:23:03

    @畅心 ,畅神,还请教一个问题,需要获取烟草证信息的API,网址:
    http://app.gjzwfw.gov.cn/jmopen/webapp/html5/licquery/index.html
    输入许可证号:500302107375就可以查询
    请教如何通过PQ获取数据?它的参数是json格式,我不知道怎么构建。
    请帮忙看看!

  • 罗简单 从业近二十年,长期服务于上市公司,负责企业信息化建设和商业智能分析。...
    2020-08-23 00:25:19

    @畅心
    对了,畅神,你出的书呢?我要订购。
    还有你研究钉钉、微信、QQ与PQ/PBI集成的文章在哪里啊?

  • 畅心 你的问题其实爆照就能解决
    2020-08-23 09:49:59

    @罗简单 我看了下那个返回查询json信息的是:
    http://app.gjzwfw.gov.cn/jimps/link.do
    GET
    传入的param参数是个json查询参数
    {"from":"1",
    "key":"你本地随便查一次应该给你自动分配一个key",
    "requestTime":"当前查询时间戳",
    "sign":"最核心的签名不知道api算法是怎么生成的",
    "licNo":"你要查的许可证编号"}

    也就是那个sign的生成算法要看官方的api文档,貌似官网不让看!
    http://app.gjzwfw.gov.cn/jmopen/index.do
    要不你再分析分析他的js算法文件:star:

  • 畅心 你的问题其实爆照就能解决
    2020-08-23 10:02:55
  • 罗简单 从业近二十年,长期服务于上市公司,负责企业信息化建设和商业智能分析。...
    2020-08-23 15:43:02
  • 畅心 你的问题其实爆照就能解决
    2020-08-23 16:34:40

    @罗简单 Uri.EscapeDataString(json字符串)

  • 罗简单 从业近二十年,长期服务于上市公司,负责企业信息化建设和商业智能分析。...
    2020-08-23 16:51:47

    @畅心 威武!

  • 畅心 你的问题其实爆照就能解决
    2020-08-23 17:10:20

    @罗简单 关于你说的非共享腾讯文档要读取sheet数据貌似没有相关接口,
    可能可以换一种做法,比如目前有导出接口,可以使用导出接口结合Web.Page下载到元数据,,,,
    【腾讯文档】腾讯文档开放API介绍
    https://docs.qq.com/doc/DUUxNYWFLeVF0TmRw

  • Go
    2020-08-27 18:03:27

    @畅心 这个目前还有个问题,如果表中间单元格有空白,或者增加列就无法刷新出数据了
    类似这种数据
    https://docs.qq.com/sheet/BF98EI1mCqDc0k1ud44JuCpL2aURYY1FXoHq3?tab=BB08J2

  • 畅心 你的问题其实爆照就能解决
    2020-08-27 20:10:51

    @Go

    file
    红框内空白数据在这个json梳理里面没有取到,其余数据都有,只是无法统一分组,如果按13个一组后面的两个的将会错位,,,

    file

  • 畅心 你的问题其实爆照就能解决
    2020-08-27 20:19:44

    file

  • Go
    2020-08-28 10:07:10

    @畅心 已经解决了,大佬看下代码有需要改进的吗

  • 畅心 你的问题其实爆照就能解决
    2020-08-28 19:55:56

    @Go 不错 缺失可以根据行列标识重构对齐,
    try那里可以写为Record.FieldOrDefault函数写入第三参数

  • 畅心 你的问题其实爆照就能解决
    2020-08-28 20:14:06
    doc=Table.FromList({0..web[maxRow]-1},each List.Transform({0..web[maxCol]-1},(m)=>Record.FieldOrDefault(web[initialAttributedText][text]{0}{2}{0}[c]{1},Text.From(_*web[maxCol]+m),null)[2]?{1}?))
    

    不知道如果第一列不写数据会不会有影响,,

  • 畅心 你的问题其实爆照就能解决
    2020-08-28 20:25:21

    或者这样写,我还没测试web{0}中list对象是否就是数据的精确的行列区域:

    let
    web=Json.Document(Web.Contents("https://docs.qq.com/dop-api/opendoc?tab=BB08J2&id=DV2RHaXR5cGJERkRJ&outformat=1&normal=1"))[clientVars][collab_client_vars][initialAttributedText][text]{0}{2}{0}[c],
    doc=Table.FromList({0..web{0}{2}},each List.Transform({0..web{0}{4}},(m)=>Record.FieldOrDefault(web{1},Text.From(_*web{0}{4}+m+_),null)[2]?{1}?))
    in doc
  • Go
    2020-08-31 08:59:31

    @畅心 我测试了,都是可以的👍

暂无评论~~
  • 请务必阅读并严格遵守《社区管理规范与使用说明》
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 发送表情,可用的 Emoji 见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板粘贴上传, 格式限制 - jpg, png, gif
  • 不支持上传附件,请尽可能用文字和图片将问题描述清楚,如实在需要上传附件,可上传到 共享网盘 后分享链接
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
Ctrl+Enter