【问题标题】:c# using EPPLUS make name of the sheet read only?c# 使用 EPPLUS 使工作表的名称只读?
【发布时间】:2017-11-02 08:19:01
【问题描述】:

我已经用密码锁定了 excel 单元格并生成了 excel 文件,但工作表的名称仍然可以编辑。如何使其不可编辑?请帮忙。

格式化代码:

      string schoolHeader = "A2:" + Char.ConvertFromUtf32(headerRow[0].Length + 64) + "2";
        string addressHeader = "A3:" + Char.ConvertFromUtf32(headerRow[0].Length + 64) + "3";
        string classHeader = "A5:" + Char.ConvertFromUtf32(headerRow[0].Length + 64) + "5";
        string subjectHeader = "A7:" + Char.ConvertFromUtf32(headerRow[0].Length + 64) + "7";
        string examHeader = "A8:" + Char.ConvertFromUtf32(headerRow[0].Length + 64) + "8";
        string headerRange = "A10:" + Char.ConvertFromUtf32(headerRow[0].Length + 64) + "10";

        string rangeupdate = (StudentCount + 11).ToString();
        string unprotectedRange = "F11:" + Char.ConvertFromUtf32(headerRow[0].Length + 64) + rangeupdate;
        string EntryRange = "A11:" + Char.ConvertFromUtf32(headerRow[0].Length + 64) + rangeupdate;

        subject.Cells[schoolHeader].Merge = true;
        subject.Cells[addressHeader].Merge = true;
        subject.Cells[classHeader].Merge = true;
        subject.Cells[subjectHeader].Merge = true;
        subject.Cells[examHeader].Merge = true;

        subject.Cells[schoolHeader].Value = Header;
        subject.Cells[schoolHeader].Style.VerticalAlignment = OfficeOpenXml.Style.ExcelVerticalAlignment.Center;
        subject.Cells[schoolHeader].Style.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.Center;
        subject.Cells[schoolHeader].Style.Font.Bold = true;
        subject.Cells[schoolHeader].Style.Font.Size = 16;

        subject.Cells[addressHeader].Value = place;
        subject.Cells[addressHeader].Style.VerticalAlignment = OfficeOpenXml.Style.ExcelVerticalAlignment.Center;
        subject.Cells[addressHeader].Style.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.Center;
        subject.Cells[addressHeader].Style.Font.Bold = true;
        subject.Cells[addressHeader].Style.Font.Size = 11;

        subject.Cells[classHeader].Value = name;
        subject.Cells[classHeader].Style.VerticalAlignment = OfficeOpenXml.Style.ExcelVerticalAlignment.Center;
        subject.Cells[classHeader].Style.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.Center;
        subject.Cells[classHeader].Style.Font.Bold = true;

        subject.Cells[subjectHeader].Value = subject;
        subject.Cells[subjectHeader].Style.VerticalAlignment = OfficeOpenXml.Style.ExcelVerticalAlignment.Center;
        subject.Cells[subjectHeader].Style.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.Center;
        subject.Cells[subjectHeader].Style.Font.Bold = true;
        subject.Cells[subjectHeader].Style.Font.Size = 12;

        subject.Cells[examHeader].Value = date;
        subject.Cells[examHeader].Style.VerticalAlignment = OfficeOpenXml.Style.ExcelVerticalAlignment.Center;
        subject.Cells[examHeader].Style.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.Center;
        subject.Cells[examHeader].Style.Font.Bold = true;

        subject.Cells[headerRange].LoadFromArrays(headerRow);

        subject.Cells[headerRange].Style.VerticalAlignment = OfficeOpenXml.Style.ExcelVerticalAlignment.Center;
        subject.Cells[headerRange].Style.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.Left;
        subject.Cells[headerRange].Style.Font.Bold = true;
        subject.Cells[headerRange].Style.Font.Size = 12;
        subject.Cells[headerRange].Style.Font.Color.SetColor(System.Drawing.Color.White);
        subject.Cells[headerRange].Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid;
        subject.Cells[headerRange].Style.Fill.BackgroundColor.SetColor((System.Drawing.Color.MediumPurple));

        subject.Cells[headerRange].Style.Border.Top.Style = OfficeOpenXml.Style.ExcelBorderStyle.Thin;
        subject.Cells[headerRange].Style.Border.Bottom.Style = OfficeOpenXml.Style.ExcelBorderStyle.Thin;
        subject.Cells[headerRange].Style.Border.Left.Style = OfficeOpenXml.Style.ExcelBorderStyle.Thin;
        subject.Cells[headerRange].Style.Border.Right.Style = OfficeOpenXml.Style.ExcelBorderStyle.Thin;

        subject.Cells[EntryRange].Style.Font.Bold = true;
        subject.Cells[EntryRange].Style.Font.Size = 12;

        subject.Cells[subject.Dimension.Address].AutoFitColumns();
        subject.Cells[headerRange].Style.Locked = true;
        subject.Cells[unprotectedRange].Style.Locked = false;
        subject.Protection.IsProtected = true;
        subject.Protection.AllowFormatColumns = true;
        subject.Protection.SetPassword(pass.ToString());

这只能锁定单元格而不是工作表名称。即使设置密码似乎也不会锁定工作表名称。你可以只更改名称,它不会做任何事情。

【问题讨论】:

    标签: c# excel epplus


    【解决方案1】:

    您还需要保护工作簿:

    package.Workbook.Protection.LockStructure = true;
    package.Workbook.Protection.SetPassword("password");
    

    通过这种方式,工作簿结构也受到保护,包括工作表名称,但它对所有工作表都有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多