답변:
오늘 (2016-05-20)부터 Google은 Google 스프레드 시트의 차트를 Google 문서에 포함하는 기능을 출시하기 시작했습니다. 현재 내 3 개의 Google 계정 중 2 개가 Insert
메뉴 에서 옵션을 사용할 수 있으며 항목 Insert→Chart
아래에 새 하위 메뉴가 있습니다 Insert→Drawing…
.
이러한 차트를 삽입하면 원래 스프레드 시트에 연결된 상태로 유지됩니다. 원하는 것이 테이블 형식 데이터 인 경우 데이터를 간단한 테이블로 표시하는 데 사용할 수있는 테이블 차트 유형이 있습니다.
이 단계에는 몇 가지 제한 사항이 있으며 (예 : 차트 크기) 차트를 삽입하기 전에 스프레드 시트에 차트가 있어야하지만 올바른 방향으로 가고 있습니다.
스프레드 시트 또는 표를 삽입하려면 스프레드 시트에서 문서로 복사하여 붙여 넣어 Google 스프레드 시트에서 표 추가를 사용 하고 연결된 옵션을 선택합니다.
문서가 열려있는 동안 소스 스프레드 시트를 수정하면 차트가 실시간으로 업데이트 되지 않지만 문서는 변경 사항을 감지 하고 포함 된 스프레드 시트 위에 업데이트 단추를 제공 하여 소스의 최신 변경 사항을 반영합니다.
AFAIK의 경우 스프레드 시트에서 텍스트 문서로만 복사하여 붙여 넣을 수 있습니다. 스프레드 시트는 표로 삽입되었지만 연결되어 있지 않습니다. 스프레드 시트에서 무언가를 변경하면 텍스트 문서에 반영되지 않습니다.
물론, 나는 틀린 것으로 판명되고 싶습니다!
다음은 주어진 스프레드 시트 내에서 주어진 범위의 내용으로 테이블을 삽입 할 수있는 스크립트 기반 솔루션입니다. 데이터를 실시간으로 동기화하는 방법을 찾지 못했습니다. 잠재적으로 많은 양의 데이터가 스프레드 시트로 편집 될 때마다 전송되어야하는 데이터가 많기 때문에 실용적이지 않은 것 같습니다. 대신, 스크립트는 사용자 정의 메뉴 항목 "업데이트 데이터"를 문서에 추가합니다.
스크립트는 문서에 바인딩되어야합니다 (예 : 문서 메뉴에서 도구> 스크립트 편집기를 사용하여 생성). 스프레드 시트 URL과 사용할 시트 및 범위는 스크립트 내에 지정됩니다. 시트의 모든 데이터를 포함하려면, 대신 .getRange(rangeName)
에 .getDataRange()
.
updateData 함수가 처음 실행될 때 문서 끝에 테이블을 추가합니다. 이후 실행시 테이블이 제자리에 업데이트됩니다 (즉, 테이블 뒤에 더 많은 텍스트가 추가되면 순서가 유지됨).
붙여 넣은 복사본이 새 개체이므로 테이블을 잘라 붙여 넣으면 업데이트 프로세스가 중단됩니다 (스크립트가 끝에 새 테이블을 추가 함). 대신, 테이블 주위에 텍스트를 잘라 붙여 넣기하십시오.
function onOpen() {
DocumentApp.getUi()
.createMenu('Custom')
.addItem('Update Data', 'updateData')
.addToUi();
}
function updateData() {
var ssUrl = ' spreadsheet url here ';
var sheetName = 'Sheet2'; // name of sheet to use
var rangeName = 'A1:C3'; // range of values to include
var values = SpreadsheetApp.openByUrl(ssUrl)
.getSheetByName(sheetName)
.getRange(rangeName)
.getValues();
var doc = DocumentApp.getActiveDocument();
var body = doc.getBody();
var ranges = doc.getNamedRanges('embeddedSheet-range');
if (ranges.length == 0) {
var table = body.appendTable(values);
}
else {
tableRange = ranges[0];
table = tableRange.getRange().getRangeElements()[0].getElement();
var ind = body.getChildIndex(table);
tableRange.remove();
body.removeChild(table);
table = body.insertTable(ind, values);
}
var rangeBuilder = doc.newRange();
rangeBuilder.addElement(table);
doc.addNamedRange('embeddedSheet-range', rangeBuilder.build());
}
수동과 더불어 매시간마다 데이터를 동기화 할 수도 있습니다. 스크립트 편집기의 리소스 메뉴에서 시간 기반 트리거를 추가하여 updateData 함수를 실행하십시오.
대신이 스크립트를 소스 스프레드 시트에 바인딩하도록 조정할 수도 있습니다. 이를 위해서는 문서를 여는 방법 (예 : URL)을 변경해야하지만 논리는 동일합니다.
스크립트의 성가신 부분은 문서에서 기존 테이블의 핸들을 얻는 것입니다. 이를 위해서는 명명 된 범위 내에 배치해야합니다. 또한 기존 테이블의 항목을 망쳐 놓는 것보다 테이블 요소를 완전히 바꾸는 것이 훨씬 편리합니다. 명명 된 범위는 변경할 수 없으므로 포함 된 테이블과 함께 제거 된 다음 새 테이블과 함께 다시 생성됩니다.
/edit#gid=0
끝에 있는 내용을 포함한 전체 URL이 포함되어 있어야합니다 .