簡體   English   中英

添加邊框並更改表格中空白單元格的顏色

[英]Add borders and change color of blank cells in a table

我在Google表格中有一個來自我的低音俱樂部的錦標賽結果表(請參閱https://docs.google.com/spreadsheets/d/1hPH2lKDtDqdjnghbYS3kWtXb3IGmunXao1JuWdi5SgM/edit?usp=sharing的TX摘要選項卡)。 該表是QUERY函數的結果,該函數按成員分組,並按事件編號進行透視。 當俱樂部成員不參加特定比賽時,表中的相應單元格為空白。

單擊此處查看所需表狀態的圖像

我有一個復制並修改過的Google腳本(見下文),它會更改活動工作表上單元格的邊框和顏色。 如果QUERY結果中的所有單元格中都填充有值,則效果很好。 我可以將表格外部的空白單元格更改為無邊框的#0066cc。 我可以將表格區域中包含值的單元格更改為#dbdbdb,並在所有面上都加邊框。

我正在努力的是當QUERY結果包含空白單元格時。 對於這些情況,我想添加邊框並將顏色更改為#aaaaaa。 當前,該腳本正在為表#0066cc中的空白單元格着色,並且未添加邊框(屬於else語句)。 我最終得到一張看起來像我在玩BREAKOUT的桌子(還記得嗎?)。 我嘗試在第二個if語句中進行比較的多種變體(我認為==“”或===“”可以做到),以嘗試更改這些單元格,但是我似乎無法使其正常工作。 我知道我可能真的缺少了一些非常簡單的東西,但是看着它直到我的眼睛流血了,我看不到樹木茂盛的森林。 任何幫助將不勝感激。

謝謝,

貝弗公爵

function summaryBorders() {
var doc = SpreadsheetApp.getActiveSheet()
var range = SpreadsheetApp.getActiveSheet().getRange(1, 1, doc.getMaxRows(), doc.getMaxColumns());
var cells = doc.getRange(1, 1, doc.getMaxRows(), doc.getMaxColumns()).getBackgrounds();
range.setBorder(false, false, false, false, false, false);
var values = range.getValues();
for (var i = 0; i < values.length; i++) {
  for (var j = 0; j < values[i].length; j++) {
    if (values[i][j] !== "") {
      range.getCell(i + 1, j + 1).setBorder(true, true, true, true, true, true)
      cells[i][j] = "#dbdbdb";
      if (values[i][j] == "" && j >=2 && j<15) {
        range.getCell(i + 1,j + 1).setBorder(true, true, true, true, true, true)
        cells[i][j] = "#aaaaaa";
        }
    } else {
      cells[i][j] = "#0066cc";
    }
  }  
}
doc.getRange(1, 1, doc.getMaxRows(), doc.getMaxColumns()).setBackgrounds(cells);

}

這似乎起作用-之所以不起作用,是因為空白單元格和零單元格之間存在差異。 空白表示一個單元格中有一個“空格”,零個單元格就像未激活。 因此,我將其更改為尋找0或空白,也刪除了小部分“ && j> = 2 && j <15”進行測試-您將要重新添加它。

 function summaryBorders() { var doc = SpreadsheetApp.getActiveSheet() var range = SpreadsheetApp.getActiveSheet().getRange(1, 1, doc.getMaxRows(), doc.getMaxColumns()); var cells = doc.getRange(1, 1, doc.getMaxRows(), doc.getMaxColumns()).getBackgrounds(); range.setBorder(false, false, false, false, false, false); var values = range.getValues(); for (var i = 0; i < values.length; i++) { for (var j = 0; j < values[i].length; j++) { if (values[i][j] !== "") { range.getCell(i + 1, j + 1).setBorder(true, true, true, true, true, true) cells[i][j] = "#dbdbdb"; } if (values[i][j] = 0 || values[i][j] == "") { range.getCell(i + 1,j + 1).setBorder(true, true, true, true, true, true) cells[i][j] = "#aaaaaa"; } else { cells[i][j] = "#0066cc"; } } } doc.getRange(1, 1, doc.getMaxRows(), doc.getMaxColumns()).setBackgrounds(cells); } 

嘗試限制范圍。

我使用了以下代碼:

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheets()[0];
 // Returns the active range
 var range = sheet.getRange(3,3,3,4);
  Logger.log(range.getLastRow())
 var cells = sheet.getRange(3,3,3,4).getBackgrounds();

  var values = range.getValues();
for (var i = 0; i < values.length; i++) {
  for (var j = 0; j < values[i].length; j++) {
    if (values[i][j] !== "") {
      range.getCell(i + 1, j + 1).setBorder(true, true, true, true, true, true)
      cells[i][j] = "#dbdbdb";
      if (values[i][j] == "" && j >=2 && j<15) {
        range.getCell(i + 1,j + 1).setBorder(true, true, true, true, true, true)
        cells[i][j] = "#aaaaaa";
        }
    } else {
      cells[i][j] = "#0066cc";
    }
  }  
}
  sheet.getRange(3,3,3,4).setBackgrounds(cells);
}

結果:

在此處輸入圖片說明

希望這可以幫助。

之所以無法使數據范圍內的空白單元格變為灰色,是因為以下代碼存在錯誤:

if (values[i][j] !== "") {                  // This block doesn't run when you have a blank cell
      range.getCell(i + 1, j + 1).setBorder(true, true, true, true, true, true)
      cells[i][j] = "#dbdbdb";
      if (values[i][j] == "" && j >=2 && j<15) {            // this if statement is never called I.e. this block is skipped over when the cell is empty
        range.getCell(i + 1,j + 1).setBorder(true, true, true, true, true, true)
        cells[i][j] = "#aaaaaa";
        }
    } else {
      cells[i][j] = "#0066cc";
    }

第二條if語句永遠不會執行。 因為它在塊的第一個內部,所以在遇到空單元格時永遠不會執行。 為了使其正常工作,您將必須執行以下操作

if (values[i][j] !== "") {
      range.getCell(i + 1, j + 1).setBorder(true, true, true, true, true, true)
      cells[i][j] = "#dbdbdb";
   } else if (values[i][j] == "" && j >=2 && j<15) {
        range.getCell(i + 1,j + 1).setBorder(true, true, true, true, true, true)
        cells[i][j] = "#aaaaaa";
    } else {
      cells[i][j] = "#0066cc";
    }

有關其他的更多詳細信息,可以在這里查看教程

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM