一张纸的 Excel 保护设置在另一张纸上

本文关键字:一张 Excel 保护 设置 | 更新日期: 2023-09-27 18:34:25

我使用 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 中自动更改(再次:直到我手动交换工作表一次(

一张纸的 Excel 保护设置在另一张纸上

问题是工作表中有很多视图。以下代码解决了该问题:

//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 得到的(