2013-06-08 26 views
6

Tôi có một vài truy vấn trên trang tính nơi tôi trích xuất thông tin vào cơ sở dữ liệu.làm mới ô thay vì nhấn ctrl-Shift-E theo cách thủ công

Vấn đề tôi có là mã được triển khai là tốt cho đến khi một số trang tính không hiển thị truy vấn hiển thị: "cảnh báo: một hoặc nhiều mục nhập của các kết quả này có thể không được hiển thị. Chọn ctrl + Shift + E cho họ thấy

tôi đã cố gắng thanh toán bù trừ các giá trị và dán chúng lại không có kết quả

gì khác tôi có thể làm

+0

Bạn lo lắng về vấn đề gì? Có cần phải bắt buộc làm mới để bạn có thể thấy các giá trị trong trình duyệt không? Hay bạn đang gặp vấn đề với các tập lệnh đọc các phạm vi chứa các truy vấn? – Mogsdad

+0

để buộc làm mới! Các scrip là tốt. Chỉ khi tôi kích hoạt kịch bản để chuyển dữ liệu da vào cơ sở dữ liệu của tôi, không phải là nguyên nhân buộc tôi phải thực hiện thủ công bằng tổ hợp phím – eddg

+0

Liệu tập lệnh có gặp bất kỳ lỗi nào trên 'dữ liệu bị thiếu' không? Nếu có, bạn thấy lỗi hoặc phản hồi nào? – Mogsdad

Trả lời

6

IMHO tôi không nghĩ rằng có một câu trả lời kinh điển cho câu hỏi này..? - luôn có tiếng ồn lớn từ người dùng xung quanh một số chủ đề chỉ đơn thuần là tiêu tan vào một sự im lặng kỳ lạ của kỹ thuật tài liệu của Google nhóm (vấn đề này dường như được bao phủ trong cùng một bí ẩn vĩnh cửu như IMPORTRANGE thường xuyên thất bại hoặc SPLIT không tạo ra một ma trận hoàn hảo).

Tôi đã bị chính mình cắn một vài lần để có một số trải nghiệm. Tôi đã sử dụng một cách giải quyết heath-robinson, mà đã làm việc cho tôi. Nhưng YMMV.

Câu hỏi của OP thảo luận về tình huống có công thức hoạt động tốt, nhưng sau một thời gian hoạt động, tình trạng Ctrl + Shift + E đã bắt đầu xảy ra.

(Có các trường hợp khác trong đó Ctrl + Shift + E có thể xảy ra do kết quả của một công thức cố ghi đè lên các ô được viết bởi công thức khác. Trong trường hợp này, đôi khi thêm EXPAND vào lúc bắt đầu công thức mong muốn Ngoài ra, sử dụng chức năng lọc, thay vì so sánh 'IF', không quét lên trước = TIẾP TỤC (1,2,3) tế bào ... nhưng có lẽ không phải trong số này có khả năng trợ giúp cho câu hỏi OPs). Theo kinh nghiệm của tôi, bảng tính có thể phát triển hành vi 'nhầm lẫn' theo thời gian, do đó, yêu cầu Ctrl + Shift + E, có nghĩa là một khoảng thời gian có một số lần sử dụng bảng tính dẫn đến thay đổi dữ liệu . Tôi có thể suy đoán thêm rằng có nhiều khả năng hành vi nhầm lẫn hơn này khi dữ liệu được gọi là năng động hơn, ví dụ: các hàng được thêm vào, các hàng bị loại bỏ HOẶC có các công thức khác cũng tính toán từ cùng một tập dữ liệu (hãy để một mình hai công thức này liên quan đến nhau).

Tôi nghĩ rằng thành ngữ 'nhầm lẫn-hành vi' là thích hợp vì kỹ thuật thực tế của bảng tính chỉ là một hộp mở đối với các kỹ sư của google; chúng tôi không thể hợp lý hóa hoạt động của nó. Vì vậy, có vẻ như bí ẩn và huyền diệu như thế nào, trong trường hợp của OP và trải nghiệm của tôi, bảng tính hoạt động tốt, nhưng sau đó thay đổi hành vi để yêu cầu Ctrl + Shift + E mà không có bất kỳ thay đổi nào trong công thức, chỉ trong các thay đổi dữ liệu tích lũy của trang tính thông qua việc sử dụng.

Tôi đưa ra ví dụ về cách giải quyết của mình bằng cách sử dụng trường hợp mẫu của tôi. Lưu ý rằng trong trường hợp của tôi, dữ liệu cũng như các công thức có vấn đề nằm trong một trang tính mà tôi gọi là tờ sản xuất

Cách giải quyết liên quan đến việc sử dụng tập lệnh để sao chép 'mẫu trang tính', trong cùng một bảng tính như sản xuất tấm. Bản mẫu có cấu trúc giống với bảng sản xuất có cùng các tiêu đề cột, nhưng chỉ với một vài dòng dữ liệu mẫu. Nó có các công thức tương tự như bảng sản xuất, tham chiếu đến dữ liệu mẫu trong tờ mẫu tự giống nhau (không phải trong trang tính sản xuất). Quan trọng hơn, trang mẫu không hiển thị 'hành vi lộn xộn' - không cần Ctrl + Shift + E trong các ô công thức nên có bất kỳ thay đổi nào đối với dữ liệu mẫu của mẫu. Nó cũng chứa formating của tờ sản xuất.

