Làm cách nào tôi có thể nhận Google Sheets để tự động cập nhật tham chiếu sang trang khác?


19

Tôi đang sử dụng một ứng dụng bên ngoài để nhập dữ liệu vào Bảng tính Google. Sổ làm việc này sau đó được tham chiếu bởi một sổ làm việc riêng (có IMPORTRANGE(spreadsheet_key, range_string)chức năng) thao tác và diễn giải dữ liệu. Vấn đề của tôi là bất cứ khi nào cá nhân tôi sửa đổi sổ làm việc được tham chiếu, sổ làm việc tham chiếu sẽ cập nhật tốt, nhưng bất cứ khi nào ứng dụng bên ngoài sửa đổi nó, nó sẽ không được cập nhật.

Tôi đã thử chỉnh sửa "Cài đặt bảng tính" để tính toán lại được thực hiện mỗi phút và trên mỗi thay đổi. Hơn nữa, tôi cũng đã cài đặt tiện ích mở rộng trong Google Chrome tự động làm mới trang mỗi giờ. Tuy nhiên, dữ liệu không được nhập lại từ sổ làm việc được tham chiếu. Ngay cả khi tôi sao chép công thức vào một ô mới, dữ liệu vẫn không được nhập lại.

Có bất cứ điều gì tôi có thể làm với sổ làm việc tham chiếu để kích hoạt Google Sheets để nhập lại dữ liệu không?

Chỉnh sửa: Để rõ ràng, tôi hiện có một sổ làm việc với dữ liệu được nhập bởi một ứng dụng bên ngoài trong đó (gọi nó là "bảng nguồn") và một sổ làm việc khác có IMPORTRANGEchức năng trong đó (gọi nó là "bảng tham chiếu"). Dữ liệu được hiển thị bởi IMPORTRANGEchức năng trong "bảng tham chiếu" không bao gồm bất kỳ dữ liệu nào được nhập bởi ứng dụng bên ngoài kể từ lần cuối tôi chỉnh sửa "bảng nguồn". Ngoài ra, cả hai sổ làm việc đều đang sử dụng Google Sheets mới.

Chỉnh sửa: Ngoài ra, câu hỏi này không giống như Làm cách nào để liên kết một ô trong Bảng tính Google với một ô trong tài liệu khác? bởi vì tôi đang sử dụng hàm được đưa ra làm giải pháp cho câu hỏi đó để nhập dữ liệu từ bảng tính. Vấn đề không phải là làm thế nào để nhập dữ liệu, mà là cách cập nhật nguồn cho dữ liệu. Giả định của tôi là Google sẽ giải quyết vấn đề này cho tôi, nhưng dữ liệu trong "bảng tham chiếu" không được cập nhật và cách duy nhất tôi có thể tìm thấy để cập nhật là đi vào "bảng nguồn "Và tự chỉnh sửa nó.


Tôi không biết chi tiết về cách thức hoạt động của nó, nhưng tôi đang sử dụng như sau: ifttt.com/google_drive
tlewis3348

@pnuts Bạn có thể giải thích ý của bạn bằng cách "đảm bảo rằng phiên bản phù hợp được sử dụng làm nguồn" không? Tôi có các cài đặt cho cả hai trang được đặt để cập nhật mỗi phút và các tab được đặt để làm mới mỗi phút. Làm thế nào, ở đâu và trong trang nào để tôi cập nhật nguồn?
tlewis3348

@pnuts Vâng, dữ liệu được hiển thị trong separate workbookổn. Từ tất cả các lần xuất hiện, có vẻ như nó vừa được nhập vào.
tlewis3348

Vâng, đây là Google Sheets mới. Một sổ làm việc hiển thị dữ liệu được thêm vào, còn sổ làm việc khác thì không. Tôi sẽ thêm điều này vào câu hỏi ban đầu để làm rõ.
tlewis3348

Câu trả lời:


14

Tôi đã vật lộn với cùng một vấn đề. Thay vì viết một chức năng tùy chỉnh, tôi thêm một chuỗi truy vấn khác nhau để spreadsheet_urlIMPORTRANGEvới hy vọng rằng mỗi khi trang web được làm mới, Google cho rằng nó cần phải lấy dữ liệu từ một bảng tính mới. Tôi chỉ cần nối thêm dấu thời gian mới để làm cho url duy nhất mỗi lần. Đó là một vụ hack trắng trợn, nhưng nó đã hoạt động với tôi trên rất nhiều trang tính.

