2013-02-21 4 views
0

Я настраиваю электронную таблицу для кого-то еще с формой для ввода данных. Один из столбцов должен содержать дату. Формат входных дат похож на этот пример: «26 января 2013 года» (будет собрано много скопированной скобы & для сбора данных, поэтому изменение формата на этапе ввода не является реальным вариантом).Дата форматирования в электронной таблице google

Мне нужен этот столбец даты для сортировки, но электронная таблица не распознает это как дату, а просто как строку. (Это признало бы «январь-26-2013», я пробовал.) Так что мне нужно переформатировать дату ввода.

Мой вопрос: как я могу это сделать? Я огляделся, и скрипт google apps выглядит как способ (хотя я еще не нашел хороший пример переформатирования). К сожалению, мой единственный опыт программирования в Python и на промежуточном уровне. Я могу сделать это на Python без проблем, но я не знаю никакого JavaScript. (Мой Python подход был бы:

splitted = date.split() 
newdate = "-".join([splitted[0], splitted[1][:-1], splitted[2]]) 
return newdate 

)

Я также не знаю, как бы я идти о связывании сценария в таблицу - я бы прикрепить ее к клетке, или форме , или где? И как? Любая ссылка на полезный, понятный учебник и т. Д. По этому вопросу очень помогла бы.

Любая помощь очень ценится! Lastalda

Edit: Вот код, который я закончил с:

//Function to filter unwanted " chars from date entries 
function reformatDate() { 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var startrow = 2; 
    var firstcolumn = 6; 
    var columnspan = 1; 
    var lastrow = sheet.getLastRow(); 
    var dates = sheet.getRange(startrow, firstcolumn, lastrow, columnspan).getValues(); 
    newdates = [] 
    for(var i in dates){ 
    var mydate = dates[i][0]; 
    try 
     { 
     var newdate = mydate.replace(/"/g,''); 
     } 
    catch(err) 
     { 
     var newdate = mydate 
     } 
    newdates.push([newdate]); 
    } 
    sheet.getRange(startrow, firstcolumn, lastrow, columnspan).setValues(newdates) 
} 

Для других новичков запутаться Google-скрипт, как я:

  • прикрепление сценарий таблица работает создание сценария из электронной таблицы (Tools => Script Editor). Просто поставить функцию там достаточно, вам, похоже, не нужен вызов функции и т. Д.

  • вы выбираете триггер скрипта из редактора сценариев (ресурсы => триггеры этого проекта).

Важно: скрипт будет работать только, если есть пустая строка в нижней части листа в вопрос!

+0

рад услышать мой ответ был полезным :-) –

+0

@Serge: да, это было, спасибо! Я как-то не мог прокомментировать или упрекнуть/принять вчера. Является ли приведенный выше код разумным для вас или он излишне сложный? (Так как я ничего не знаю о JavaScript, я был бы признателен за отзывы.) – Lastalda

+0

Я отредактировал свой ответ, это проще, чем в комментариях –

ответ

1

Просто идея:

Если вы дважды щелкните по вашей дате строки в таблице вы увидите, что ее реальное значение, что делает его строка вместо объекта дата это 'Jan 26, 2013 с ' в передней части строка, которую я здесь не добавил ... (Форма позволяет вам вводить то, что вы хотите в текстовой области, включая +322475 ... например, если это номер телефона, это известный трюк в электронных таблицах ячейки). Вы могли бы просто создать скрипт, который запускает on form submit, и который удаляет ' в ячейках, я думаю, что электронная таблица сделает все остальное ... (я не тестировал это, поэтому дайте ему попробовать и рассмотрите это как предложение) ,

Для удаления ' вы можете просто использовать .replace()method **

var newValue = value.replace(/'/g,''); 

вот некоторые ссылки на соответствующую документацию: link1link2


EDIT следующий комментарий:

Это coul d проще, так как replace не генерирует ошибку, если совпадение не найдено. Таким образом, вы могли бы сделать это следующим образом:

function reformatDate() { 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var dates = sheet.getRange(2, 6, sheet.getLastRow(), 1).getValues(); 
    newdates = [] 
    for(var i in dates){ 
    var mydate = dates[i][0]; 
     var newdate = mydate.replace(/"/g,''); 
    newdates.push([newdate]); 
    } 
    sheet.getRange(2, 6, sheet.getLastRow(), 1).setValues(newdates) 
} 

Кроме того, вы использовали " в вашем коде, предположительно, с целью ... мой тест показал ' вместо этого. Что заставило вас сделать этот выбор?

+0

А, я вижу! Спасибо за указатель! – Lastalda

+0

Я изменил кавычку, потому что обнаружил, что в электронной таблице, над которой я работаю, это кавычка, которая фактически используется. Что касается try/catch: я пробовал это без, но потом получил ошибку, когда «mydate» уже был «» «-беспочтительным, с тех пор они автоматически преобразуются в объекты Date (это то, что я намеревался), а объекты« Дата »- t похоже, поддерживает функцию «replace». Таким образом, остальная часть функции имеет смысл именно так? Это огромное облегчение, спасибо! :-) – Lastalda

+0

спасибо за дополнительную информацию ;-), вы правы, я не знал, я думаю о случае, когда ячейка уже является датой ... так что try/catch - это способ пойти ..., другой возможный способ - использовать typeOf(), чтобы увидеть, что это строка или нет. цитата, мне интересно, почему ваша электронная таблица отличается? Я понятия не имею, если когда-либо найду что-то, что я сейчас обновлю. Во всяком случае, случай закрыт на данный момент ;-) –

0

решаемые, я просто должен был изменить запятую точкой и она работала

Смежные вопросы