У нас есть надстройка для Excel, созданная с использованием office.js. Где мы читаем данные из диапазона данных (например, A1: C10), который может состоять из столбца даты. Пожалуйста, обратитесь к изображению ниже
Наша надстройка считывает данные и формирует набор данных CSV, который загружается, когда пользователь нажимает кнопку загрузки. Мы читаем данные, используя следующие строки кода
Excel.run({ delayForCellEdit: true }, async context => {
this.rangeInput.nativeElement.blur();
let sheet;
sheet = context.workbook.worksheets.getItem("Sheet1");
let range = sheet.getRange("A1:D10");
range.load("values");
range.load("numberFormat");
this.isDataLoading = true;
this.updateLoading();
await context.sync();
let rangeData = range.values;
let dataFormat = range.numberFormat;
})
В приведенном выше коде мы получили формат данных каждой ячейки, загрузив числовой формат диапазона (т.е.range.load("numberFormat")
, который возвращает массив форматов. Мы используем этот массив форматов, чтобы решить, есть ли у нас дата в нашем выборе. Основная проблема заключается в том, что мы у нас есть много форматов даты, поддерживаемых в Excel, и мы реализуем логику преобразования даты для каждого шаблона отдельно.Есть ли у нас какой-либо общий метод, который преобразует сериальный формат Excel в любой поддерживаемый (то есть все форматы в 270 местоположениях) шаблон даты в Excel.
Чтобы проверить шаблоны, поддерживаемые в Excel, попробуйте выбрать различные шаблоны, отформатировав ячейку. (т.е. щелкните правой кнопкой мыши ячейку -> Форматировать ячейку-> Дата, затем измените формат).
мы попробовали https://stackoverflow.com/a/16233621/10523731, который конвертируется в формат ISO, но мы ожидаем Дата должна быть в том же шаблоне, что и пользователь, форматирующий их в Excel (т.е. среда, 8 апреля 2020 г., должна быть такой же, когда мы конвертируем ее из серийного номера Excel).
Пример серийного номера Excel - «22.08.2011 40777 в Excel». Пожалуйста, нажмите здесь, чтобы понимать сериал в Excel