이 페이지에서는 Google Ads 스크립트로 개발하기 위한 다양한 권장사항을 다룹니다.
선택기
Selector로 필터링
가능하면 필터를 사용하여 필요한 항목만 요청합니다. 적용 중 적절한 필터의 이점은 다음과 같습니다.
- 코드가 훨씬 간단하고 쉬워 이해하기 쉽습니다.
- 스크립트가 훨씬 빠르게 실행됩니다.
다음 코드 스니펫을 비교해 보세요.
코딩 접근 방식 | 코드 스니펫 |
---|---|
선택기를 사용하여 필터링(권장) |
var keywords = AdsApp.keywords() .withCondition('Clicks > 10') .forDateRange('LAST_MONTH') .get(); while (keywords.hasNext()) { var keyword = keywords.next(); // Do work here. } |
코드에서 필터링 (권장되지 않음) |
var keywords = AdsApp.keywords().get(); while (keywords.hasNext()) { var keyword = keywords.next(); var stats = keyword.getStatsFor( 'LAST_MONTH'); if (stats.getClicks() > 10) { // Do work here. } } |
두 번째 접근 방식은 목록을 가져오려고 하므로 권장되지 않습니다. 목록에 필터가 적용됩니다.
캠페인 계층구조의 탐색 방지
특정 수준에서 항목을 검색하려면 전체 캠페인 계층 구조를 탐색하는 대신 해당 수준에서 수집 메서드를 사용하세요. 이렇게 하면 더 간단해질 뿐만 아니라 성능도 훨씬 향상됩니다. 시스템에서 모든 캠페인과 광고 그룹을 불필요하게 읽지 않아도 되기 때문입니다.
계정의 모든 광고를 검색하는 다음 코드 스니펫을 비교해 보세요.
코딩 방식 | 코드 스니펫 |
---|---|
적절한 수집 방법 사용 (권장) |
var ads = AdsApp.ads(); |
계층 구조 전환 (권장되지 않음) |
var campaigns = AdsApp.campaigns().get(); while (campaigns.hasNext()) { var adGroups = campaigns.next(). adGroups().get(); while (adGroups.hasNext()) { var ads = adGroups.next().ads().get(); // Do your work here. } } |
두 번째 접근 방식은 광고만 필요한 반면 객체의 전체 계층 구조(캠페인, 광고 그룹)를 가져오려고 시도하므로 권장하지 않습니다.
특정 상위 접근자 메서드 사용
가져온 객체의 상위 항목을 가져와야 하는 경우가 있습니다. 이 경우 전체 계층 구조를 가져오는 대신 제공된 접근자 메서드를 사용해야 합니다.
지난달 클릭수가 50회를 초과하는 텍스트 광고가 있는 광고 그룹을 검색하는 다음 코드 스니펫을 비교해 보세요.
코딩 방식 | 코드 스니펫 |
---|---|
적절한 상위 액세서리 메서드 사용(권장) |
var ads = AdsApp.ads() .withCondition('Clicks > 50') .forDateRange('LAST_MONTH') .get(); while (ads.hasNext()) { var ad = ads.next(); var adGroup = ad.getAdGroup(); var campaign = ad.getCampaign(); // Store (campaign, adGroup) to an array. } |
계층 구조 전환 (권장되지 않음) |
var campaigns = AdsApp.campaigns().get(); while (campaigns.hasNext()) { var adGroups = campaigns.next() .adGroups() .get(); while (adGroups.hasNext()) { var ads = adGroups.ads() .withCondition('Clicks > 50') .forDateRange('LAST_MONTH') .get(); if (ads.totalNumEntities() > 0) { // Store (campaign, adGroup) to an array. } } } |
두 번째 접근 방식은 계정의 전체 캠페인 및 광고 그룹 계층 구조를 가져오므로 권장하지 않습니다. 광고 세트와 연결된 캠페인 및 광고 그룹의 하위 집합만 있으면 됩니다. 첫 번째 접근 방식은 관련성 있는 광고 모음만 가져오도록 제한하고 적절한 메서드를 사용하여 상위 객체에 액세스합니다.
특정 상위 필터 사용하기
특정 캠페인 또는 광고 그룹 내 항목에 액세스하려면 계층 구조를 가져와서 탐색하는 대신 선택기에 특정 필터를 사용하세요.
텍스트 광고 목록을 가져오는 다음 코드 스니펫을 비교합니다. 마지막으로 클릭수가 50회를 초과하는 특정 캠페인 및 광고그룹 내 월
코딩 방식 | 코드 스니펫 |
---|---|
적절한 상위 수준 필터 사용(권장) |
var ads = AdsApp.ads() .withCondition('CampaignName = "Campaign 1"') .withCondition('AdGroupName = "AdGroup 1"') .withCondition('Clicks > 50') .forDateRange('LAST_MONTH') .get(); while (ads.hasNext()) { var ad = ads.next(); var adGroup = ad.getAdGroup(); var campaign = ad.getCampaign(); // Store (campaign, adGroup, ad) to // an array. } |
계층 구조 탐색(권장되지 않음) |
var campaigns = AdsApp.campaigns() .withCondition('Name = "Campaign 1"') .get(); while (campaigns.hasNext()) { var adGroups = campaigns.next() .adGroups() .withCondition('Name = "AdGroup 1"') .get(); while (adGroups.hasNext()) { var ads = adGroups.ads() .withCondition('Clicks > 50') .forDateRange('LAST_MONTH') .get(); while (ads.hasNext()) { var ad = ads.next(); // Store (campaign, adGroup, ad) to // an array. } } } |
두 번째 접근 방식은 계정의 캠페인 및 광고그룹 계층 구조를 반복하므로 권장하지 않습니다. 선택한 광고 세트와 상위 캠페인 및 광고그룹만 있으면 됩니다. 첫 번째 접근 방식은 상위 항목에 특정 필터를 적용하여 광고 목록에 반복 적용 선택기에서 확인할 수 있습니다.
가능한 경우 ID를 사용하여 필터링하세요.
항목을 필터링할 때는 다른 필드 대신 ID로 항목을 필터링하는 것이 좋습니다.
캠페인을 선택하는 다음 코드 스니펫을 살펴보세요.
코딩 접근 방식 | 코드 스니펫 |
---|---|
ID로 필터링 (권장) |
var campaign = AdsApp.campaigns() .withIds([12345]) .get() .next(); |
이름으로 필터링(최적화되지 않음) |
var campaign = AdsApp.campaigns() .withCondition('Name="foo"') .get() .next(); |
두 번째 접근 방식은 ID가 아닌 필드로 필터링하므로 최적화되지 않습니다.
가능하면 부모 ID로 필터링
항목을 선택할 때 가능하면 상위 ID로 필터링합니다. 이렇게 하면 결과를 필터링할 때 서버에서 가져오는 항목 목록을 제한하여 쿼리 속도가 빨라집니다.
ID로 AdGroup을 가져오는 다음 코드 스니펫을 살펴보세요. 상위 캠페인 ID가 알려져 있다고 가정합니다.
코딩 방식 | 코드 스니펫 |
---|---|
캠페인 및 광고그룹 ID별로 필터링(권장) |
var adGroup = AdsApp.adGroups() .withIds([12345]) .withCondition('CampaignId="54678"') .get() .next(); |
광고 그룹 ID만으로 필터링(최적화되지 않음) |
var adGroup = AdsApp.adGroups() .withIds([12345]) .get() .next(); |
두 코드 스니펫 모두 동일한 결과를 제공하지만, 코드 스니펫 1에서 상위 ID (CampaignId="54678")
를 사용하여 추가 필터링을 수행하면 결과를 필터링할 때 서버에서 반복해야 하는 항목 목록을 제한하여 코드의 효율성을 높일 수 있습니다.
필터링 조건이 너무 많은 경우 라벨 사용
필터링 조건이 너무 많은 경우 처리하는 항목의 라벨을 만들고 이 라벨을 사용하여 항목을 필터링하는 것이 좋습니다.
이름별로 캠페인 목록을 가져오는 다음 코드 스니펫을 살펴보세요.
코딩 접근 방식 | 코드 스니펫 |
---|---|
라벨 사용하기 (권장) |
var label = AdsApp.labels() .withCondition('Name = "My Label"') .get() .next(); var campaigns = label.campaigns.get(); while (campaigns.hasNext()) { var campaign = campaigns.next(); // Do more work } |
복잡한 선택기 빌드 (권장되지 않음) |
var campaignNames = [‘foo’, ‘bar’, ‘baz’]; for (var i = 0; i < campaignNames.length; i++) { campaignNames[i] = '"' + campaignNames[i] + '"'; } var campaigns = AdsApp.campaigns .withCondition('CampaignName in [' + campaignNames.join(',') + ']') .get(); while (campaigns.hasNext()) { var campaign = campaigns.next(); // Do more work. } |
두 코드 스니펫 모두 비슷한 수준의 성능을 제공하지만 두 번째 접근 방식은 선택기의 조건 수가 늘어남에 따라 더 복잡한 코드를 생성하는 경향이 있습니다. 또한 새 항목에 라벨을 더 쉽게 적용할 수 있습니다. 새 엔티티를 포함하도록 스크립트를 편집하는 것보다 더 쉽습니다.
IN 절의 조건 수 제한
스크립트를 실행할 때 일반적인 사용 사례는 항목 목록에 관한 보고서를 실행하는 것입니다. 개발자는 일반적으로 다음과 같이 매우 긴 IN 절을 사용하여 항목 ID를 필터링하는 AWQL 쿼리입니다. 이 접근 방식은 항목 수가 제한된 경우에 적합합니다. 그러나 의 두 가지로 인해 스크립트 성능이 악화됩니다 이유:
- 쿼리가 길수록 파싱하는 데 시간이 더 오래 걸립니다.
- IN 절에 추가하는 각 ID는 평가할 추가 조건이며, 시간이 더 걸립니다
이러한 조건에서는 항목에 라벨을 적용한 다음 LabelId
로 필터링하는 것이 좋습니다.
코딩 접근 방식 | 코드 스니펫 |
---|---|
라벨 적용 및 labelID로 필터링 (권장) |
// The label applied to the entity is "Report Entities" var label = AdsApp.labels() .withCondition('LabelName contains "Report Entities"') .get() .next(); var report = AdsApp.report('SELECT AdGroupId, Id, Clicks, ' + 'Impressions, Cost FROM KEYWORDS_PERFORMANCE_REPORT ' + 'WHERE LabelId = "' + label.getId() + '"'); |
IN 절을 사용하여 긴 쿼리 빌드 (권장되지 않음) |
var report = AdsApp.report('SELECT AdGroupId, Id, Clicks, ' + 'Impressions, Cost FROM KEYWORDS_PERFORMANCE_REPORT WHERE ' + 'AdGroupId IN (123, 456) and Id in (123,345, 456…)'); |
계정 업데이트
일괄 변경 수행
Google Ads 항목을 변경할 때 Google Ads 스크립트는 즉시 변경할 수 있습니다 대신 여러 변경사항을 배치로 결합하여 여러 변경사항을 실행하는 단일 요청을 실행할 수 있도록 합니다. 이 접근 방식을 사용하면 스크립트가 더 빠르게 실행되고 Google Ads 서버의 부하가 줄어듭니다. 그러나 Google Ads 스크립트가 일괄 작업을 자주 플러시하여 스크립트가 실행되도록 함 천천히 하세요.
키워드 목록의 입찰가를 업데이트하는 다음 스크립트를 살펴보겠습니다.
코딩 방식 | 코드 스니펫 |
---|---|
업데이트된 요소 추적(권장) |
var keywords = AdsApp.keywords() .withCondition('Clicks > 50') .withCondition('CampaignName = "Campaign 1"') .withCondition('AdGroupName = "AdGroup 1"') .forDateRange('LAST_MONTH') .get(); var list = []; while (keywords.hasNext()) { var keyword = keywords.next(); keyword.bidding().setCpc(1.5); list.push(keyword); } for (var i = 0; i < list.length; i++) { var keyword = list[i]; Logger.log('%s, %s', keyword.getText(), keyword.bidding().getCpc()); } |
타이트 루프에서 업데이트된 요소 가져오기 (권장하지 않음) |
var keywords = AdsApp.keywords() .withCondition('Clicks > 50') .withCondition('CampaignName = "Campaign 1"') .withCondition('AdGroupName = "AdGroup 1"') .forDateRange('LAST_MONTH') .get(); while (keywords.hasNext()) { var keyword = keywords.next(); keyword.bidding().setCpc(1.5); Logger.log('%s, %s', keyword.getText(), keyword.bidding().getCpc()); } |
keyword.bidding().getCpc()
호출은 Google Ads 스크립트가 setCpc()
작업을 플러시하고 한 번에 하나의 작업만 실행하도록 강제하므로 두 번째 접근 방식은 권장되지 않습니다. 첫 번째 접근 방식은 두 번째 접근 방식과 유사하지만 getCpc()
호출이 setCpc()
가 호출되는 루프와 별도의 루프에서 실행되므로 일괄 처리를 지원하는 추가 이점이 있습니다.
가능한 경우 빌더 사용
Google Ads 스크립트는 새 객체를 만드는 두 가지 방법인 생성자와 생성 메서드를 지원합니다. 빌더는 생성 방법보다 더 유연합니다. API 호출에서 생성된 객체에 대한 액세스 권한
다음 코드 스니펫을 살펴보세요.
코딩 접근 방식 | 코드 스니펫 |
---|---|
빌더 사용(권장) |
var operation = adGroup.newKeywordBuilder() .withText('shoes') .build(); var keyword = operation.getResult(); |
생성 방법 사용 (권장하지 않음) |
adGroup.createKeyword('shoes'); var keyword = adGroup.keywords() .withCondition('KeywordText="shoes"') .get() .next(); |
두 번째 접근 방식은 키워드 검색과 관련된 추가 선택 작업으로 인해 권장되지 않습니다. 또한 생성 방법도 지원 중단되었습니다.
그러나 빌더를 잘못 사용하면 Google Ads 스크립트가 작업을 일괄 처리하지 못할 수 있습니다.
키워드 목록을 만들고 새로 만든 키워드의 ID를 출력하는 다음 코드 스니펫을 살펴보세요.
코딩 방식 | 코드 스니펫 |
---|---|
업데이트된 요소 추적(권장) |
var keywords = [‘foo’, ‘bar’, ‘baz’]; var list = []; for (var i = 0; i < keywords.length; i++) { var operation = adGroup.newKeywordBuilder() .withText(keywords[i]) .build(); list.push(operation); } for (var i = 0; i < list.length; i++) { var operation = list[i]; var result = operation.getResult(); Logger.log('%s %s', result.getId(), result.getText()); } |
타이트 루프에서 업데이트된 요소 가져오기 (권장하지 않음) |
var keywords = [‘foo’, ‘bar’, ‘baz’]; for (var i = 0; i < keywords.length; i++) { var operation = adGroup.newKeywordBuilder() .withText(keywords[i]) .build(); var result = operation.getResult(); Logger.log('%s %s', result.getId(), result.getText()); } |
두 번째 접근 방식은 operation.getResult()
를 호출하므로 선호되지 않습니다.
작업을 생성한 동일한 루프 내에서 실행하므로 Google Ads 스크립트를 강제로 실행할 수 있음
한 번에 하나의 작업을 실행할 수 있습니다. 첫 번째 접근 방식은 비슷하지만 생성된 위치와 다른 루프에서 operation.getResult()를 호출하므로 일괄 처리가 가능합니다.
대규모 업데이트의 경우 일괄 업로드를 사용하는 것이 좋습니다.
개발자가 수행하는 일반적인 작업은 보고서를 실행하고 현재 실적 값을 기반으로 항목 속성(예: 키워드 입찰가)을 업데이트하는 것입니다. 날짜
많은 수의 항목을 업데이트해야 하는데, 일괄 업로드는
성능을 향상할 수 있습니다. 예를 들어
지난달 TopImpressionPercentage > 0.4
에 해당하는 키워드의 MaxCpc:
코딩 접근 방식 | 코드 스니펫 |
---|---|
일괄 업로드 사용(권장) |
var report = AdsApp.report( 'SELECT AdGroupId, Id, CpcBid FROM KEYWORDS_PERFORMANCE_REPORT ' + 'WHERE TopImpressionPercentage > 0.4 DURING LAST_MONTH'); var upload = AdsApp.bulkUploads().newCsvUpload([ report.getColumnHeader('AdGroupId').getBulkUploadColumnName(), report.getColumnHeader('Id').getBulkUploadColumnName(), report.getColumnHeader('CpcBid').getBulkUploadColumnName()]); upload.forCampaignManagement(); var reportRows = report.rows(); while (reportRows.hasNext()) { var row = reportRows.next(); row['CpcBid'] = row['CpcBid'] + 0.02; upload.append(row.formatForUpload()); } upload.apply(); |
ID별로 키워드 선택 및 업데이트(최적화도가 낮음) |
var reportRows = AdsApp.report('SELECT AdGroupId, Id, CpcBid FROM ' + 'KEYWORDS_PERFORMANCE_REPORT WHERE TopImpressionPercentage > 0.4 ' + ' DURING LAST_MONTH') .rows(); var map = { }; while (reportRows.hasNext()) { var row = reportRows.next(); var adGroupId = row['AdGroupId']; var id = row['Id']; if (map[adGroupId] == null) { map[adGroupId] = []; } map[adGroupId].push([adGroupId, id]); } for (var key in map) { var keywords = AdsApp.keywords() .withCondition('AdGroupId="' + key + '"') .withIds(map[key]) .get(); while (keywords.hasNext()) { var keyword = keywords.next(); keyword.bidding().setCpc(keyword.bidding().getCpc() + 0.02); } } |
두 번째 접근 방식은 꽤 뛰어난 성능을 제공하지만 첫 번째 접근 방식은 가 선호됩니다.
Google Ads 스크립트에는 가져올 수 있는 객체 수에 제한이 있습니다. 업데이트되고, 인스턴스의 선택 및 업데이트 작업은 두 번째 접근 방식이 해당 한도에 포함됩니다.
일괄 업로드의 경우 업데이트할 수 있는 항목 수와 전체 실행 시간 모두에 더 높은 한도가 적용됩니다.
캠페인별로 일괄 업로드 그룹화하기
일괄 업로드를 만들 때는 상위 그룹별로 작업을 그룹화해 보세요. 확인할 수 있습니다. 이렇게 하면 효율성이 높아지고 충돌 가능성이 줄어듭니다. 변경 / 동시 실행 오류
두 개의 일괄 업로드 작업이 동시에 실행되는 경우를 생각해 보세요. 하나는 광고 그룹의 광고를 일시중지하고, 다른 하나는 키워드 입찰가를 조정합니다. 비록 공격은 서로 관련이 없지만 작업이 동일한 광고 그룹 (또는 두 개의 서로 다른 광고 그룹)에 있는 항목에 광고 그룹 제외)을 만들 수 있습니다. 이 경우 시스템에서 상위 항목(공유 광고 그룹 또는 캠페인)을 잠그므로 일괄 업로드 작업이 서로 차단됩니다.
Google Ads 스크립트는 단일 일괄 업로드 작업 내에서 실행을 최적화할 수 있으므로, 가장 간단한 방법은 다음 위치에서 계정당 하나의 일괄 업로드 작업만 실행하는 것입니다. 할 수 있습니다. 계정당 둘 이상의 일괄 업로드를 실행하려는 경우 상호 배타적인 캠페인 목록에서 일괄 업로드가 작동하는지 확인 (및 그 하위 항목)을 사용하여 성능을 최적화할 수 있습니다.
보고
보고서를 사용하여 통계 가져오기
많은 양의 항목과 해당 통계를 검색하려는 경우 표준 AdsApp 메서드보다 보고서를 사용하는 것이 더 좋습니다. 다음과 같은 이유로 보고서를 사용하는 것이 좋습니다.
- 보고서는 대규모 검색어에 더 나은 성능을 제공합니다.
- 보고서는 일반 가져오기 할당량에 도달하지 않습니다.
클릭수, 노출수, 클릭수, 측정항목을 가져오는 다음 코드를 지난 달에 50회 이상의 클릭이 발생한 모든 키워드의 비용 및 텍스트:
코딩 접근 방식 | 코드 스니펫 |
---|---|
보고서 사용하기 (권장) |
report = AdsApp.search( 'SELECT ' + ' ad_group_criterion.keyword.text, ' + ' metrics.clicks, ' + ' metrics.cost_micros, ' + ' metrics.impressions ' + 'FROM ' + ' keyword_view ' + 'WHERE ' + ' segments.date DURING LAST_MONTH ' + ' AND metrics.clicks > 50'); while (report.hasNext()) { var row = report.next(); Logger.log('Keyword: %s Impressions: %s ' + 'Clicks: %s Cost: %s', row.adGroupCriterion.keyword.text, row.metrics.impressions, row.metrics.clicks, row.metrics.cost); } |
AdsApp 반복자 사용(권장하지 않음) |
var keywords = AdsApp.keywords() .withCondition('metrics.clicks > 50') .forDateRange('LAST_MONTH') .get(); while (keywords.hasNext()) { var keyword = keywords.next(); var stats = keyword.getStatsFor('LAST_MONTH'); Logger.log('Keyword: %s Impressions: %s ' + 'Clicks: %s Cost: %s', keyword.getText(), stats.getImpressions(), stats.getClicks(), stats.getCost()); } |
두 번째 접근 방식은 키워드에 대해 반복 실행되므로 선호되지 않습니다.
한 번에 한 항목씩 통계를 검색합니다. 이 영역에서 보고서가 더 빠르게
단일 호출로 모든 데이터를 가져와서
필요합니다. 또한 두 번째 접근 방식으로 검색된 키워드는 get()
호출을 사용하여 검색된 항목 수에 대한 스크립트의 할당량에 반영됩니다.
신고 대신 검색 사용
보고서 메서드는 이전 인프라용으로 빌드되었으며 GAQL을 사용하는 경우에도 결과를 플랫 형식으로 출력합니다. 즉, 쿼리 결과를 이전 스타일과 일치하도록 변환합니다. 이 스타일은 모든 필드에서 지원되며 각 호출에 오버헤드가 추가됩니다.
대신 검색을 사용하여 새 Google Ads API 보고의 모든 기능을 활용하는 것이 좋습니다.
AWQL보다 GAQL을 선호합니다.
AWQL은 보고서 쿼리 및 withCondition
호출에서 계속 지원되지만
완전한 호환성이 없는 변환 레이어를 통해 실행됩니다.
사용할 수 있습니다. 쿼리를 완전히 제어하려면
GAQL 사용하기
기존 AWQL 쿼리를 변환하려면 쿼리 이전 도구를 사용하세요.
필요 이상으로 행을 선택하지 않음
보고서 (및 선택자)의 실행 속도는 검색된 보고서의 총 개수에 보고서에서 반환되는 행 수는 포함됩니다. 방법을 반복합니다. 즉, 항상 특정 필터를 사용하여 사용 사례에 맞게 결과 집합을 최대한 줄여야 합니다.
예를 들어, 일부 확인할 수 있습니다 입찰용 쿼리를 하나씩 따로 만드는 것이 더 빠를 수 있음 더 낮은 기준액보다 낮은 입찰가를 설정하고 다른 하나는 상단 기준점보다 높은 입찰가에 대해 설정할 수 있는데, 모든 광고 그룹을 가져오고, 그렇지 않은 광고그룹은 무시하는 것이 좋습니다. 있습니다.
코딩 접근 방식 | 코드 스니펫 |
---|---|
검색어 2개 사용 (권장) |
var adGroups = [] var report = AdsApp.search( 'SELECT ad_group.name, ad_group.cpc_bid_micros' + ' FROM ad_group WHERE ad_group.cpc_bid_micros < 1000000'); while (report.hasNext()) { var row = report.next(); adGroups.push(row.adGroup); } var report = AdsApp.search( 'SELECT ad_group.name, ad_group.cpc_bid_micros' + ' FROM ad_group WHERE ad_group.cpc_bid_micros > 2000000'); while (report.hasNext()) { var row = report.next(); adGroups.push(row.adGroup); } |
일반 검색어에서 필터링 (권장하지 않음) |
var adGroups = [] var report = AdsApp.search( 'SELECT ad_group.name, ad_group.cpc_bid_micros' + ' FROM ad_group'); while (report.hasNext()) { var row = report.next(); var cpcBidMicros = row.adGroup.cpcBidMicros; if (cpcBidMicros < 1000000 || cpcBidMicros > 2000000) { adGroups.push(row.adGroup); } } |
광고 관리자 (MCC) 스크립트
직렬 실행보다 runInParallel을 선호합니다.
관리자 계정용 스크립트를 작성할 때는 가능하면 직렬 실행 대신 executeInParallel()
를 사용하세요. executeInParallel()
은(는) 더 많은 스크립트를 제공합니다
처리 시간 (최대 1시간), 처리된 계정당 최대 30분
(직렬 실행의 경우 총 30분이 아님) 자세한 내용은 한도 페이지를 참고하세요.
스프레드시트
스프레드시트를 업데이트할 때 일괄 작업 사용하기
스프레드시트를 업데이트할 때 일괄 작업 방법을 사용해 보세요.
(예: getRange()
)를 재정의해야 합니다.
스프레드시트에서 프랙탈 패턴을 생성하는 다음 코드 스니펫을 살펴보세요.
코딩 방식 | 코드 스니펫 |
---|---|
한 번의 호출로 셀 범위 업데이트 (권장) |
var colors = new Array(100); for (var y = 0; y < 100; y++) { xcoord = xmin; colors[y] = new Array(100); for (var x = 0; x < 100; x++) { colors[y][x] = getColor_(xcoord, ycoord); xcoord += xincrement; } ycoord -= yincrement; } sheet.getRange(1, 1, 100, 100).setBackgroundColors(colors); |
한 번에 하나의 셀 업데이트 (권장하지 않음) |
var cell = sheet.getRange('a1'); for (var y = 0; y < 100; y++) { xcoord = xmin; for (var x = 0; x < 100; x++) { var c = getColor_(xcoord, ycoord); cell.offset(y, x).setBackgroundColor(c); xcoord += xincrement; } ycoord -= yincrement; SpreadsheetApp.flush(); } |
Google 스프레드시트가 두 번째 코드 스니펫을 첫 번째 스니펫에 비해 여전히 낮은 실적을 보입니다. 수행 중인 API 호출 수에 맞게 조정됩니다.