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

Google Script:如何将getDisplayValues对象数组所有值转小写并跨表复制?

批量将工作表数据转为小写并复制到目标表的解决方案

嘿,我完全懂你的困扰——displayValue.toLowerCase()只能处理单个单元格值,没法直接作用于整个对象/数组对吧?这是因为从工作表获取的getDisplayValues()返回的是二维数组(每一行是一个子数组,每个子数组里是该行的单元格值),所以我们需要遍历数组里的每一项来批量转换。下面给你几种不同环境下的实现方式:

方法一:Google Apps Script 用 map() 遍历处理(简洁高效)

这种方法用数组的map()方法嵌套遍历,代码更简洁:

function convertToLowerCaseAndCopy() {
  // 1. 配置源和目标工作表名称
  const sourceSheetName = "你的源工作表名";
  const targetSheetName = "你的目标工作表名";
  
  // 2. 获取源数据(显示值二维数组)
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sourceSheet = ss.getSheetByName(sourceSheetName);
  const sourceData = sourceSheet.getDataRange().getDisplayValues();
  
  // 3. 批量转换为小写:遍历每一行,再遍历该行每个单元格
  const lowerCaseData = sourceData.map(row => 
    row.map(cell => typeof cell === 'string' ? cell.toLowerCase() : cell)
  );
  
  // 4. 将处理后的数据写入目标工作表
  const targetSheet = ss.getSheetByName(targetSheetName);
  targetSheet.getRange(1, 1, lowerCaseData.length, lowerCaseData[0].length)
             .setValues(lowerCaseData);
}

备注:加了typeof cell === 'string'的判断,是为了避免数字、日期等非字符串类型的值报错,确保兼容性。

方法二:Google Apps Script 用传统 for 循环处理(适合新手理解)

如果你更习惯传统循环的逻辑,也可以这么写:

function convertToLowerCaseWithLoop() {
  const sourceSheetName = "你的源工作表名";
  const targetSheetName = "你的目标工作表名";
  
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sourceSheet = ss.getSheetByName(sourceSheetName);
  const sourceData = sourceSheet.getDataRange().getDisplayValues();
  
  const lowerCaseData = [];
  const rowCount = sourceData.length;
  const colCount = sourceData[0].length;
  
  // 外层循环遍历每一行
  for (let i = 0; i < rowCount; i++) {
    const currentRow = [];
    // 内层循环遍历该行的每个单元格
    for (let j = 0; j < colCount; j++) {
      const cellValue = sourceData[i][j];
      currentRow.push(typeof cellValue === 'string' ? cellValue.toLowerCase() : cellValue);
    }
    lowerCaseData.push(currentRow);
  }
  
  // 写入目标表
  const targetSheet = ss.getSheetByName(targetSheetName);
  targetSheet.getRange(1, 1, lowerCaseData.length, lowerCaseData[0].length)
             .setValues(lowerCaseData);
}

方法三:Excel VBA 环境下的实现

如果你用的是Excel VBA,逻辑类似,通过遍历数组来处理:

Sub ConvertToLowerCaseAndCopy()
    ' 配置工作表名称
    Dim sourceSheet As Worksheet, targetSheet As Worksheet
    Set sourceSheet = ThisWorkbook.Sheets("源工作表名")
    Set targetSheet = ThisWorkbook.Sheets("目标工作表名")
    
    ' 获取源数据到数组(比直接遍历单元格快很多)
    Dim sourceData As Variant
    sourceData = sourceSheet.UsedRange.Value
    
    ' 遍历数组转换小写
    Dim i As Long, j As Long
    For i = LBound(sourceData, 1) To UBound(sourceData, 1)
        For j = LBound(sourceData, 2) To UBound(sourceData, 2)
            ' 只处理字符串类型
            If TypeName(sourceData(i, j)) = "String" Then
                sourceData(i, j) = LCase(sourceData(i, j))
            End If
        Next j
    Next i
    
    ' 写入目标工作表
    targetSheet.Range("A1").Resize(UBound(sourceData, 1), UBound(sourceData, 2)).Value = sourceData
End Sub

核心思路都是:先获取整个数据范围的数组,然后遍历数组中的每个元素,对字符串类型的值执行小写转换,最后将处理后的数组写入目标工作表,这样比逐个处理单元格效率高很多哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:32:47