Công thức của tôi trước đây trông giống như:

=IMPORTRANGE("https://docs.google.com/spreadsheets/d/123123123123/edit#gid=1816927174","'Sheet1'!A1:B25")

Và bây giờ có vẻ như:

=IMPORTRANGE("https://docs.google.com/spreadsheets/d/123123123123/edit#gid=1816927174"&"?"&now(),"'Sheet1'!A1:B25")

Cập nhật:

Phương pháp này không còn hoạt động vì Google không còn cho phép now()bên trong importrange(). Xem bình luận từ Hugh bên dưới.


6
Tôi đã bắt gặp câu trả lời này khi cố gắng làm điều tương tự. Có vẻ như Google đã làm điều đó để bây giờ (), rand () và randb between () không thể được sử dụng trong một cuộc gọi importrange ().
Hugh

Nếu tôi đặt bảng tính để cập nhật mỗi phút, công thức cũng sẽ được làm mới và lấy dữ liệu mới (nếu có)?
Nikhil Sahu

5

Sau đây đến từ câu trả lời của ứng dụng web này .

  1. Trong cả hai bảng tính, chèn một =now()phương trình vào một ô ngẫu nhiên, giả sửZ1
  2. Trong cả hai bảng tính đều chèn một =importrange()hàm tham chiếu nowchức năng của bảng tính khác.
  3. Đi vào cài đặt bảng tính của bạn và chọn tính toán lại mỗi phút.

Tôi đã thử rất nhiều đề xuất khác, bao gồm sử dụng =now()chức năng, thủ thuật URL hiện tại trong chuỗi này hoặc Tập lệnh ứng dụng để chèn văn bản ngẫu nhiên vào một khoảng thời gian đã đặt, nhưng không có gì bắt buộc phải nhập để cập nhật ngoại trừ chỉnh sửa thủ công trang nguồn.


Làm việc cho tôi vào tháng 12 năm 2018
MalcolmOcean

4

Tôi tìm thấy cách dễ nhất là đặt một iftuyên bố đơn giản xung quanh importrange.

B1 = Sheet ID
B2 = Sheet Name and Range
B3 = Now()
=if (B3> now()-1, IMPORTRANGE(B1,B2),)

Điều này hoạt động mọi lúc.


Tôi đã cố gắng thực hiện giải pháp của bạn nhưng tôi không rõ cách sử dụng B3. Bạn đang nói B3 = Bây giờ () sau đó=if (Now() > now()-1, IMPORTRANGE(B1,B2),)
Eugene van der Merwe

3

Cách giải quyết dấu thời gian dường như không hoạt động đối với tôi - có một lưu ý rõ ràng rằng việc sử dụng dấu thời gian và hàm rand không được phép.

Cách giải quyết rất khó khăn của tôi là xóa ô và sau đó nhấn ctrl + z. Nó buộc phải làm mới mỗi lần. Việc viết kịch bản này sẽ không quan trọng, hoặc trong các khoảng thời gian cụ thể để giữ cho dữ liệu luôn mới.


2

Tôi tìm thấy một cách hack đơn giản để mô phỏng cập nhật ô thủ công và khởi chạy các sửa đổi trong bảng tính bên ngoài.

  1. Tạo một chức năng tùy chỉnh như thế này:

    // Hack function used just to simulate a manual update
    function hack(value) {
      var list = []
      list.push(value);
      return list;
    }
    
  2. Sau đó, trên tờ của tôi, tôi gọi nó theo cách này:

    =arrayformula(hack(tab!B1))
    

    đâu tab!B1là một trong những ô tôi sửa đổi bằng mã.


Làm thế nào để điều này mô phỏng một bản cập nhật tế bào thủ công?
xuất hiện

2

