WPS 在线表格 JavaScript API 调用经验分享
评论
收藏

WPS 在线表格 JavaScript API 调用经验分享

经验分享
没有逻辑的张先生
2025-07-26 13:28·浏览量:2266
没有逻辑的张先生
影刀专家
影刀认证工程师
发布于 2025-07-26 13:282266浏览

WPS 在线表格提供了丰富的 JavaScript API,可用于实现自动化操作、数据处理和定制功能。结合操作经验,分享以下实践和技巧

参考文档:WPS在线表格 api文档

目前官方市场提供了部分操作指令,针对单元格嵌入、超链接获取等未添加的指令可以自己按需拓展

举个栗子:在指定单元格插入图片,读取单元格超链接在python模块中进行js注入和调用

# 使用提醒:
# 1. xbot包提供软件自动化、数据表格、Excel、日志、AI等功能
# 2. package包提供访问当前应用数据的功能,如获取元素、访问全局变量、获取资源文件等功能
# 3. 当此模块作为流程独立运行时执行main函数
# 4. 可视化流程中可以通过"调用模块"的指令使用此模块

import xbot
from xbot import print, sleep,web
from .import package
from .package import variables as glv
import base64
import os
import json

def main(args):
    
    pass

def initialize_web_environment(web_page):
    # 页面初始化,js注入
    code = """
            function (element, input) {
            (function() {
            window.updateImageInCell = async function(sheetName, rowIndex, columnIndex, base64Image) {
                const workbook = getActiveWorkbook();
                await workbook.Sheets.Item(sheetName).Cells(rowIndex, columnIndex).InsertImage(base64Image);
                };
            window.getHyperlink = async function(sheetName, rowIndex, columnIndex) {
                const workbook = getActiveWorkbook();
                const hyperlink = await workbook.Sheets.Item(sheetName).Cells(rowIndex, columnIndex).Hyperlinks.Item(1).Address;
                return hyperlink;
                };
            function getActiveWorkbook() {
                return WPSOpenApi.Application.ActiveWorkbook;
            }
            })();
            }
            """
    web_page.execute_javascript(code, execution_world="MAIN")
    return web_page




def updateImageInCell(web_page,shtName,row,column,image_path):
    #调用函数插入图片 , 这里的shtName指定无效,API文档未指出,激活sht页后在进行图片插入
    def convert_file_to_base64(file_path):
        """读取文件内容并转换为 Base64 编码字符串"""
        try:
            with open(file_path, 'rb') as file:
                content = file.read()
                encoded_bytes = base64.b64encode(content)
                encoded_string = encoded_bytes.decode('ascii')
                return encoded_string
        except FileNotFoundError:
            print(f"错误: 文件 '{file_path}' 不存在")
            return None
        except Exception as e:
            print(f"错误: 无法读取文件 - {str(e)}")
            return None


    base64_image_data = convert_file_to_base64(image_path)
    code = """
        function() {{
            return updateImageInCell({sheetName},{rowIndex},{columnIndex},{base64Image})
        }}
    """.format(sheetName=json.dumps(shtName), 
               rowIndex=json.dumps(row), 
               columnIndex=json.dumps(column), 
               base64Image=json.dumps("data:image/png;base64," + base64_image_data))
    web_page.execute_javascript(code, execution_world="MAIN")
    
    


def getHyperlink(web_page,shtName,row,column):
    #调用函数获取 超链接
    code = """
        function() {{
            return getHyperlink({sheetName},{rowIndex},{columnIndex})
        }}
    """.format(sheetName=json.dumps(shtName), 
               rowIndex=json.dumps(row), 
               columnIndex=json.dumps(column))
    return web_page.execute_javascript(code, execution_world="MAIN")

可视化调用模块

理论上其他api接口也可以使用上述方式和方法进行调用。

收藏31
全部评论1
最新
发布评论
评论