ClosedXML — Как мне установить положение прокрутки листа?

#c# #excel #.net-core #closedxml

#c# #excel #.net-core #closedxml

Вопрос:

Я создаю электронную таблицу Excel (XLSX) из существующего шаблона и добавляю набор данных в таблицу на одном из листов. Я смог программно установить активный лист, но я не могу установить, где находится положение прокрутки листа, чтобы последние строки данных отображались, когда кто-то открывает электронную таблицу в Excel.

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

Вот мой код:

 using (var workbook = new XLWorkbook(fileInfo.FullName))
{
workbook.Properties.Author = _configuration.GetSection("ExcelAuthor").Value;

var workSheet = workbook.Worksheet(_configuration.GetSection("ExcelWorkSheetName").Value);
var table = workSheet.Table(_configuration.GetSection("ExcelTableName").Value);

var range = table.ReplaceData(data.Tables[0]);

//Set the sheet as the active sheet
foreach (var sheet in workbook.Worksheets)
{
    var isCurrentSheet = sheet.Equals(workSheet);

    sheet.SetTabActive(isCurrentSheet);
    sheet.SetTabSelected(isCurrentSheet);
}

 //workSheet.ActiveCell = range.LastCell();
 workSheet.Cell(range.LastCell().Address).Select();

 //range.LastCell().Select();
 //range.LastCell().SetActive();



path = string.Format("{0} - {1}.xlsx", _configuration.GetSection("FileNamePrefix").Value, DateTime.Now.ToString("yyyy-MM-dd"));
path = string.Format("{0}\{1}", _configuration.GetSection("OutputFolder").Value.TrimEnd(new[] { '/', '\' }), path);
workbook.SaveAs(path);
  

};

Ответ №1:

Я отправил запрос на извлечение, и это исправлено в https://github.com/ClosedXML/ClosedXML/pull/1561

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

1. Спасибо @francois-botha, очень признателен.

Ответ №2:

Я не уверен, что можно установить точное положение прокрутки, но вы можете установить текущую выбранную ячейку.

 var wb = new XLWorkbook();
var wsActiveCell = wb.AddWorksheet("Set Active Cell");
wsActiveCell.Cell("B2000").SetActive();
  

Ссылка: https://github.com/ClosedXML/ClosedXML/wiki/Selecting-Cells-and-Ranges

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

1. Теперь я вижу, что у вас есть //range.LastCell().SetActive(); в вашем примере кода. Не работает ли раскомментирование?

2. Раскомментировав «SetActive ()», последняя ячейка становится активной, но она все еще не отображается на экране.