Моя проблема заключается в том, что когда Excel открывается впервые после генерации, формулы приходится вручную запускать для ссылок для «рендеринга», что довольно... раздражает.
Ради простоты я не буду представлять вам фактическую реализацию, а только уменьшенную версию. Версия C#, с которой мы работаем, — 9.0 и EPPlus 4.5.3.3 (поскольку компания не желает приобретать лицензию, обновление невозможно)
Итак, в реализации MAIN цель такова: у нас есть 2 рабочих листа. Оба имеют поле идентификатора. За полем идентификатора на втором листе должно следовать поле гиперссылки.
Это поле гиперссылки «должно найти первую строку на первом листе, имеющую соответствующий идентификатор, а затем отобразить поле имени этой строки (1-й лист) в поле ссылки (2-й лист).
Я надеюсь, что это было достаточно хорошее объяснение реализации MAIN. Теперь мы переходим к уменьшенной версии, которую я могу объяснить немного глубже.
/>При этом мы будем работать с ОДНИМ листом.
Существует раздел данных (Продавец, Месяц, товар)
и раздел поиска (Значение, Соответствие)
Если значение в поиске соответствует имени продавца, поле «Совпадение» рядом с ним должно ссылаться на товар продавца.
Вот и желаемое отображение

Теперь, как уже говорилось ранее, я уже получил формулу для этого
=HYPERLINK("#"&CELL("address"; INDEX($C$2:$C$10; MATCH($E2;$A$2:$A$10;0))); INDEX($C$2:$C$10; MATCH($E2;$A$2:$A$10;0)))
Но моя проблема в том, что генерация сообщений отображается вот так

И мне нужно щелкнуть ячейку и нажать Enter, чтобы гиперссылка отобразилась.

Здесь у вас есть реализация EPPLus C# (он не автоматизирован, потому что это опять же небольшая демонстрация
Код: Выделить всё
string excelPath = "Result.xlsx"; // Path to my Excel file
using (ExcelPackage package = new ExcelPackage())
{
ExcelWorkbook wb = package.Workbook;
ExcelWorksheet ws = wb.Worksheets.Add("Sheet");
#region Fill Cells
ws.Cells[1, 1].Value = "Seller";
ws.Cells[1, 2].Value = "Month";
ws.Cells[1, 3].Value = "Product";
ws.Cells[2, 1].Value = "Robert";
ws.Cells[2, 2].Value = "Mar";
ws.Cells[2, 3].Value = "Bananas";
ws.Cells[3, 1].Value = "Tom";
ws.Cells[3, 2].Value = "Feb";
ws.Cells[3, 3].Value = "Oranges";
ws.Cells[4, 1].Value = "Adam";
ws.Cells[4, 2].Value = "Jan";
ws.Cells[4, 3].Value = "Lemons";
ws.Cells[1, 5].Value = "Lookup value";
ws.Cells[2, 5].Value = "Adam";
ws.Cells[3, 5].Value = "Tom";
ws.Cells[1, 6].Value = "First match";
ws.Cells[2, 6].Value = "=HYPERLINK(\"#\"&CELL(\"address\"; INDEX($C$2:$C$10; MATCH($E2;$A$2:$A$10;0))); INDEX($C$2:$C$10; MATCH($E2;$A$2:$A$10;0)))";
ws.Cells[3, 6].Value = "=HYPERLINK(\"#\"&CELL(\"address\"; INDEX($C$2:$C$10; MATCH($E3;$A$2:$A$10;0))); INDEX($C$2:$C$10; MATCH($E3;$A$2:$A$10;0)))";
wb.CalcMode = ExcelCalcMode.Automatic;
wb.FullCalcOnLoad = true;
wb.Calculate(new ExcelCalculationOption(){ AllowCirculareReferences = true});
#endregion
package.SaveAs(new FileInfo(excelPath));
}
Я также пробовал запустить команду вычисления для самих ячеек, прежде чем сохранить ее.
Теперь, прежде чем вы спросите: да, важно, чтобы ссылка была динамической, потому что в основной реализации все сортируется, поэтому строки будут меняться местами, но ссылки на втором листе должны адаптироваться, поэтому они по-прежнему указывают на правильные row.
Надеюсь, я смог правильно объяснить свою проблему.
Подробнее здесь: https://stackoverflow.com/questions/797 ... ith-epplus
Мобильная версия