2015-04-15 32 views
5

Tôi đang cố gắng ẩn các hàng nếu Cột A trống. Tôi muốn áp dụng điều này cho các trang cụ thể (Week1, Week2, Week3, Week4 and Week5). Đây là mã tôi có cho đến nay cho Week1.Ẩn các hàng trong bảng tính google nếu Cột A trống?

function ConditionalHideRow() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName("Week1"); 
    var condition = sheet.getRange("A:A").getValue(); 
    if (condition = "EMPTY") { 
    sheet.hideRows(1,125) 
    }  

EDIT: Câu hỏi bổ sung, có cách nào tôi có thể làm cho nó hiện ra khi Cột A được điền? Tôi đang sử dụng công thức truy vấn = để điền bảng tính của mình và độ dài sẽ cần thay đổi khi có thêm dữ liệu.

+0

nếu câu trả lời dưới đây phù hợp với bạn, bạn có thể cân nhắc việc đánh dấu câu trả lời để phần còn lại của chúng tôi sẽ biết. – ScampMichael

+0

câu hỏi tiền thưởng của bạn dẫn tôi tin rằng tất cả các hàng bạn đang ẩn nằm dưới hàng bị chiếm đóng cuối cùng. đúng không? bạn đang ẩn các hàng được xen kẽ trong dữ liệu hay chỉ ở cuối cùng sau khi dữ liệu cuối cùng? – ScampMichael

+0

Tôi đang ẩn các hàng được xen kẽ trong dữ liệu. Chủ lao động của tôi muốn tôi tạo một bảng tính nơi anh ta có thể nhìn thấy cả thu nhập và chi phí hàng tuần nhưng tôi không có cách nào đoán được phần Thu nhập có thể là bao lâu để tôi bổ sung thêm hàng trống để đền bù.Sử dụng công thức của JPV tôi có thể ẩn các hàng trống nhưng nó sẽ trở thành một nỗi đau khi tôi không thể bỏ ẩn những hàng rất giống nhau (với cùng một hiệu quả) khi một cái gì đó được thêm vào chúng (tôi đang sử dụng truy vấn importrange => để tạo ra dữ liệu). – Darksun

Trả lời

4

Tôi giả sử 'EMPTY' không thực sự là chuỗi được tìm thấy trong col A và bạn muốn kiểm tra xem col A có thực sự trống không? Nếu vậy, hãy thử:

function hideRows() { 
["Week1", "Week2", "Week3", "Week4", "Week5"].forEach(function (s) { 
    var sheet = SpreadsheetApp.getActive() 
     .getSheetByName(s) 
    sheet.getRange('A:A') 
     .getValues() 
     .forEach(function (r, i) { 
      if (!r[0]) sheet.hideRows(i + 1) 
     }); 
    }); 
} 

Hoặc, cho một cách tiếp cận 'cổ điển' hơn:

function hideRows2() { 
var sheets = ["Week1", "Week2", "Week3", "Week4", "Week5"]; 
for (var i = 0, sLen = sheets.length; i < sLen; i++) { 
    var sheet = SpreadsheetApp.getActive() 
     .getSheetByName(sheets[i]) 
    var val = sheet.getRange('A:A') 
     .getValues(); 
    for (var j = 0, vLen = val.length; j < vLen; j++) { 
     if (!val[j][0]) sheet.hideRows(j + 1) 
     } 
    } 
} 

Hãy chắc chắn rằng bạn không có quá nhiều hàng trống (sau khi hàng cuối cùng với dữ liệu) như có thể dẫn đến thời gian thực thi của tập lệnh.

+0

Điều đó có hiệu quả, cảm ơn bạn! – Darksun

+0

cách tiếp cận cổ điển giống như những gì tôi đã viết nhưng tôi chắc chắn đã học được điều gì đó từ cách tiếp cận đầu tiên. cảm ơn bạn JPV – ScampMichael

+0

@Darksun, rất vui khi được nghe. Hãy xem xét 'chấp nhận' câu trả lời ... – JPV

0

Trả lời chỉnh sửa: Cách tiếp cận duy nhất để bỏ ẩn các hàng bị chiếm đóng có ý nghĩa với tôi vào thời điểm này sẽ là hiện tất cả các hàng cho trang tính trước khi ẩn các hàng trống.

Thêm dòng dưới nơi nó nói // Thêm này

function hideRows() { 
["Week1", "Week2", "Week3", "Week4", "Week5"].forEach(function (s) { 
    var sheet = SpreadsheetApp.getActive() 
     .getSheetByName(s) 
    sheet.unhide(sheet.getRange('A:A')) // Add this 
    sheet.getRange('A:A') 
     .getValues() 
     .forEach(function (r, i) { 
      if (!r[0]) sheet.hideRows(i + 1) 
     }); 
    }); 
} 

Hoặc để thôi ẩn tất cả một cách độc lập:

function unhideRows() { 
["Week1", "Week2", "Week3", "Week4", "Week5"].forEach(function (s) { 
    var sheet = SpreadsheetApp.getActive() 
     .getSheetByName(s) 
    sheet.unhide(sheet.getRange('A:A')) 
    }); 
} 

Để tham khảo trong tương lai, có những cách hiệu quả hơn làm việc khi bạn có thể xử lý các hàng liền kề dưới dạng một khối thay vì một khối tại một thời điểm. Mặc dù điều này làm việc tôi tin rằng JPV có thể đã làm nó một chút khác nhau, ông đã hiểu cách bố trí.

+0

đó thực sự là chính xác. Không có tôi có thể có 'đoán' bố trí từ câu hỏi ban đầu (đó là lý do tại sao nó luôn luôn là một ý tưởng tốt để chia sẻ một bảng tính ví dụ). Dù sao, điều tốt bạn đang ở xung quanh. :-) – JPV

+0

Giống như giao pizza. Một hoặc hai tuần một lần, đặt hàng riêng lẻ là tốt. Có một bữa tiệc và cần 12, bạn sẽ không yêu cầu họ một lần, bạn sẽ thực hiện một cuộc gọi và đặt hàng 12 cho một lần giao hàng. – ScampMichael

5

Bạn không cần một công thức cho điều này, bạn có thể sử dụng một bộ lọc ...

  1. Highlight cột trong câu hỏi
  2. Chọn * Dữ liệu>Lọc
  3. Sẽ có một nút thả xuống trong hàng tiêu đề ngay bây giờ. Nhấp vào đó và chọn/bỏ chọn các điều kiện của bạn

CẬP NHẬT: Điều này cũng sẽ phù hợp với câu hỏi thưởng của bạn. Khi cột được điền, nó sẽ không còn đáp ứng các điều kiện lọc nếu "(Trống)" được bỏ chọn.

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