一、开发环境
打开excel文件中的宏编辑器和JS代码调试
工具-》开发工具-》WPS宏编辑器
左边是工程区,当打开多个excel时会有多个,要注意不要把代码写到其他工作簿去了
右边是代码区
二、编写代码
宏是js语言,因此变量或者方法可以网上搜索。比如搜索js变量、js数组方法等。
1、循环文件所有图片
for (let pic of ActiveSheet.Shapes)
2、提取图片类型 :==msoPicture、==13
pic.Type == msoPicture
3、提取名称所在列
var picName = pic.TopLeftCell.Offset(r,c).Value2;
4、保存
pic.Copy();
pic.SaveAsPicture(picPathName);
整合代码
/**
* CommandButton2_Click Macro
*/
function CommandButton2_Click()
{
//r,c 图片所在单元格的偏移量,用来做图片的名字
var r = 0;
var c = -1;
SaveAsPic(r,c);
}
function SaveAsPic(r,c){
var app = Application.Application,
acSh = app.ActiveSheet;
// 输入框,用来自定义存图文件夹的名称
var folderName = app.InputBox("Enter a folder name to save picture"),
reg = new RegExp('[\\\\/:*?\"<>|]');
// 输入框,用来自定义存图文件夹的名称
var c = app.InputBox("输入名称所在列(相对位置,如:-1)"),
reg = new RegExp('[\\\\/:*?\"<>|]');
// 如果文件夹的名称不规范,给出错误提示
if(folderName == "" || folderName == false || reg.test(folderName) == true){
MsgBox("1.文件名不能为空\n\n2.上传的文件名不能包含【\\\\/:*?\"<>|】这些非法字符\n\n建议:修改后重新上传!",jsCritical,"错误提示:")
}
else{
// 新建一个文件夹用来存导出的图片
//var res = NewFolder(ThisWorkbook.Path, folderName);
//Console.log(res); // 新建文件夹结果
for (let pic of ActiveSheet.Shapes){
// 如果当前为"图片"、"==13"
if (pic.Type == msoPicture){
var picName = pic.TopLeftCell.Offset(r,c).Value2;
var picPathName = `${ThisWorkbook.Path}\\${folderName}\\${picName}.jpg`;
console.log(picPathName);
pic.Copy();
pic.SaveAsPicture(picPathName);
console.log("保存完毕");
}
}
}
}