EPPlus를 사용하여 열 또는 셀을 읽기 전용으로 만듭니다.
EPPlus를 사용하여 열 또는 셀 그룹을 잠그거나 읽을 수 있는 방법이 있습니까?아래 코드를 따로 그리고 함께 사용해봤지만 둘 다 원하는 효과가 없는 것 같습니다.전체 워크시트가 잠겨 있거나(이것을 포함하면)IsProtected
스테이트먼트) 또는 아무것도 없습니다.
ws.Protection.IsProtected = true;
ws.Column(10).Style.Locked = true;
편집
여기 내 컨트롤러의 코드 블록 전체가 있습니다.
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
};
Excel 결과
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());
}
}
두 번째 편집
다음 설정을 통해 워크시트를 보호하려고 시도했습니다.IsProtected
에 가치를 두다.true
를 설정합니다.Locked
의 재산.false
마지막 열을 제외한 모든 열에 대해.스프레드시트가 읽기 전용 모드가 아니었을 뿐만 아니라 모든 열의 데이터를 편집할 수 있었습니다.
하지만 실제 열 자체의 크기를 조정할 수 없다는 것을 깨달았습니다. 그래서 아마 이렇게 하고 있을 것입니다.그러나 열에 있는 각 셀을 잠그고 새 데이터를 입력할 수 없도록 합니다.
for (int a = 1; a < 10; a++)
{
ws.Column(a).Style.Locked = false;
}
ws.Protection.IsProtected = true;
WorkSheet 2개를 추가하는데 3번째 인덱스에 있는 열을 제외한 모든 열을 보호해야 합니다.
이것은 나에게 효과가 있었다:)
worksheet2.Cells["A1"].LoadFromDataTable(dt_Data, true); //------load data from datatable
worksheet2.Protection.IsProtected = true; //--------Protect whole sheet
worksheet2.Column(3).Style.Locked = false; //-------Unlock 3rd column
EPPlus는 잠겨 있는 모든 셀에 디폴트로 설정되어 있을 수 있습니다.이 경우,Locked
의 탓으로 돌리다false
다른 열의 경우 IsProtected를 로 설정합니다.true
.
혹시 다른 사람에게 도움이 될까봐 해답을 올려야겠다고 생각했어요.전체 워크시트를 protected로 설정해야 했지만Locked
false로 간주합니다.Id
들판.
//Content
int i = 2;
foreach (var zip in results)
{
//Set cell values
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["I" + i.ToString()].Value = zip.ErrorCodes;
ws.Cells["J" + i.ToString()].Value = zip.Status;
ws.Cells["K" + i.ToString()].Value = zip.Id;
//Unlock non-Id fields
ws.Cells["A" + i.ToString()].Style.Locked = false;
ws.Cells["B" + i.ToString()].Style.Locked = false;
ws.Cells["C" + i.ToString()].Style.Locked = false;
ws.Cells["D" + i.ToString()].Style.Locked = false;
ws.Cells["E" + i.ToString()].Style.Locked = false;
ws.Cells["F" + i.ToString()].Style.Locked = false;
ws.Cells["G" + i.ToString()].Style.Locked = false;
ws.Cells["H" + i.ToString()].Style.Locked = false;
ws.Cells["I" + i.ToString()].Style.Locked = false;
ws.Cells["J" + i.ToString()].Style.Locked = false;
i++;
}
//Since we have to make the whole sheet protected and unlock each cell
//to allow for editing this loop is necessary
for (int a = 65000 - i; i < 65000; i++)
{
//Unlock non-Id fields
ws.Cells["A" + i.ToString()].Style.Locked = false;
ws.Cells["B" + i.ToString()].Style.Locked = false;
ws.Cells["C" + i.ToString()].Style.Locked = false;
ws.Cells["D" + i.ToString()].Style.Locked = false;
ws.Cells["E" + i.ToString()].Style.Locked = false;
ws.Cells["F" + i.ToString()].Style.Locked = false;
ws.Cells["G" + i.ToString()].Style.Locked = false;
ws.Cells["H" + i.ToString()].Style.Locked = false;
ws.Cells["I" + i.ToString()].Style.Locked = false;
ws.Cells["J" + i.ToString()].Style.Locked = false;
}
//Set worksheet protection attributes
ws.Protection.AllowInsertRows = true;
ws.Protection.AllowSort = true;
ws.Protection.AllowSelectUnlockedCells = true;
ws.Protection.AllowAutoFilter = true;
ws.Protection.AllowInsertRows = true;
ws.Protection.IsProtected = true;
그래서 저는 이 질문을 언급하고 있었고, 이렇게 자물쇠를 잠그는 방법을 알고 있습니다.
worksheet.Protection.IsProtected = true;
//I'm creating a template for users to fill in data.These headers
//will come from database tables later on.
//So tableHeaders is an array of strings
for (int i = 1; i <= tableHeaders.Length; i++)
{
worksheet.Column(i).Style.Locked = false;
}
//And then lock the first row.
worksheet.Row(1).Style.Locked = true;
//Additionally don't allow user to change sheet names
excelPackage.Workbook.Protection.LockStructure = true;
먼저 시트 전체를 잠근 다음 잠금을 해제할 셀을 잠금 해제합니다.
workSheet.Protection.IsProtected = true;
workSheet.Cells[2, 3, pocDeatils.CityMaster.Rows.Count + 1, 4].Style.Locked = false;
상세한 것에 대하여는, 다음의 링크를 참조해 주세요.https://epplus.codeplex.com/SourceControl/latest#SampleApp/Sample6.cs
ws.Column(10).Style.Locked = true;
에러가 없는지, 코드의 나머지를 확인해 주세요. : )
- 특정 열 또는 셀 그룹을 잠그려면 먼저 편집해야 하는 열을 알아야 합니다.두 번째 파라미터인 'new ExcelAddress'로 구분된 쉼표를 추가합니다(편집 가능한 열이 같은 순서가 아닐 때 쉼표로 구분하는 것이 좋습니다).
예: MWS 열만 잠급니다.Protected Ranges.추가("편집 가능", 새 Excel 주소("A3:A25, L3:L25, N3:N25"));
- 그런 다음 두 번째 부분은 전체 워크시트 ws를 보호하는 것입니다.보호.IsProtected = true;
언급URL : https://stackoverflow.com/questions/20751808/make-column-or-cells-readonly-with-epplus
'programing' 카테고리의 다른 글
엔티티 프레임워크6 트랜잭션롤백 (0) | 2023.04.15 |
---|---|
어레이를 루프하여 인덱스와 값을 모두 인쇄 (0) | 2023.04.15 |
Bash에서 어떻게 고리를 벗어날 수 있을까? (0) | 2023.04.15 |
POI HSSF API를 사용하여 Excel 셀에서 날짜 값 읽기 (0) | 2023.04.15 |
목록에 개체가 이미 있는지 확인하는 방법 (0) | 2023.04.15 |