2013-11-22 20 views
10

Tôi có Bảng tính Google Tài liệu, trong cột A là ngày (A1: 2013-11-22, A2: 2013-11-23, A3: 2013-11-24 v.v.). Tôi muốn tự động làm nổi bật - đặt màu nền cho một hàng, trong đó cột A là ngày hôm nay. Để có mỗi ngày một hàng khác nhau được đánh dấu.Cách đặt màu nền cho một hàng dựa trên ngày hiện tại trong Bảng tính Google Tài liệu?

Tôi hy vọng rằng tôi sẽ cần một tập lệnh, IMHO không thể thực hiện với việc định dạng có điều kiện trong Bảng tính Google Docs.

Bất kỳ ý tưởng nào về cách thực hiện? Cảm ơn rất nhiều!

Trả lời

3

Tôi đã sửa đổi một ví dụ từ Serge (cảm ơn, Serge!), Các ngày nằm trong cột A. Hàng có ngày bị xóa màu nền, các hàng khác vẫn còn nguyên vẹn. Tiền thưởng: trình đơn tùy chỉnh để chạy tập lệnh trên trang tính hiện hoạt.

/* check for a cell format */ 
function isValidDate(d) { 
    if (Object.prototype.toString.call(d) !== "[object Date]") 
    return false; 
    return !isNaN(d.getTime()); 
} 

/* check for a cell format */ 
function colorRow() 
{ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sh = ss.getActiveSheet(); 

    customOnOpen(sh); 
} 

/* set the background - main function, sh is a sheet */ 
function customOnOpen(sh) { 
    var headers = sh.getRange(1,1,sh.getLastRow()).getValues(); 
    var today = new Date().setHours(0,0,0,0); 
    for(var n=0;n<headers.length;++n){ 
    var date = new Date(headers[n][0]).setHours(0,0,0,0); 
    Logger.log('Test row '+n); 
    if(date==today){ 
     Logger.log('Set bg at '+n); 
     sh.getRange(n+1,1,1,sh.getMaxColumns()).setBackground('yellow'); 
    } 
    else 
    { 
     if (isValidDate(headers[n][0])){ 
     Logger.log('Clear bg at'+n); 
     sh.getRange(n+1,1,1,sh.getMaxColumns()).setBackground(null); 
     } 
     else{ 
     Logger.log('Not a date at'+n); 
     } 
    } 
    } 
} 


function onOpen() { 
    var sheet = SpreadsheetApp.getActiveSpreadsheet(); 

    /* prepare the custom menu */ 
    var entries = [{ 
    name : "Set background", 
    functionName : "colorRow" 
    }]; 
    sheet.addMenu("My menu", entries); 

    /* run the function for two specific sheets */ 
    customOnOpen(sheet.getSheetByName('Sheet1')); 
    customOnOpen(sheet.getSheetByName('Sheet2')); 
}; 
2

Nếu bạn muốn tự động mở bảng tính, bạn sẽ phải cài đặt có thể cài đặt trênMở sẽ gọi hàm bên dưới (từ trình chỉnh sửa tập lệnh goto ressources> kích hoạt tập lệnh này> thêm trình kích hoạt mới> sreadsheet/Mở)

Và đây là đoạn code cho các cột: (xem dưới đây để biết hàng)

function customOnOpen() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sh = ss.getActiveSheet(); 
    var headers = sh.getRange(1,1,1,sh.getLastColumn()).getValues(); 
    var today = new Date().setHours(0,0,0,0); 
    for(var n=0;n<headers[0].length;++n){ 
    var date = new Date(headers[0][n]).setHours(0,0,0,0); 
    Logger.log(today+' =? '+date) 
    if(date==today){ 
     n++ 
     Logger.log('match on column '+n) 
     if(n>=2){sh.getRange(1,n-1,sh.getMaxRows(),1).setBackground(null);};// resets the backGround for yesterday if not the first column 
     sh.getRange(1,n,sh.getMaxRows(),1).setBackground('yellow'); 
     break; 
    } 
    } 
} 