HOẶC ... bạn có thể thực hiện một tập lệnh đơn giản, đầu tiên đưa ra giá trị cero (0) sau đó đưa công thức trở lại và điều này thực hiện thủ thuật:

  var cell = sheet.getRange("B1:B1"); //SHEET TO INSERT VALUE
  cell.setFormula("=0");
   Utilities.sleep(2000); //JUST TO GIVE TIME TO UPDATE (OPTIONAL)
  var cell = sheet.getRange("B1:B1");
  cell.setFormula("=ImportRange(\"YOUR_SHEET_ID\",\"RANGE_TO_INSERT\")");  

thậm chí tốt hơn là cell.setFormula ("=" & cell.getValue ());, vì vậy người dùng không thấy số 0 trong 2 giây ....
Tony BenBrahim

1

Tôi đã có thể tìm cách giải quyết vấn đề của mình (chi tiết tại đây ) bằng cách sử dụng Tập lệnh ứng dụng với chức năng tùy chỉnh.

Nếu bạn thay thế =IMPORTRANGE(spreadsheet_url, range_string)trong bảng tính của mình bằng =DynamicImportRange(spreadsheet_url, sheet_name, range)và dán mã bên dưới vào Công cụ -> Trình chỉnh sửa tập lệnh -> Dự án trống, nó sẽ hoạt động (xem phần này để biết thêm thông tin về cách viết tập lệnh ứng dụng).

/**
Usage: =DynamicImportRange(spreadsheet_url, sheet_name, range)
Compare to: =IMPORTRANGE(spreadsheet_url, range_string)

Where the given arguments are placeholders that should be replaced
by arguments specific to your use-case.
 */
function DynamicImportRange(sheet_url, sheet_name, sheet_range) {
  var values = SpreadsheetApp.openByUrl(sheet_url).getSheetByName(sheet_name).getRange(sheet_range).getValues();
  return values
};

/**
*/
function RefreshSheet() {
  // Update the following two variables to suit your particular situation
  var sheet_name = "sample_sheet_sheet"
  var range = "A1"

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheet_name);
  var formula1 = "Loading...";
  var formula2 = sheet.getRange(range).getFormula().toString().replace('"', '\"');
  // The following assumes that the data is being inserted into the sheet in the same
  // location as it is in in the source sheet.
  var form_range = formula2.split(",")[2].split("\"")[1];
  sheet.getRange(form_range).clear();
  sheet.getRange(range).setValue(formula1);
  Utilities.sleep(245);
  sheet.getRange(range).setValue(formula2);
};

Nếu bạn muốn trang tính được cập nhật thường xuyên, bạn có thể thiết lập trình kích hoạt bằng cách đi tới Tài nguyên -> Trình kích hoạt của dự án hiện tại trong cửa sổ Ứng dụng tập lệnh.


4
CHO TẤT CẢ GOOGLERS KẾT THÚC TẠI ĐÂY : các chức năng tùy chỉnh bảng tính không thể mở (nữa) các bảng tính khác bằng cách sử dụng SpreadsheetApp.openById()hoặc SpreadsheetApp.openByUrl(). Kiểm tra ở đâyở đây
Francesco Vadicamo

1

Như một giải pháp thay thế cho now()khoanh vùng, bạn có thể thay đổi cài đặt của bảng tính để cập nhật mỗi giờ.

Tệp -> Cài đặt bảng tính -> Tính toán

Cập nhật trang tính để tự tính toán lại về " Thay đổi và mỗi giờ " hoặc "Thay đổi và mỗi phút". Mặc dù hãy ghi nhớ, việc chọn tính toán lại mỗi phút có thể làm treo bảng tính.


0

Bạn có thể sử dụng Google Trang add-on Sheetgo để tự động cập nhật các bạn tham khảo từ bảng khác. Bạn có thể sử dụng 30 bản cập nhật miễn phí mỗi tháng hoặc có được một thuê bao trả phí để có thêm các bản cập nhật. Video này sẽ giải thích cho bạn cách sử dụng cơ bản.


2
Xin lưu ý rằng mặc dù được thông báo một cách khéo léo trên trang web " Cài đặt miễn phí ", đây là một tiện ích bổ sung với một gói miễn phí giới hạn theo sau là 3 gói trả phí . Liên kết đến trang Giá chỉ được tìm thấy ở dưới cùng của trang web.
marikamitsos
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.