首页 > 解决方案 > 有没有办法测试一个单元格是否包含任何可见的格式?

问题描述

因此,我构建了一个函数,该函数将根据提供的列字母返回下一个没有数据的可用行。在这种情况下,该列中的数据必须是连续的,因此如果行中有间隙,那么我知道这将不起作用。有一个名为 Format 的可选参数,如果设置为 1 将假定格式化的单元格被认为是使用的并且不会接受它为空。这就是我所拥有的

// @param {txt} SheetName   : The name of the sheet are testing on.
// @param {txt} Column      : The column letter that we are checking for a next row in
// @param {int} Format      : Optional Boolean Value, when testing for the next available row does a formatted cell count as a used cell IE the cell has a fill, has a border, 1 = yes, 0 = no (default)
// @returns {number}        : return the next available row number.
function getNextAvailableRowInColumn(SheetName, Column, Format = 0){

  var ColValues = ss.getRange(SheetName+'!'+Column+'1:'+Column).getValues(); // This should evaluate to .getRange("Invoices!A1:A");
  var NextAvailableRow = ColValues.filter(String).length +1; 
  // We add 1 so we get the next available row and not the last row with data
  
if (Format) {  
 while (THIS CELL HAS FORMATING) {
    NextAvailableRow +1;
 }
}
return NextAvailableRow;
  
}

因此,基于此功能,一切都很好,逻辑也很合理。一旦我们找到下一个没有任何数据的可用行,但我们不知道它是否没有格式(如果我们设置了位),所以我们测试了单元格,如果它有可见的格式,则向下一行和再次测试,继续往下走,直到我们找到一个没有格式的单元格。

问题是,如何测试“此单元格已格式化”?我将如何测试一个单元格是否对它进行了任何类型的可见格式设置,例如添加了边框、突出显示了它?我不关心不可见的格式,如粗体、下划线或字体颜色设置。

标签: google-apps-scriptgoogle-sheets

解决方案


getRichTextValue您可以使用该方法中的运行来确定单元格是否具有格式。

function cellHasFormatting(address = "A1") {
  var cell = SpreadsheetApp.getActiveSheet().getRange(address);
  var runs = cell.getRichTextValue().getRuns();
  for (let r=0; r<runs.length; r++) {
    const style = runs[r].getTextStyle();
    if (style.isBold() || style.isItalic() || style.isUnderline()) {
      return true;
    }
  }
  return false;  
}

推荐阅读