Как вставить ссылку в ячейку экспортируемого Excel с помощью Ag-Grid?

#angular #ag-grid #ag-grid-angular

#angular #ag-grid #ag-grid-angular

Вопрос:

Я использую ag-grid для отображения данных сетки в моем проекте angular. В HTML некоторые ячейки сетки содержат ссылки. Но когда я пытаюсь экспортировать таблицу в формате Excel (экспорт в Excel), эти ссылки в ячейке в Excel отображаются в виде обычного текста. Итак, мой вопрос в том, как я могу вставить гиперссылку в Excel из данных ag-grid.

  1. Есть ли какой-либо способ вставить формулу в ячейку Excel, например: =ГИПЕРССЫЛКА (<link_>, <text_to_show>) из ag-grid при экспорте Excel?
  2. Могу ли я отобразить html в ячейке Excel, чтобы ссылка могла быть вставлена в качестве тега элемента привязки из ag-grid?

Данные Ag-grid (в HTML):

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

Я хочу такой же результат и в экспортированном Excel, где эти ссылки могут быть интерактивными.

Примечание: Я использую корпоративный продукт ag-grid. Спасибо.

Комментарии:

1. вы можете использовать =HYPERLINK(<link_>, <text_to_show>), чтобы показать ссылку в экспортированном Excel, но проблема в 1. это выглядит некрасиво. 2. она не отображается как гиперссылка, если вы не нажмете enter в этой ячейке в Excel. 3. это видно в формуле, поэтому оно не отображается как тип ссылки в Excel. выполнение 2-й вещи еще сложнее, и вам может понадобиться какая-то другая библиотека, чтобы сделать это за вас. в итоге мы сделали 1-ю вещь в нашем проекте, поскольку конечный пользователь был согласен с нажатием enter (хотя и не доволен).

Ответ №1:

используйте processCellCallback функцию в параметрах экспорта, чтобы определить вашу функцию, которая создаст гиперссылку в Excel.

    {
       name: 'Excel Export (.xlsx)',
        action: function () { 
        params.exportMode = 'xlsx',
        params.processCellCallback = customProcessCellCallback
        return grid.exportDataAsExcel(params); 
              }
    },

    customProcessCellCallback = function (cell) {
            var cellVal = cell.value;
            if(check for link condition) {
                //make sure to handle empty undefined and null.
                if (cellVal === "" || cellVal === undefined || cellVal === null) {
                    cellVal = '';
                }
                else{
                cellVal = '=HYPERLINK("your link here","' cellVal '")';
                }
            }
            return cellVal;
        }
  

Комментарии:

1. Привет, @sandeep. Спасибо за ваш ответ. Я пробовал это решение ранее. И вы правы, это выглядит некрасиво, и вам нужно нажать enter, чтобы выглядеть как ссылка. Возможно, другого способа добиться этого нет. 😢😢😢

2. @ChinmoyAcharjee вам удалось найти решение для этого?

Ответ №2:

Вот как заставить ссылку отображаться (она должна отображаться сразу при открытии Excel).

Предположим, что данные для каждой строки выглядят примерно так:

 {
    /* ... */
    myLinkColumnHref: "https://www.example.com/",
    myLinkColumn: "Example",
    /* ... */
}
  

Шаг 1: Настройте свою processCellCallback процедуру:

 // Use the appropriate check in this if condition, this is just a sample
if(params.column.colDef.field == "myLinkColumn") {
    return `=HYPERLINK("${params.node.data.myLinkColumnHref}", "${params.value}")`;
}
  

В этом примере я использую myLinkColumnHref элемент данных, который может содержать ссылку на ссылку. Я также использую params.value элемент для текста ссылки.

Шаг 2: Добавьте autoConvertFormulas: true опцию в defaultExcelExportParams конфигурацию (или в конфигурацию, переданную в процедуру экспорта):

 defaultExcelExportParams: {
    autoConvertFormulas: true,
    processCellCallback: { /* ... */ }
},