Excel-Protection从一个工作表设置在另一个工作表中

时间:2014-12-17 12:47:32

标签: c# excel openxml

我使用openXML动态创建了一个excel文件。在这张纸内有多张纸。在每个工作表内,可以有写保护的行。

我使用excel文件作为模板。在这个模板中有" normal"允许编辑的行和不允许编辑的行。我抓住该行并将其复制到我不希望用户能够编辑内容的地方:

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行不受保护。

因为在打开文件后行为只是直接错误,但是当我在工作表之间切换时是正确的:是否有一个额外的命令我必须调用&#34;刷新&#34;创建后的文件?

附加问题: 当我更改工作表1中的单元格时,它也会在工作表2中自动更改(再次:直到我手动交换工作表)

1 个答案:

答案 0 :(得分: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获得)