#angular #ag-grid #ag-grid-angular
#angular #ag-grid #ag-grid-angular
Вопрос:
Я использую ag-grid для отображения данных сетки в моем проекте angular. В HTML некоторые ячейки сетки содержат ссылки. Но когда я пытаюсь экспортировать таблицу в формате Excel (экспорт в Excel), эти ссылки в ячейке в Excel отображаются в виде обычного текста. Итак, мой вопрос в том, как я могу вставить гиперссылку в Excel из данных ag-grid.
- Есть ли какой-либо способ вставить формулу в ячейку Excel, например: =ГИПЕРССЫЛКА (<link_>, <text_to_show>) из ag-grid при экспорте Excel?
- Могу ли я отобразить 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: { /* ... */ }
},