Vì vậy, khi tập lệnh chạy, nó tạo bản sao của mẫu trang tính; sau đó nó sao chép dữ liệu của trang sản xuất vào mẫu này trùng lặp và áp dụng lại các định dạng. Bản sao này trở thành trang sản xuất mới. Bảng sản xuất cũ bị ẩn (trong trường hợp của tôi, nhưng có thể bị xóa).

Tôi có hệ thống này hoạt động trên bảng tính Danh sách nhiệm vụ đang được sử dụng bởi 12 người hàng ngày, trong đó Tác vụ đến bằng biểu mẫu google suốt cả ngày (và được sao chép sang bảng sản xuất bởi tập lệnh khác, không được hiển thị là không liên quan cho OP này). Sau khi hoàn thành nhiệm vụ, hàng của tác vụ sẽ bị xóa khỏi bảng sản xuất. Vì vậy, dữ liệu phát triển và thu nhỏ liên tục trong suốt cả ngày. Bảng trùng lặp được tạo ra mỗi đêm, bằng cách kích hoạt theo thời gian khi hàm insertSheet(). Đây là tập lệnh tôi sử dụng:

function insertSheet(){ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet =ss.getSheets()[0]; //first sheet is the production sheet 
    var sheetRange = sheet.getRange('A3:P'); 
    var sheetValues= sheetRange.getValues(); 
    var d = Utilities.formatDate(new Date(), Session.getTimeZone(), 'ddMMMyyyy-hh:mm:ss'); 
    var ex = sheet.setName('CCEs' + d); 
    var templateSheet = ss.getSheetByName('templateSheet'); 
    var s2 = ss.insertSheet(0,{template: templateSheet}); 
    var height = sheetRange.getHeight(); 
    s2.insertRowsAfter(2, height) 
    s2.setName('CCEs'); 
    templateSheet.hideSheet(); 
    ex.hideSheet(); 
    s2.getRange('A3:P' + (sheetValues.length+2)).setValues(sheetValues); 
    format(); // 
    templateSheet.hideSheet(); 
    ex.hideSheet(); 
} 

function format(){ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var formatRange = ss.getSheetByName('templateSheet').getRange('B2:N2').copyTo(ss.getSheetByName('CCEs').getRange(2,2, ss.getSheetByName('CCEs').getMaxRows() -1,14), {formatOnly:true}); 
} 

Trước khi triển khai chiến lược này, bảng tính sẽ trải nghiệm 'hành vi lộn xộn' sau một vài ngày.

Trang tính chứa ba công thức sẽ bị nhầm lẫn. Họ không phải là quan trọng đối với OP, nhưng tôi lặp lại ở đây chỉ để cung cấp cho người đọc một cảm giác cho sự thành công của chiến lược này:

=arrayformula(IFERROR(FILTER(if(row(O:O) =1,"Auto Time Stamp ",iferror(1/0)) &O:O&if(row(O:O) =1,"copy",),len(A:A)),"Error")) 

=Arrayformula(iferror(if(filter(L:L, len(A:A)) - filter(A:A, len(A:A))>0, if(int(filter(L:L, len(A:A)) - filter(A:A, len(A:A))) = 0 , text(text(filter(L:L, len(A:A)), "HH:mm") -text(filter(A:A, len(A:A)), "HH:mm") , "H:mm") , int(filter(L:L, len(A:A)) - filter(A:A, len(A:A))) & "Day(s), " & text(text(filter(L:L, len(A:A)), "HH:mm") -text(filter(A:A, len(A:A)), "HH:mm") , "H:mm")) ,iferror(1/0)),"Time Taken")) 

=arrayformula(IFERROR(if((ISBLANK(FILTER(J1:J,LEN(A1:A))) * (FILTER(G1:G,LEN(A1:A)) = "Normal")* (now()-FILTER(A1:A,LEN(A1:A))> OverdueTimings!A1)),"OVERDUE Normal", if((ISBLANK(FILTER(J1:J,LEN(A1:A))) * (FILTER(G1:G,LEN(A1:A)) = "Urgent")* (now()-FILTER(A1:A,LEN(A1:A))> OverdueTimings!A2)),"OVERDUE Urgent", if((ISBLANK(FILTER(J1:J,LEN(A1:A))) * (FILTER(G1:G,LEN(A1:A)) = "Very Urgent")* (now()-FILTER(A1:A,LEN(A1:A))> OverdueTimings!A3)),"OVERDUE V. Urgent", IFERROR(1/0)))),countif(if((ISBLANK(FILTER(J1:J,LEN(A1:A))) * (FILTER(G1:G,LEN(A1:A)) = "Normal")* (now()-FILTER(A1:A,LEN(A1:A))> OverdueTimings!A1)),"OVERDUE Normal", if((ISBLANK(FILTER(J1:J,LEN(A1:A))) * (FILTER(G1:G,LEN(A1:A)) = "Urgent")* (now()-FILTER(A1:A,LEN(A1:A))> OverdueTimings!A2)),"OVERDUE Urgent", if((ISBLANK(FILTER(J1:J,LEN(A1:A))) * (FILTER(G1:G,LEN(A1:A)) = "Very Urgent")* (now()-FILTER(A1:A,LEN(A1:A))> OverdueTimings!A3)),"OVERDUE V. Urgent", iferror(1/0)))),"OVERDUE *")& " OVERDUE")) 

Sau vài ngày, chúng tôi xóa tất cả các tấm sản xuất cũ lũy kế.

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