Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Скрипт - Даты в формате "дд.мм.ггг" Гугл таблицы - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Excel и другие приложения » Google Docs » Скрипт - Даты в формате "дд.мм.ггг" Гугл таблицы (Формулы/Formulas)
Скрипт - Даты в формате "дд.мм.ггг" Гугл таблицы
evgenij_vl Дата: Четверг, 11.05.2017, 21:57 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Здравствуйте!

Есть скрипт, который сохраняет все вводимые значения в любой ячейке первого столбца - во второй столбец.

Вот здесь можно посмотреть:
https://docs.google.com/spreads....sharing

На данный момент даты сохраняет в формате Гугл.
Нужно, чтобы даты сохранял в формате "дд.мм.гггг"

Помогите, пожалуйста, с реализацией. Спасибо.

P.S. Для темы не придумал название получше.


Сообщение отредактировал evgenij_vl - Четверг, 11.05.2017, 21:59
 
Ответить
СообщениеЗдравствуйте!

Есть скрипт, который сохраняет все вводимые значения в любой ячейке первого столбца - во второй столбец.

Вот здесь можно посмотреть:
https://docs.google.com/spreads....sharing

На данный момент даты сохраняет в формате Гугл.
Нужно, чтобы даты сохранял в формате "дд.мм.гггг"

Помогите, пожалуйста, с реализацией. Спасибо.

P.S. Для темы не придумал название получше.

Автор - evgenij_vl
Дата добавления - 11.05.2017 в 21:57
Gustav Дата: Пятница, 12.05.2017, 02:03 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1472
Репутация: 559 ±
Замечаний: 0% ±

начинал с Excel 4.0...
Нужно, чтобы даты сохранял в формате "дд.мм.гггг"

Тоже интересовал этот вопрос. Работа с датами в GAS (JS) - та ещё "развлекуха"! Но, вроде, разобрался, во всяком случае, в первом приближении - "приблизился". Примерно так получается:
[vba]
Код
function onEdit(e) {
  
  var idCol = e.range.getColumn();
    
  if ( idCol == 1 ){
    updateHist(e.range);
  }
}
  
function updateHist(rngInput) {
    
  //var rngInput = SpreadsheetApp.getActive().getActiveCell();
  var valInput = rngInput.getValue();
    
  var rngHist  = rngInput.offset(0, 1);
  var valHist  = rngHist.getValue();
    
  if (isDate(valInput)) {
    valAddHist = Utilities.formatDate(valInput, "GMT+3", "dd.MM.yyyy HH:mm:ss");
  } else {
    valAddHist = valInput;
  }
    
  rngHist.setValue(valHist + " {" + valAddHist + "}");
}
  
// (c) 'https://productforums.google.com/forum/#!topic/docs/lZYtngHrpgU
function isDate(v) {
    
  if (Object.prototype.toString.call(v) === "[object Date]") {
    if (isNaN(v.getTime())) {
      return false;
    } else {
      return true;
    }
  } else {
    return false;
  }
}
[/vba]

НА ЗАМЕТКУ: Форум пока не дает нормально форматировать текст скрипта, пробельные отступы в начале строк съедаются. Чтобы восстановить отступы надо после копирования кода к себе в Редактор скриптов выделить там скопированный текст (или сразу весь текст редактора - по Ctrl+A) и нажать комбинацию SHIFT+TAB.


Мой tip box - яд 41001663842605

Сообщение отредактировал Gustav - Пятница, 12.05.2017, 02:19
 
Ответить
Сообщение
Нужно, чтобы даты сохранял в формате "дд.мм.гггг"

Тоже интересовал этот вопрос. Работа с датами в GAS (JS) - та ещё "развлекуха"! Но, вроде, разобрался, во всяком случае, в первом приближении - "приблизился". Примерно так получается:
[vba]
Код
function onEdit(e) {
  
  var idCol = e.range.getColumn();
    
  if ( idCol == 1 ){
    updateHist(e.range);
  }
}
  
function updateHist(rngInput) {
    
  //var rngInput = SpreadsheetApp.getActive().getActiveCell();
  var valInput = rngInput.getValue();
    
  var rngHist  = rngInput.offset(0, 1);
  var valHist  = rngHist.getValue();
    
  if (isDate(valInput)) {
    valAddHist = Utilities.formatDate(valInput, "GMT+3", "dd.MM.yyyy HH:mm:ss");
  } else {
    valAddHist = valInput;
  }
    
  rngHist.setValue(valHist + " {" + valAddHist + "}");
}
  
// (c) 'https://productforums.google.com/forum/#!topic/docs/lZYtngHrpgU
function isDate(v) {
    
  if (Object.prototype.toString.call(v) === "[object Date]") {
    if (isNaN(v.getTime())) {
      return false;
    } else {
      return true;
    }
  } else {
    return false;
  }
}
[/vba]

НА ЗАМЕТКУ: Форум пока не дает нормально форматировать текст скрипта, пробельные отступы в начале строк съедаются. Чтобы восстановить отступы надо после копирования кода к себе в Редактор скриптов выделить там скопированный текст (или сразу весь текст редактора - по Ctrl+A) и нажать комбинацию SHIFT+TAB.

