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