2014-12-17 2 views
0

Я создал файл 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 (снова: пока не менять листы один раз вручную)

ответ

0

Проблема необходимости многих видов в листе , Следующий код был решен вопрос:

//There can only be one sheet that has focus 
SheetViews views = worksheetPart.Worksheet.GetFirstChild<SheetViews>(); 
if (views != null) 
{ 
views.Remove(); 
worksheetPart.Worksheet.Save(); 
} 

(получил его от http://blogs.msdn.com/b/brian_jones/archive/2009/02/19/how-to-copy-a-worksheet-within-a-workbook.aspx)

Смежные вопросы