Google 스프레드 시트에서 다른 시트에 대한 참조를 자동 업데이트하도록하려면 어떻게해야합니까?


19

외부 애플리케이션을 사용하여 Google 스프레드 시트에 데이터를 입력하고 있습니다. 그런 다음이 통합 문서는 IMPORTRANGE(spreadsheet_key, range_string)데이터를 조작하고 해석 하는 별도의 통합 문서 ( 함수 포함)에서 참조합니다. 내 문제는 참조 된 통합 문서를 개인적으로 수정할 때마다 참조 통합 문서가 정상적으로 업데이트되지만 외부 응용 프로그램이 수정할 때마다 업데이트되지 않는다는 것입니다.

"스프레드 시트 설정"을 편집하여 매분 및 모든 변경에 대해 재 계산이 수행되도록했습니다. 또한 매시간마다 페이지를 자동 새로 고치는 확장 프로그램을 Chrome에 설치했습니다. 그러나 참조 통합 문서에서 데이터를 다시 가져 오지 않습니다. 수식을 새 셀에 복사하더라도 데이터는 여전히 다시 가져 오지 않습니다.

Google 스프레드 시트에서 데이터를 다시 가져 오도록 트리거하는 참조 통합 문서에 대해 수행 할 수있는 작업이 있습니까?

편집 : 분명히하기 위해 현재 외부 응용 프로그램에서 입력 한 데이터가있는 통합 문서 하나 ( "소스 시트"라고 함)와 IMPORTRANGE함수가있는 다른 통합 문서가 있습니다 ( "참조 시트"라고 함). IMPORTRANGE"참조 시트" 의 기능으로 표시되는 데이터에는 "소스 시트"를 마지막으로 편집 한 이후 외부 응용 프로그램에서 입력 한 데이터가 포함되지 않습니다. 또한 두 통합 문서 모두 새로운 Google 스프레드 시트를 사용하고 있습니다.

편집 : 또한이 질문은 Google 스프레드 시트의 셀을 다른 문서의 셀에 연결하는 방법 과 동일하지 않습니다 . 스프레드 시트에서 데이터를 가져 오기 위해 해당 질문에 대한 솔루션으로 제공된 기능을 사용하고 있기 때문입니다. 문제는 데이터를 가져 오는 방법이 아니라 데이터의 소스를 업데이트하는 방법입니다. 내 가정은 Google이이 문제를 해결했을 것이지만 "참조 시트"의 데이터는 업데이트되지 않으며 업데이트 할 수있는 유일한 방법은 실제로 "소스 시트"로 이동하는 것입니다. "직접 편집하십시오.


작동 방식에 대한 자세한 내용은 알지 못하지만
tlewis3348

@pnuts "올바른 버전이 소스로 사용된다"는 말의 의미를 설명 할 수 있습니까? 매 분마다 업데이트되도록 두 시트에 대한 설정이 있고 매 분마다 탭을 새로 고치도록 설정되어 있습니다. 소스를 어떻게, 어디서, 어느 시트에 업데이트합니까?
tlewis3348

@ pnuts 글쎄, 데이터가 정상적으로 표시됩니다 separate workbook. 모든 모습에서 방금 입력 한 것 같습니다.
tlewis3348

예, 새 Google 스프레드 시트입니다. 한 통합 문서에는 추가 된 데이터가 표시되고 다른 통합 문서에는 추가되지 않습니다. 명확히하기 위해 원래 질문에 이것을 추가 할 것입니다.
tlewis3348

답변:


14

나는 같은 문제로 어려움을 겪고있다. 대신 사용자 정의 함수를 작성, 나는에 다른 쿼리 문자열을 추가 spreadsheet_urlIMPORTRANGE페이지가 갱신 될 때마다, 구글은 새 스프레드 시트에서 데이터를 가져올 필요가 생각하는 희망. 매번 URL을 고유하게 만들기 위해 새 타임 스탬프를 추가하기 만하면됩니다. 그것은 뻔뻔한 해킹이지만 많은 시트에서 나에게 도움이되었습니다.

내 공식은 이전에 다음과 같았습니다.

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

이제는 다음과 같습니다.

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

최신 정보:

Google은 더 이상 now()내부를 허용하지 않으므로이 방법은 더 이상 작동하지 않습니다 importrange(). 아래 휴의 의견을 참조하십시오.


6
같은 일을하려고 할 때이 대답을 보았습니다. importrange () 호출에서 now (), rand () 및 randbetween ()을 사용할 수 없도록 Google에서 만든 것처럼 보입니다.
Hugh

스프레드 시트를 1 분마다 업데이트하도록 설정하면 수식도 새로 고쳐지고 새 데이터를 가져올 수 있습니까 (가능한 경우)?
Nikhil Sahu

5

다음은 이 Web Apps 답변의 Jimmy에서 온 입니다.

  1. 두 스프레드 시트 =now()에서 임의의 셀에 방정식을 삽입하십시오.Z1
  2. 두 스프레드 시트 에 다른 스프레드 시트 의 =importrange()기능을 참조 하는 기능을 삽입하십시오 now.
  3. 스프레드 시트 설정으로 이동하여 1 분마다 다시 계산하도록 선택하십시오.

=now()함수 사용, 이 스레드의 URL 트릭 또는 Apps 스크립트를 사용하여 설정된 간격으로 임의의 텍스트를 삽입 하는 것을 포함하여 다른 제안을 많이 시도 했지만 소스 시트를 수동으로 편집하지 않으면 importrange가 강제로 업데이트되지 않습니다.


년 12 월 2018 나를 위해 일한
MalcolmOcean

4

가장 쉬운 방법은에 간단한 if진술을하는 것 importrange입니다.

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

이것은 매번 작동합니다.


귀하의 솔루션을 구현하려고 시도했지만 B3을 사용하는 방법이 확실하지 않습니다. 당신은 B3 = Now ()라고 말하고 있습니다=if (Now() > now()-1, IMPORTRANGE(B1,B2),)
Eugene van der Merwe

3

날짜 스탬프 해결 방법은 나에게 적합하지 않습니다. 날짜 스탬프와 rand 함수를 사용할 수 없다는 명시 적 메모가 있습니다.

내 매우 해킹 된 해결책은 셀을 삭제 한 다음 ctrl + z를 누르는 것입니다. 매번 새로 고칩니다. 데이터를 새로 열거 나 특정 시간 간격으로 스크립트를 작성하는 것은 쉽지 않습니다.


2

수동 셀 업데이트를 시뮬레이션하고 외부 스프레드 시트에서 수정을 시작하는 간단한 해킹을 발견했습니다.

  1. 다음과 같은 사용자 정의 함수를 작성했습니다.

    // Hack function used just to simulate a manual update
    function hack(value) {
      var list = []
      list.push(value);
      return list;
    }
    
  2. 그런 다음 내 시트에서 다음과 같이 호출합니다.

    =arrayformula(hack(tab!B1))
    

    tab!B1코드로 수정 한 셀 중 하나는 어디에 있습니까 ?


수동 셀 업데이트를 어떻게 시뮬레이트합니까?
haemse

2

또는 ... 간단한 스크립트를 수행하여 먼저 cero (0) 값을 제공하고 수식을 다시 포함하면이 트릭을 수행 할 수 있습니다.

  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\")");  

cell.setFormula ( "="& cell.getValue ());가 더 좋을 것이므로 사용자에게는 2 초 동안 0이 표시되지 않습니다 ....
Tony BenBrahim

1

나는 (자세한 내 문제 해결하는 방법을 찾을 수 있었다 여기에 사용자 정의 기능을 가진 애플리케이션 스크립트를 사용하여).

당신이 교체하는 경우 =IMPORTRANGE(spreadsheet_url, range_string)와 스프레드 시트 =DynamicImportRange(spreadsheet_url, sheet_name, range)및 도구에 아래 코드를 붙여 -> 스크립트 편집기 -> 빈 프로젝트, 그것은 작동 (참조해야 응용 프로그램의 스크립트 작성에 대한 자세한 내용).

/**
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);
};

시트를 정기적으로 업데이트하려면 앱 스크립트 창에서 리소스-> 현재 프로젝트의 트리거로 이동하여 트리거를 설정할 수 있습니다.


4
여기에 대한 모든 Google 직원 END UP : 스프레드 시트 사용자 정의 함수가 열리지 (더 이상) 기타 스프레드 시트를 사용 할 수 있습니다 SpreadsheetApp.openById()또는 SpreadsheetApp.openByUrl(). 여기여기를
Francesco Vadicamo

1

now()로드 블록 의 해결 방법으로 스프레드 시트의 설정을 변경하여 1 시간마다 업데이트 할 수 있습니다.

파일-> 스프레드 시트 설정-> 계산

" 변경시 및 매 시간 "또는 "변경시 및 매 분" 에 다시 계산되도록 시트를 업데이트하십시오 . 1 분마다 재 계산을 선택하면 스프레드 시트가 중단 될 수 있습니다.


0

Google 스프레드 시트 추가 기능 Sheetgo 를 사용하여 다른 시트에서 참조를 자동으로 업데이트 할 수 있습니다. 한 달에 30 개의 업데이트를 무료로 사용하거나 더 많은 업데이트에 대한 유료 구독을 얻을 수 있습니다. 이 비디오 는 기본 사용법을 설명해야합니다.


2
" 무료로 설치 "사이트에 명시 적으로 언급되어 있지만 하나의 제한된 무료 요금제와 3 개의 유료 요금제가 추가 된 것입니다 . 가격 페이지에 대한 링크 는 사이트 맨 아래에만 있습니다.
marikamitsos
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.