Zrób kolumnę lub komórki tylko do odczytu za pomocą EPPlus

Czy istnieje sposób na zablokowanie lub odczyt tylko kolumny lub grupy komórek za pomocą EPPlus? Próbowałem kodu poniżej zarówno osobno, jak i razem, jednak żaden z nich nie wydaje się mieć pożądanego efektu. Albo cały arkusz jest zablokowany (jeśli dołączęIsProtected oświadczenie) lub w ogóle nic.

        ws.Protection.IsProtected = true;
        ws.Column(10).Style.Locked = true;

EDYTOWAĆ

Oto cały blok kodu z mojego kontrolera

        FileInfo newFile = new FileInfo("C:\\Users\\" + User.Identity.Name + "\\Desktop" + @"\\ZipCodes.xlsx");

        ExcelPackage pck = new ExcelPackage(newFile);

        var ws = pck.Workbook.Worksheets.Add("Query_" + DateTime.Now.ToString());

        //Headers
        ws.Cells["A1"].Value = "ChannelCode";
        ws.Cells["B1"].Value = "DrmTerrDesc";
        ws.Cells["C1"].Value = "IndDistrnId";
        ws.Cells["D1"].Value = "StateCode";
        ws.Cells["E1"].Value = "ZipCode";
        ws.Cells["F1"].Value = "EndDate";
        ws.Cells["G1"].Value = "EffectiveDate";
        ws.Cells["H1"].Value = "LastUpdateId";
        ws.Cells["J1"].Value = "ErrorCodes";
        ws.Cells["K1"].Value = "Status";
        ws.Cells["I1"].Value = "Id";

        //Content
        int i = 2;
        foreach (var zip in results)
        {
            ws.Cells["A" + i.ToString()].Value = zip.ChannelCode;
            ws.Cells["B" + i.ToString()].Value = zip.DrmTerrDesc;
            ws.Cells["C" + i.ToString()].Value = zip.IndDistrnId;
            ws.Cells["D" + i.ToString()].Value = zip.StateCode;
            ws.Cells["E" + i.ToString()].Value = zip.ZipCode;
            ws.Cells["F" + i.ToString()].Value = zip.EndDate.ToShortDateString();
            ws.Cells["G" + i.ToString()].Value = zip.EffectiveDate.ToShortDateString();
            ws.Cells["H" + i.ToString()].Value = zip.LastUpdateId;
            ws.Cells["J" + i.ToString()].Value = zip.ErrorCodes;
            ws.Cells["K" + i.ToString()].Value = zip.Status;
            ws.Cells["I" + i.ToString()].Value = zip.Id;

            i++;
        }

        //ws.Protection.IsProtected = true;
        ws.Column(10).Style.Locked = true;

        return new ExcelResult
            {
                FileName = "ZipCodes.xlsx",
                Package = pck
            };

ExcelResult

public class ExcelResult : ActionResult
{
    public string FileName { get; set; }
    public ExcelPackage Package { get; set; }

    public override void ExecuteResult(ControllerContext context)
    {
        context.HttpContext.Response.Buffer = true;
        context.HttpContext.Response.Clear();
        context.HttpContext.Response.AddHeader("content-disposition", "attachment; filename=" + FileName);
        context.HttpContext.Response.ContentType = "application/vnd.ms-excel";
        context.HttpContext.Response.BinaryWrite(Package.GetAsByteArray());
    }
}

Druga edycja

Próbowałem zabezpieczyć arkusz, ustawiającIsProtected wartość dotrue, a następnie ustawLocked własność dofalse dla każdej kolumny z wyjątkiem ostatniej. Arkusz kalkulacyjny nie tylko nie był w trybie tylko do odczytu, ale mogłem edytować dane w każdej kolumnie.

Zauważyłem jednak, że nie mogę zmienić rozmiaru samych kolumn, więc może to właśnie robię. Chciałbym jednak zablokować każdą komórkę w kolumnie, więc nie można wprowadzać nowych danych.

        for (int a = 1; a < 10; a++)
        {
            ws.Column(a).Style.Locked = false;
        }
        ws.Protection.IsProtected = true;

questionAnswers(6)

yourAnswerToTheQuestion