2014-10-04 1 views
0

У меня есть формула на листе A, использующая новые листы google, которые отлично работают; он содержит функцию запроса, которая фильтрует даты на основе значений в листе B («Настройки») и данных на листе C («Данные»). Рабочая формула:Исправить ошибку из использования .setValue или .SetFormula для установки формулы, содержащей функцию запроса, которая имеет несколько одиночных и двойных кавычек.

=QUERY(Data!A1:G,"select G, sum(E) where F is not null AND toDate(D)>= date '" & text('Settings'!B5, "yyyy-MM-dd")&"' and toDate(D)<= date '" & text('Settings'!B6, "yyyy-MM-dd")&"'group by G pivot B label G'Pivot table for data in range'") 

Проблема заключается в том, что я хотел бы установить эту формулу со скриптом, используя методы диапазона .setFormula или .setValue, но у меня возникают проблемы с формулой строки.

Эти методы будут принимать одинарные или двойные кавычки, обернутые вокруг формулы/значения. Итак, если вы используете одинарные кавычки для упаковки своей формулы, вы можете избежать большинства проблем с двойными кавычками в ваших формулах. Кроме того, вы можете строить строками запроса, такие как

formula = 'part of formula'+'another part of formula'; 
range.setFormula(formula); 

Покушения решения было обернуть мою формулу в наборе командах с одинарными кавычками И всякий раз, когда он наткнулся на самопроизвольном закрытие одинарной кавычки, что случается в рабочей формуле , Я вставил перед этим преднамеренную закрывающую одинарную цитату с знаком +, как то, что здесь находится в скобках ('+). Со мной до сих пор? Надеюсь, я прояснился. Чтобы это изменение выглядело так. Во-первых, формула работает в листах:

=QUERY(Data!A1:G,"select G, sum(E) where F is not null AND toDate(D)>= date '" & text('Settings'!B5, "yyyy-MM-dd")&"' and toDate(D)<= date '" & text('Settings'!B6, "yyyy-MM-dd")&"'group by G pivot B label G'Pivot table for data in range'") 

Теперь, попытка установить в сценарии:

range.setFormula('=QUERY(Data!A1:G,"select G, sum(E) where F is not null AND toDate(D)>= date '+'" & text('+'Settings'+'!B5, "yyyy-MM-dd")&"'+' and toDate(D)<= date '+'" & text('+'Settings'+'!B6, "yyyy-MM-dd")&"'+'group by G pivot B label G'+'Pivot table for data in range'+'")'); 

Результат: формула написана и таблица показывает ошибка: ошибка синтаксического анализа формулы. Я уверен, что должен быть способ указать, когда мне нужна одна цитата как часть строки, а не рассматривать некоторые мои одиночные кавычки в качестве маркеров следующего запуска строки, если это имеет смысл. Помогите оценить, я опубликую, когда выясню это.

ответ

4

Слишком легко! вместо «+ просто использовать», чтобы избежать одиночных кавычек в моей формуле, так что ответ: range.setFormula ('= QUERY (Data! A1: G, «выберите G, sum (E), где F не является нулевым AND toDate (D)> = дата \ '"& текст (\' Настройки \ '! B5," yyyy-MM-dd ") &" \' и toDate (D) < = дата \ '"& текст (\' Настройки \ '! B6, "yyyy-MM-dd") & Группа "\" группой G. Сводная метка B G \ 'сводная таблица для данных в диапазоне \' ") \ ');