VBA实现
打开VBA代码编辑器,将以下的代码复制粘贴至VBA代码编辑器
Sub downloadJPGImages(source As Range, targetFolder As String) Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP.6.0") Set oBinaryStream = CreateObject("ADODB.Stream") adTypeBinary = 1 oBinaryStream.Type = adTypeBinary For i = 1 To source.Rows.Count imagePath = targetFolder & source.Cells(i, 1) imageUrl = source.Cells(i, 2) On Error GoTo HTTPError oXMLHTTP.Open "GET", imageUrl, False oXMLHTTP.Send aBytes = oXMLHTTP.responsebody On Error GoTo 0 oBinaryStream.Open oBinaryStream.Write aBytes adSaveCreateOverWrite = 2 oBinaryStream.SaveToFile imagePath, adSaveCreateOverWrite oBinaryStream.Close source.Cells(i, 3).Value = "图片成功下载" NextRow: Next MsgBox "完成" Exit Sub HTTPError: source.Worksheet.Cells(i, source.Worksheet.UsedRange.Columns.Count + 1).Value = "图片下载失败" Resume NextRow End Sub Sub downloadJPGImagesTest() downloadJPGImages Range("A2:C3"), "D:\保存文件夹\" End Sub
Script Lab实现
打开Script Lab代码编辑器,导入以下代码
name: Excel批量将链接转化为图片 description: Create a new snippet from a blank template. host: EXCEL api_set: {} script: content: | $("#run").click(() => tryCatch(run)); async function run() { await Excel.run(async (context) => { const selectedRange = context.workbook.getSelectedRange(); selectedRange.load("values"); await context.sync(); var zip = new JSZip(); for (let i = 0; i < selectedRange.values.length; i++) { let imageName = selectedRange.values[i][0]; let imageUrl = selectedRange.values[i][1]; zip.file(imageName, urlToPromise(imageUrl), { binary: true }); } var zipContent = await zip.generateAsync({ type: "blob" }); await saveAs(zipContent, "保存.zip"); await context.sync(); }); } function urlToPromise(url) { return new Promise(function(resolve, reject) { JSZipUtils.getBinaryContent(url, function(err, data) { if (err) { reject(err); } else { resolve(data); } }); }); } /** Default helper for invoking an action and handling errors. */ async function tryCatch(callback) { try { await callback(); } catch (error) { // Note: In a production add-in, you'd want to notify the user through your add-in's UI. console.error(error); } } language: typescript template: content: |- <button id="run" class="ms-Button"> <span class="ms-Button-label">下载选中区域内的链接</span> </button> language: html style: content: |- section.samples { margin-top: 20px; } section.samples .ms-Button, section.setup .ms-Button { display: block; margin-bottom: 5px; margin-left: 20px; min-width: 80px; } language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js @types/office-js office-ui-fabric-js@1.4.0/dist/css/fabric.min.css office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css core-js@2.4.1/client/core.min.js @types/core-js jquery@3.1.1 @types/jquery@3.3.1 //zip files https://cdn.jsdelivr.net/npm/jszip@3.10.1/dist/jszip.min.js //convert url to binary https://cdn.jsdelivr.net/npm/jszip-utils@0.1.0/dist/jszip-utils.min.js // download files https://cdn.jsdelivr.net/npm/filesaver.js-npm@1.0.1/FileSaver.min.js