Как остановить Excel от автоматического форматирования при установке значений с помощью office.js
Я пытаюсь установить значение ячейки, чтобы последовательно быть текстовым значением. Я не хочу никакого форматирования вообще.
Я использую следующий код:
async function setValue() {
try {
await Excel.run(async (context) => {
const sheet = context.workbook.worksheets.getItem("Sample");
const range = sheet.getRange("C3");
range.values = [[ 'June 2018' ]];
range.format.autofitColumns();
await context.sync();
});
}
catch (error) {
OfficeHelpers.UI.notify(error);
OfficeHelpers.Utilities.log(error);
}
}
И это приводит к дате Jun-18
в клетке. Я нашел этот ответ, который может быть обходным путем, но с префиксом всех моих данных '
собирается сбить с толку моих пользователей. Проблема также происходит с такими значениями, как 01
,
2 ответа
Отличный вопрос! Во-первых, позвольте мне сделать общее утверждение: программируемость Excel по своей сути относится к автоматизации - что делает то же самое, что и пользователь, но программно. Таким образом, вы часто можете узнать из интерфейса, что вы должны делать в программировании.
Теперь в обычном Excel, если вы наберете June 2018
в пустую ячейку на новом листе, вы получите тот же опыт, который вы только что описали. Это потому, что ячейка отформатирована как "Общая", что означает, что она будет пытаться привязаться к определенному типу. Если вы хотите, чтобы он оставался в виде текста (а не отформатированной даты, как это предлагал Рики в последней строке своего ответа), вам нужно сначала установить форматирование чисел на текст, что в Excel является @
символ, а затем введите значение.
await Excel.run(async (context) => {
const range = context.workbook.getSelectedRange();
range.numberFormat = [["@"]];
range.values = [["June 2018"]];
await context.sync();
});
Опять же, позвольте мне подчеркнуть, что, как и в пользовательском интерфейсе, вам нужно установить форматирование, прежде чем устанавливать значение. Если сделать это наоборот, вы попадете в ячейку с текстом "43252" (что, по совпадению, число дней с 0 января [да, 0] 1900 года - случайные пустяки за день).
Конечно, говоря Excel "это просто текст", вы теряете возможность делать с ним другие свидания, поэтому ответ Рики повторяется. Форматирование чисел ("мммм гггг") может быть лучше. Но с точки зрения вашего заданного вопроса о том, что Excel ничего не имеет для автоматического форматирования, просто сначала установите форматирование чисел, а затем установите значения.
Если вам действительно нужно, чтобы это была строка, вы должны поместить данные в строку, которая не будет приводить к приведению в Excel строк типа даты к объектам Date. Один из способов сделать это - поменять пробел на неразрывный пробел. Заменить эту строку:
range.values = [[ 'June 2018' ]];
со следующими строками:
let date = 'June 2018';
let dateAsString = date.replace(' ', '\xa0');
range.values = [[dateAsString]];
Кстати, если вы просто хотите, чтобы она выглядела как строка ввода, но хотите разрешить ей быть типом Date, то вы можете просто добавить следующую строку ниже строки, которая создает объект диапазона:
range.numberFormat = [["mmmm yyyy"]];