【问题标题】:Trim and Clean Google script修剪和清理 Google 脚本
【发布时间】:2018-04-26 20:29:21
【问题描述】:

我可以用下面的脚本修剪我的dada

但是有没有办法在 Google 中使用类似于 Clean in VBA 的 Google Script 来清理数据?

即删除所有非打印字符

我无法查找-替换从其他来源复制并粘贴到 GS 中的数据

谢谢

function trimSpacesSHT(shtName) {
 var sheet = SpreadsheetApp.getActive().getSheetByName(shtName);
 var activeRange = sheet.getDataRange();

  // Read Height and Width only once
  var maxHeight = activeRange.getHeight();
  var maxWidth = activeRange.getWidth();

  // Read all values and formulas at once
  var rangeValues = activeRange.getValues();
 // iterate through all cells in the selected range
 for (var cellRow = 0; cellRow < maxHeight; cellRow++) {
    for (var cellColumn = 0; cellColumn < maxWidth; cellColumn++) {
    rangeValues[cellRow][cellColumn] = rangeValues[cellRow][cellColumn].toString().trim().replace(/\s(?=\s)/g,'');
  }
}
 // Write back all values at once
 activeRange.setValues(rangeValues);
}

【问题讨论】:

  • 解释你要做什么
  • 删除所有非打印字符
  • I am unable to find-replace on data copied and pasted into GS from another source 是什么意思?你的目标是什么?你在哪里粘贴文本?您对现有的 String 方法做了什么尝试?
  • =arrayformula(clean(a1:d500)) 也可以使用
  • 只是一个警告,此修剪功能可能会损坏您的一些数据。示例:单元格值 8055-1 变为 8055 年 1 月 1 日(可能是由于 toString() 方法)。但它在大多数情况下都有效。

标签: javascript google-apps-script google-sheets


【解决方案1】:

VBA 的 CLEAN 方法删除了0-31, 127, 129, 141, 143, 144, 157 的字符。您想使用 Google Apps 脚本实现此目的吗?如果我的理解是正确的,那么这个示例脚本怎么样?因为我对这种方法很感兴趣,想研究一下,所以我创造了这个。

示例脚本:

function cleanForGAS(str) {
  if (typeof str == "string") {
    var escaped = escape(str.trim());
    for (var i = 0; i <= 31; i++) {
      var s = i.toString(16);
      var re = new RegExp("%" + (s.length == 1 ? "0" + s : s).toUpperCase(), "g");
      escaped = escaped.replace(re, "");
    }
    var remove = ["%7F", "%81", "%8D", "%8F", "%90", "%9D"];
    remove.forEach(function(e) {
      var re = new RegExp(e, "g");
      escaped = escaped.replace(re, "");    
    });
    return unescape(escaped).trim();
  } else {
    return str;
  }
}

用法:

当你使用这个时,请修改你的脚本。

发件人:

rangeValues[cellRow][cellColumn] = rangeValues[cellRow][cellColumn].toString().trim().replace(/\s(?=\s)/g,'');

收件人:

rangeValues[cellRow][cellColumn] = cleanForGAS(rangeValues[cellRow][cellColumn].toString());

参考:

如果我误解了你的问题,我很抱歉。

【讨论】:

  • 谢谢,你理解的很好
  • @xyz 欢迎。我很高兴你的问题得到了解决。我也可以从你的问题中学习。也谢谢你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多