Я создал файл excel динамически, используя openXML. Внутри этого листа есть несколько листов. Внутри каждого листа могут быть строки, защищенные от записи.Excel-защита с одного листа установлена в другом
Я использую файл Excel как шаблон. В этом шаблоне есть «обычные» строки, которые позволяют редактировать, а строка - нет. Я хватаю строку и скопировать его в тех местах, где я не хочу, чтобы пользователь сможет редактировать содержимое:
private Row CloneRow(Row sourceRow, uint index, bool? hidden = null)
{
var targetRow = (Row) sourceRow.CloneNode(true);
if (hidden.HasValue)
{
targetRow.Hidden = hidden;
}
foreach (Cell cell in targetRow.Elements<Cell>())
{
// Update the references for reserved cells.
string cellReference = cell.CellReference.Value;
cell.CellReference = new StringValue(cellReference.Replace(targetRow.RowIndex.Value.ToString(), index.ToString()));
cell.CellFormula = null;
}
// Update the row index.
targetRow.RowIndex = new UInt32Value(index);
return targetRow;
}
sourceRow параметр считывается из шаблона:
List<Row> rows = sheet.ChildElements.OfType<Row>().ToList();
rowChangeAllowed=rows.FirstOrDefault(rw=>rw.RowIndex==3);
rowNotChangeAllowed=rows.FirstOrDefault(rw=>rw.RowIndex==4);
все работает как и ожидалось. Но когда я открываю файл в Excel, строки, которые должны быть защищены на любом листе, защищены на всех листах.
Пример: Лист 1: Строка 4 + 5 должна быть защищена Лист 2: Строка 7 должна быть защищена.
В настоящее время на листе 1 строк 4,5 и 7 защищены
При переключении на второй лист, вдруг все работает как нужно: На листе 1, строка 4 + 5 все еще защищен, но строка 7 не.
Поскольку поведение является неправильным сразу после открытия файла, но верно, когда я переключаюсь между листами: есть ли дополнительная команда, которую я должен вызвать, чтобы «обновить» файл после создания?
Дополнительный выпуск: При изменении ячейки в листе 1, он также автоматически изменяется в листе 2 (снова: пока не менять листы один раз вручную)