phiên bản này để tô màu cho hàng

function customOnOpen2() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sh = ss.getActiveSheet(); 
    var headers = sh.getRange(1,1,sh.getLastRow()).getValues(); 
    var today = new Date().setHours(0,0,0,0); 
    for(var n=0;n<headers.length;++n){ 
    var date = new Date(headers[n][0]).setHours(0,0,0,0); 
    Logger.log(today+' =? '+date) 
    if(date==today){ 
     n++ 
     Logger.log('match on column '+n) 
     if(n>=2){sh.getRange(n-1,1,1,sh.getMaxColumns()).setBackground(null);} 
     sh.getRange(n,1,1,sh.getMaxColumns()).setBackground('yellow'); 
     break; 
    } 
    } 
} 

Lưu ý: nếu bạn muốn nó chạy hoàn toàn tự động dựa trên bộ hẹn giờ hoàn toàn có thể thực hiện được, chỉ cần thay đổi biến ss và sh bằng cách sử dụng openByIdgetSheetByName (see doc here) và thiết lập bộ hẹn giờ để hoạt động mỗi ngày vào khoảng 1 giờ sáng.

0

Bạn cũng có thể chỉ có một cột mới trong bảng tính làm phù hợp với ngày tháng và trả về một lá cờ nếu đó là ngày hôm nay ...

=ARRAYFORMULA(IF(A1:A =TODAY(), 1, "")) - Công thức trong ô D1

sau đó thử ..

var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var s = ss.getSheetByName('Sheet1'); 

function onOpen() { 
    var values = ss.getRange('D1:D').getValues(); // column of date flag 

    for (var row = 0; row < values.length; row++) { 
    if (values[row][0]) { 
     break; // assuming only 1 row has today's date 
    } 
    } 

    s.getRange('A1:D').setBackground(null); // range to clear 
    s.getRange(row + ":" + row).offset(1, 0).setBackground('yellow'); 

} 
+0

nên có; trong hàm ARRAYFORMULA, nhưng cảm ơn ví dụ – machj

0

Điều này khá đơn giản.

Chọn khu vực nó có để thực hiện và Nhấp chuột phải vào bảng và chọn 'định dạng có điều kiện' Từ menu này, chọn 'công thức tùy chỉnh' (nó có thể được đặt tên khác nhau, nhưng đó là sự lựa chọn cuối cùng trong menu)

khi liên tiếp cần phải được định dạng khi một ô trong cột> 1, sử dụng này trong công thức hộp

=$A$1:$A$100 > 1 

Chọn khu vực bạn muốn có hiệu lực thi hành như

A1:G100 

đó là số

2

Ở đâu Một ngày nhà, hãy thử điều này.

  • Nhấp chuột phải
  • Conditional Formatting
  • thay đổi để "Custom Formula là" trong hộp thả ở bên trái
  • xuống Nhập công thức tùy chỉnh này:

    =(A=TODAY()) 
    
  • Chọn nền của bạn và màu văn bản

  • Phạm vi: A1: 1
8

Đây là cách tôi đã làm. Tôi đã làm dạng có điều kiện và chọn phạm vi của tôi, sau đó trong "các tế bào dạng nếu ..." Tôi đã chọn tùy chỉnh và sử dụng công thức này:

=$B$2:$B$92 = today() 

Tôi có ngày tôi ở cột B và điều này làm nổi bật toàn bộ hàng, trong vòng phạm vi của tôi, cho ngày hôm nay.

0

Câu trả lời đơn giản giống như Clinet.

Format -> Conditional Formatting ...-> (Định dạng ô nếu ...) Tuỳ chỉnh công thức là

Sau đó điền vào = tế bào tầm = ngày nay()

Ví dụ: = $ I $ 2: $ BC $ 2 = TODAY()

Các vấn đề liên quan