Сохранение формата даты в Excel при извлечении данных

У нас есть надстройка для 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


person naveen ashok    schedule 08.04.2020    source источник


Ответы (1)


Спасибо Naveen за ваш вопрос, мы действительно создаем новый API для этого сценария. Этот API сейчас находится на стадии бета-версии. Этот API планируется выпустить в версии 1.12, которая станет GA этой осенью.

API range.numberFormatCategories, которые представляют категорию числового формата каждой ячейки диапазона. он вернет категории в

введите здесь описание изображения

here is the sample code for this API

  await Excel.run(async (context) => {
    const sheet = context.workbook.worksheets.getActiveWorksheet();
    sheet.activate();
    let range = sheet.getRange("A1:C3");
    range.load("address");
    range.load("numberFormatCategories");
    await context.sync();
    console.log("address: " + range.address);
    console.log("NumberFormatCategory: " + range.numberFormatCategories);
  });

Вот документ https://docs.microsoft.com/en-us/javascript/api/excel/excel.range?view=excel-js-preview#numberformatcategories

Вы можете попробовать эту суть в Windows и Excel онлайн. https://gist.github.com/lumine2008/475327d889031ced8daf4a87b08c832c

person Raymond Lu    schedule 08.04.2020
comment
Спасибо, Раймонд. Было бы действительно полезно, когда API будет выпущен - person naveen ashok; 10.04.2020
comment
Мы планируем сделать GA этот API на конференции Ignite. - person Raymond Lu; 15.04.2020