自定义函数 JSAIMAGE 将本地或网络图片嵌入单元格

function JSAIMAGE(source/*, alt_text, sizing, height, width*/) { //图片嵌入单元格
    source = (source === undefined || source === -2147352572) ? undefined : source.valueOf();
    //alt_text = (alt_text === undefined || alt_text === -2147352572) ? source : alt_text.valueOf();
    //sizing = (sizing === undefined || sizing === -2147352572) ? 0 : sizing.valueOf();
    //height = (height === undefined || height === -2147352572) ? undefined : height.valueOf(); // 以磅为单位
    //width = (width === undefined || width === -2147352572) ? undefined : width.valueOf(); // 以磅为单位

    let temp = Env.GetTempPath(); // 取系统临时目录的路径
    //let hwnd = Application.Hwnd; // ET窗口的最高级别的窗口句柄
    
    let rng = Application.Caller();
    //let address = rng.Address();
    //rng = Range(address);
    //let formula = rng.Formula;
    //let height2 = rng.Height; // 以磅为单位返回“区域”的高度
    //let width2 = rng.Width; // 以磅为单位返回“区域”的宽度
    let left = rng.Left;
    let top = rng.Top;
    let ws = rng.Worksheet;
    //let wsName = ws.Name;
    //let wb = ws.Parent;
    //let wbName = wb.Name;
    
    let pattern = /^https?:\/\//i;
    
    try {
        if (pattern.test(source)) { // 网络图片
            let shape = ws.Shapes.AddPicture(source, msoTrue, msoTrue, left, top, -1, -1);
            //shape.LockAspectRatio = msoTrue; // 比例保持不变
            //shape.AlternativeText = source; // 可选文字 - 说明
            
            //let height3 = shape.Height; // 以磅为单位
            //let width3 = shape.Width; // 以磅为单位
            //let rng2 = shape.TopLeftCell;
            //let address2 = rng2.Address();
            
            const RANDNAME = (prefix = 'tmp') => { // 随机名称
                const suffix = Math.random().toString(36).substring(2);
                return prefix + suffix + Date.now();
            }
            
            let local_file = temp + "/" + RANDNAME() + "." + "png";
            
            shape.SaveAsPicture(local_file); // 另存工作表中的这张图片为文件
            shape.Delete(); // 删除工作表中的这张图片
            
            rng.RangeEx.InsertCellPicture(local_file);
            FileSystem.unlinkSync(local_file); // 删除文件
            //console.log(rng.Formula); // 公式为原来的
        } else { // 本地图片
            rng.RangeEx.InsertCellPicture(source);
            //console.log(rng.Formula); // 公式为原来的
        }
    } catch(err) {
        return "按{F9}查看";
    }
}

插入函数对话框、函数参数对话框:

加载宏文件function Workbook_Open(){}中添加以下代码。

Application.MacroOptions("JSAIMAGE","将图片从数据源位置嵌入单元格。",undefined,undefined,undefined,undefined,14,undefined,undefined,undefined,["图片文件的路径。"]);

云南省
浏览 104
收藏
1
分享
1 +1
+1
全部评论