Почему метод setValue не выводит так же, как Browser.msgBox? - PullRequest
1 голос
/ 28 апреля 2019

Так как я не мог заставить .toFixed (2) работать, я разработал свой собственный кусок кода, чтобы добавить желаемые десятичные цифры после "." простым соединением двух строк со знаком +.

Пока Browser.msgBox выводит 2 строки, правильно соединенные как «1,00», похоже, что getRange.setValue выводит только первую из 2 строк как «1»: (

function myFunction() {
var ss_calc = SpreadsheetApp.openById("1cFt0DbnpWGHquKk4ijxdKhwkaF8GhumWDWjTpHuSXbQ");
var sheet_calc = ss_calc.getSheetByName("Calcs");      
var ss_source = SpreadsheetApp.openById("1gXeXmiw9EnzQXaiE7H8_zrilE2zyotlSuuIS8X9IxfQ");
var sheet_source = ss_source.getSheetByName("Farmah");  

var decDig = ""; var strDec = ""; var impVal = "";
impVal = sheet_source.getRange(12,7).getValue().toString();
if (JSON.stringify(impVal).indexOf(".")>-1) 
 { if (JSON.stringify(impVal).split(".")[1].length < 2 ) 
  { 
   if (JSON.stringify(impVal).split(".")[1].length < 1) 
    { 
     decDig = "00"; 
    }
   else 
    { 
     decDig = "0"; 
    }
   }
  } 
else 
{ 
 decDig = ".00"; 
}
var strDec = impVal.toString() + decDig.toString();
Browser.msgBox(JSON.stringify(impVal).indexOf(".")+ "\\n" +
           impVal.toString()+ "\\n" +
           decDig+ "\\n" +
           strDec);
sheet_calc.getRange(1,1).setValue(strDec);
}  

Из sheet_calc.getRange (1,1) .setValue (strDec); Я ожидаю получить вывод «1,00», но получаю только «1»: (

Что мне не хватает?

Вот ссылки на таблицы Google (любой, у кого есть ссылка, может редактировать:)

(приведенный выше код должен запускаться вручную редактором сценариев в первой электронной таблице здесь):

https://docs.google.com/spreadsheets/d/1cFt0DbnpWGHquKk4ijxdKhwkaF8GhumWDWjTpHuSXbQ/edit?usp=sharing

https://docs.google.com/spreadsheets/d/1gXeXmiw9EnzQXaiE7H8_zrilE2zyotlSuuIS8X9IxfQ/edit?usp=sharing

Ответы [ 2 ]

1 голос
/ 29 апреля 2019

От sheet_calc.getRange(1,1).setValue(strDec); Я ожидаю получить вывод "1.00", но получаю только "1": (*

В Google Sheets, как и в других приложениях для работы с электронными таблицами, есть автоматическийприсвоение типа данных, поэтому вещи, которые выглядят как числа, преобразуются в тип данных чисел Google Sheets и т. д.

Вы можете добавить ', чтобы заставить значение рассматриваться как текст, или вы можете установить формат чиселтаким образом, что числа отображаются с двумя десятичными знаками. Форматирование ячеек может быть применено заранее, т. е. с помощью команд пользовательского интерфейса Google Sheets, или вы можете использовать Apps Script, чтобы установить формат для вас.

1 голос
/ 28 апреля 2019
  • Вы хотите поместить значение 1.00 в ячейку "A1".

Если мое понимание верно, как насчет этой модификации?Я думаю, что причина вашей проблемы заключается в том, что значение путем добавления setValue() конвертируется в число.Этим показывается 1.Для того, чтобы поставить значение 1.00, я думаю, что есть 3 шаблона.Пожалуйста, выберите один из них для вашей ситуации.

Шаблон 1:

В этом шаблоне из вашего вопроса значение подставляется в виде строки, используя setNumberFormat("@").

From:

sheet_calc.getRange(1,1).setValue(strDec);

To:

sheet_calc.getRange(1,1).setNumberFormat("@").setValue(strDec);

Pattern 2:

В этом шаблоне, из вашего вопроса, формат ячейки задается с помощью setNumberFormat("0.00").

From:

sheet_calc.getRange(1,1).setValue(strDec);

To:

sheet_calc.getRange(1,1).setNumberFormat("0.00").setValue(strDec);

Pattern 3:

В этом шаблоне из сценария вашей общей электронной таблицы, когдаdecDig равно ".00", формат установлен.

От:

sheet_calc.getRange(x+6,c).setValue(strDec);

До:

var range = sheet_calc.getRange(x+6,c);
if (decDig) {
  range.setNumberFormat("0.00").setValue(strDec); // or setNumberFormat("@")
} else {
  range.setValue(strDec);
}

Ссылка:

Если я неправильно понял ваш вопрос и это не тот результат, который вам нужен, я приношу свои извинения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...