一、開發環境
打開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("保存完畢");}}}
}