Задать вопрос
@jurapuris
Front-end developer

Как сделать ссылку в Excel?

Вопрос, в том, как сделать вставляемые строки - гиперссылками.
Используемый модуль - xlsx-style (^0.8.13)
Код для примера в уменьшенном объёме.

Пример с типом "l" не помогает:
ws[cell_ref] = {
          v: value,
          t: type,
          s: val.style || '',
          l: { Target:"#'" + cell_ref.v + "'!A1", Tooltip:cell_ref.v }
        };


Создание:
createWB(Name) {
    let wb = new Workbook();
    wb.SheetNames.push(Name);
    wb.Sheets[Name] = {'!cols': []};
    return wb;
  },


Промежуточный код при генерации ячеек из данных:

export(Name, ColsOptions, ResponseData) {
    let wb = this.createWB(Name);
    let ws = wb.Sheets[Name];
    // set main settings
    ws['!ref'] = this.encode_range({
      s: {c: 0, r: 0},
      e: {c: Object.keys(ColsOptions).length - 1, r: ResponseData.Records.length}
    });
    //set cols width
    _.each(ColsOptions, (val) => {
      ws['!cols'].push({wch: val.wch});
    });

    // set header
    let colIndex = -1;
    _.each(ColsOptions, (val) => {
      let cell_ref = this.encode_cell({c: ++colIndex, r: 0});
      ws[cell_ref] = {
        v: label,
        t: 's',
        s: {
          alignment: {
            vertical: 'center',
            horizontal: 'center',
            wrapText: true
          },
          }
        },
      };
    });

    // create dara rows
    let newVersion = _.isArray(ColsOptions);
    _.each(ResponseData.Records, (item, rowIndex) => {
      let colIndex = -1;
      _.each(ColsOptions, (val, key) => {
        let cell_ref = XLSX.utils.encode_cell({c: ++colIndex, r: rowIndex + 1});
        let value = (newVersion) ? item[val.field] || '' : item[key] || '';
        }

        ws[cell_ref] = {
          v: value,
          t: type,
          s: val.style || '',
          l: { Target:"#'" + cell_ref.v + "'!A1", Tooltip:cell_ref.v }
        };
        

      });
    });
  },


Генерация:

const wbout = XLSX.write(wb, {type: 'binary', bookType: 'xlsx', bookSST: true/*, cellDates: true*/});
FileSaver.saveAs(new Blob([this.s2ab(wbout)], {type: 'application/octet-stream'}), ws_name + '.xlsx');
  • Вопрос задан
  • 64 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы