You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求修改Google Sheets App Script:用A列数据命名QR码PNG文件

解决Google Sheets脚本生成QR码时用A列数据命名文件的问题

问题说明

现有Google Apps Script可生成QR码并保存到指定Drive文件夹,但生成的PNG文件以"Row 2""Row 3"命名,需要修改为使用对应行A列的数据作为文件名。原代码如下:

function myFunction() { 
var sheetName = "QR CODE DATA"; // Sheet name  
var folderId = "FOLDER NAME"; // Folder ID 

var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var sheet = ss.getSheetByName(sheetName); 
var url = "https://api.qrserver.com/v1/create-qr-code/?size=120x120&data="; 
var keys = ["-Tipo:", "-Ubicación:", "-# registro:", "-ID-C:", "-# Serial:", "-Pas:", "-Di I:", "-Asi:", "-RP:", "-Ar:"]; 
var values = sheet.getRange(2, 2, sheet.getLastRow() - 1, 11).getValues()
    .filter(function(e) {return e.some(function(f) {return f})})
    .map(function(row) { row.splice(4, 1); return row;
    }); var length = values.length;

var reqs = values.map(function(e) {return {url: url + encodeURIComponent(keys.map(function(f, j) {return f + e[j]}).join("\r"))}}); 
var res = UrlFetchApp.fetchAll(reqs); 
res.forEach(function(r, i) { 
var blob = r.getBlob().setName(length == values.length ? "row" + (i + 2) + ".png" : "row" + (length + 1) + ".png"); 
DriveApp.getFolderById(folderId).createFile(blob);   }); }

修改后的代码

function myFunction() { 
  var sheetName = "QR CODE DATA"; // Sheet name  
  var folderId = "FOLDER NAME"; // Folder ID 

  var ss = SpreadsheetApp.getActiveSpreadsheet(); 
  var sheet = ss.getSheetByName(sheetName); 
  var url = "https://api.qrserver.com/v1/create-qr-code/?size=120x120&data="; 
  var keys = ["-Tipo:", "-Ubicación:", "-# registro:", "-ID-C:", "-# Serial:", "-Pas:", "-Di I:", "-Asi:", "-RP:", "-Ar:"]; 
  
  // 调整范围,同时获取A列(第1列)的文件名和B到L列(第2到12列)的QR数据
  var allData = sheet.getRange(2, 1, sheet.getLastRow() - 1, 12).getValues()
    .filter(function(row) { 
      // 过滤掉A列空值或QR数据全空的行
      return row[0] && row.slice(1).some(function(cell) {return cell}); 
    })
    .map(function(row) { 
      // 保留A列文件名,同时对QR数据部分执行原有的splice操作
      var fileName = row[0];
      var qrData = row.slice(1);
      qrData.splice(4, 1); 
      return {fileName: fileName, qrData: qrData};
    }); 

  var reqs = allData.map(function(item) {
    return {
      url: url + encodeURIComponent(keys.map(function(f, j) {
        return f + item.qrData[j]
      }).join("\r"))
    };
  }); 

  var res = UrlFetchApp.fetchAll(reqs); 
  res.forEach(function(r, i) { 
    // 使用对应行A列的文件名,确保后缀为.png
    var fileName = allData[i].fileName.trim() + ".png";
    var blob = r.getBlob().setName(fileName); 
    DriveApp.getFolderById(folderId).createFile(blob);   
  }); 
}

关键修改点

  • 数据范围调整:将getRange的起始列从2改为1,列数从11改为12,同时获取A列的文件名和后续的QR码数据
  • 数据结构重构:通过map将每行数据拆分为fileName(A列值)和qrData(处理后的QR内容),方便后续调用
  • 过滤逻辑优化:过滤时同时检查A列是否有值,避免生成无意义文件名的文件
  • 文件名替换:在创建Blob时直接使用allData[i].fileName作为文件名,替换原有的"rowX"命名规则

内容的提问来源于stack exchange,提问作者Jon Bunce

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 07:25:32