excel 批量导出图片并指定命名
一、开发环境
打开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("保存完毕");}}}
}