#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 ()», последняя ячейка становится активной, но она все еще не отображается на экране.