2013-01-15 40 views
5

Tôi đang sử dụng tập lệnh ứng dụng google để tạo bảng tính tùy chỉnh. Để cải thiện tốc độ hiển thị của tập lệnh, trước tiên tôi xây dựng một mảng giá trị đầu ra và sau đó sử dụng setValues() để tạo bảng tính cùng một lúc.Làm cách nào để có thể che giấu các giá trị bằng cách sử dụng setValues ​​trong tập lệnh ứng dụng google?

Khi tôi cố gắng thêm công thức vào bảng tính với setFormulas(), nó cũng ghi đè tất cả giá trị của tôi. Vì vậy, bây giờ tôi có một trường hợp trong đó setValues() ghi đè công thức của tôi và setFormulas() ghi đè các giá trị của tôi.

Có cách nào tôi có thể chỉ định giá trị mặt nạ cho các phần tử cụ thể trong mảng đầu ra của mình để các phần tử đó không ghi đè dữ liệu đã có trong bảng tính không?

Lý tưởng nhất là tôi sẽ khởi tạo mọi phần tử của mảng đầu ra thành giá trị mặt nạ này, sau đó chỉ các phần tử không được che dấu sẽ hiển thị trong bảng tính.

Trả lời

0

Rất tiếc, không có hỗ trợ cho mặt nạ theo phương pháp setValues() hoặc setFormulas(). Tuy nhiên, nếu công thức được gán cho phương pháp setValues(), công thức này nên đặt chính xác, do đó bạn có thể đặt cả giá trị và công thức trong một cuộc gọi đến setValues().

range.setValues([['foo', '=LEN("bar")']]); 
+0

Điều này dường như không hoạt động trong Bảng tính Google mới. Có công việc nào khác không? Viết mọi thứ dưới dạng Công thức không hữu ích cho người dùng cuối. – fooby

3

Đối với bất kỳ ai tìm thấy điều này thông qua Google, sử dụng setValues ​​() cho công thức giờ đây có vẻ hoạt động trong trang tính mới.

Cụ thể hơn, tôi đang sử dụng mã như thế này để đưa công thức trở lại sau khi thực hiện công việc trên bảng:

function setValuesAndFormulas() { 
    var sheet = SpreadsheetApp.getActive().getActiveSheet(); 
    var range = sheet.getDataRange(); 
    var values = range.getValues(); 
    var formulas = range.getFormulas(); 

    for (var i = 0; i < values.length; i++) { 
    for (var j = 0; j < values[i].length; j++) { 
     if (formulas[i][j].charAt(0) == "=") { 
     values[i][j] = formulas[i][j]; 
     } 
    } 
    } 

    range.setValues(values); 
} 

Hy vọng rằng sẽ giúp!

+1

Cảm ơn, đây chỉ là những gì tôi cần! Một điều, tôi không nghĩ rằng chúng ta cần phải kiểm tra 'if (công thức [i] [j] .charAt (0) ==" = ")', chỉ có thể kiểm tra 'if (công thức [i] [j])' , đúng? –

+0

Không chắc chắn, Đã lâu rồi tôi không cần phải làm điều này. Nếu bạn làm việc nó ra, cảm thấy tự do để chỉnh sửa câu trả lời của tôi :) –

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