Сохранение формата даты в Excel при получении данных - PullRequest
1 голос
/ 08 апреля 2020

У нас есть Excel добавить в построенный с использованием офиса. js. Где мы читаем данные из диапазона данных (ie A1: C10), который может состоять из столбца даты. Пожалуйста, обратитесь к изображению ниже

enter image description here

Наше дополнение считывает данные и формирует набор данных 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;
 }) 

. В приведенном выше коде мы извлекли формат данных каждой ячейки, загрузив числовой формат диапазона (ierange.load("numberFormat"), который возвращает формат массив. Мы используем этот форматный массив, чтобы решить, есть ли у нас дата в нашем выборе. Основная проблема заключается в том, что у нас есть много форматов даты, поддерживаемых в Excel, и мы внедряем логи преобразования даты c для каждого шаблона отдельно. иметь любой обобщенный метод c, который преобразует серийный номер Excel в любой поддерживаемый (ie все форматы в 270 местоположениях) шаблон даты в Excel.

Чтобы просмотреть шаблоны, поддерживаемые в Excel, попробуйте выбрать другие шаблоны, отформатировав ячейка. (ie щелкните правой кнопкой мыши ячейку -> Формат ячейки-> Дата, затем измените формат).

enter image description here

мы попробовали { ссылка }, который конвертируется в формат ISO, но мы ожидаем, что даты будут в том же порядке, что и пользовательские форматы в Excel (ie среда, апрель 8 2020 должен быть таким же, когда мы конвертируем его из серийного номера Excel).

Пример серийного номера Excel - «22.08.2011 - это 40777 в Excel». Пожалуйста, нажмите здесь , чтобы понять сериал Excel

1 Ответ

1 голос
/ 08 апреля 2020

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

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

enter image description here

. Вот пример кода для этого 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);
  });

. Вот документ * 1014. *

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...