Автор - Gustav
Дата добавления - 12.05.2017 в 02:03
Gustav Дата: Суббота, 13.05.2017, 19:29 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 1472
Репутация: 559 ±
Замечаний: 0% ±

начинал с Excel 4.0...
Переписал функцию updateHist с учётом того, что редактируемый диапазон e.range может состоять из нескольких ячеек - например, в случае вставки после копирования, когда исходный диапазон также содержит несколько ячеек, или в случае одновременной очистки клавишей Delete нескольких предварительно выделенных ячеек. Естественно, в таких случаях хочется, чтобы история обновлялась для всех измененных ячеек, а не только для первой, как в предыдущей версии функции.

[vba]
Код
function updateHist(range) {
  
  var rngInput = range.offset(0, 0, range.getNumRows(), 1);  
  var valInput = rngInput.getValues();
  
  var rngHist  = rngInput.offset(0, 1);
  var valHist  = rngHist.getValues();
  
  for (var row in valInput) {
    if (isDate(valInput[row][0])) {
      var valAddHist = Utilities.formatDate(valInput[row][0], "GMT+3", "dd.MM.yyyy HH:mm:ss");
    } else {
      var valAddHist = valInput[row][0];
    }
    valHist[row][0] += " {" + valAddHist + "}";
  }
  
  rngHist.setValues(valHist);
}
[/vba]

К сожалению, не может быть обработан составной диапазон из нескольких ОБЛАСТЕЙ ячеек - в виду отсутствия в Google Script соответствующих функций. Т.е., скажем, ЕСЛИ встать в ячейку A1, скопировать ее по Ctrl+C, выделить мышкой диапазон A9:A10, далее, удерживая Ctrl, выделить мышкой диапазон A3:A4 и далее, отпустив Ctrl и снова ее нажав и удерживая, выделить мышкой диапазон A14:A16, ТО после нажатия Ctrl+V значение ячейки A1 хоть и будет вставлено во все 7 ячеек составного диапазона (A9:A10,A3:A4,A14:A16), но обработка onEdit будет выполнена только для первой области A9:A10 (первой - по порядку выделения мышкой) и, соответственно, история изменений будет обновлена только в ячейках B9:B10.

При очистке клавишей Delete наблюдается аналогичная картина: значения будут удалены из всех ячеек составного диапазона, но история изменится только для области, которая была выделена первой.

Разумеется, пользователи таблицы должны быть проинформированы (на уровне должностных инструкций) об этой особенности поведения составных диапазонов и не использовать их в чувствительных областях таблицы (в данном конкретном случае - в колонке A).


Мой tip box - яд 41001663842605
 
Ответить
СообщениеПереписал функцию updateHist с учётом того, что редактируемый диапазон e.range может состоять из нескольких ячеек - например, в случае вставки после копирования, когда исходный диапазон также содержит несколько ячеек, или в случае одновременной очистки клавишей Delete нескольких предварительно выделенных ячеек. Естественно, в таких случаях хочется, чтобы история обновлялась для всех измененных ячеек, а не только для первой, как в предыдущей версии функции.

[vba]
Код
function updateHist(range) {
  
  var rngInput = range.offset(0, 0, range.getNumRows(), 1);  
  var valInput = rngInput.getValues();
  
  var rngHist  = rngInput.offset(0, 1);
  var valHist  = rngHist.getValues();
  
  for (var row in valInput) {
    if (isDate(valInput[row][0])) {
      var valAddHist = Utilities.formatDate(valInput[row][0], "GMT+3", "dd.MM.yyyy HH:mm:ss");
    } else {
      var valAddHist = valInput[row][0];
    }
    valHist[row][0] += " {" + valAddHist + "}";
  }
  
  rngHist.setValues(valHist);
}
[/vba]

К сожалению, не может быть обработан составной диапазон из нескольких ОБЛАСТЕЙ ячеек - в виду отсутствия в Google Script соответствующих функций. Т.е., скажем, ЕСЛИ встать в ячейку A1, скопировать ее по Ctrl+C, выделить мышкой диапазон A9:A10, далее, удерживая Ctrl, выделить мышкой диапазон A3:A4 и далее, отпустив Ctrl и снова ее нажав и удерживая, выделить мышкой диапазон A14:A16, ТО после нажатия Ctrl+V значение ячейки A1 хоть и будет вставлено во все 7 ячеек составного диапазона (A9:A10,A3:A4,A14:A16), но обработка onEdit будет выполнена только для первой области A9:A10 (первой - по порядку выделения мышкой) и, соответственно, история изменений будет обновлена только в ячейках B9:B10.

При очистке клавишей Delete наблюдается аналогичная картина: значения будут удалены из всех ячеек составного диапазона, но история изменится только для области, которая была выделена первой.

Разумеется, пользователи таблицы должны быть проинформированы (на уровне должностных инструкций) об этой особенности поведения составных диапазонов и не использовать их в чувствительных областях таблицы (в данном конкретном случае - в колонке A).

Автор - Gustav
Дата добавления - 13.05.2017 в 19:29
Мир MS Excel » Вопросы и решения » Excel и другие приложения » Google Docs » Скрипт - Даты в формате "дд.мм.ггг" Гугл таблицы (Формулы/Formulas)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2017 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!