Faire des colonnes ou des cellules readonly avec EPPlus
Est-il un moyen de faire une colonne ou un groupe de cellules verrouillées ou en lecture seule à l'aide de EPPlus? J'ai essayé le code ci-dessous à la fois séparés et ensemble, cependant ni semble avoir l'effet désiré. Soit l'ensemble de la feuille de calcul est verrouillé (si je comprend le IsProtected
déclaration) ou rien du tout.
ws.Protection.IsProtected = true;
ws.Column(10).Style.Locked = true;
MODIFIER
Ici est tout le bloc de code à partir de mon contrôleur
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());
}
}
Deuxième Édition
J'ai tenté de faire la feuille de calcul protégée par la définition de la IsProtected
de la valeur à true
, puis définissez la Locked
propriété false
pour chaque colonne, à l'exception de la dernière. Non seulement la feuille de calcul pas en mode lecture seule, mais je pourrait modifier les données dans chaque colonne.
Je l'ai fait remarquer, cependant, que je ne peut pas redimensionner les colonnes réelles eux-mêmes, c'est peut-être ce que je suis en train de faire. Je voudrais verrouiller chaque cellule de la colonne, toutefois, donc pas de nouvelles données peuvent être saisies.
for (int a = 1; a < 10; a++)
{
ws.Column(a).Style.Locked = false;
}
ws.Protection.IsProtected = true;
OriginalL'auteur NealR | 2013-12-23
Vous devez vous connecter pour publier un commentaire.
EPPlus peut être défaillant à tous cellules verrouillées, dans ce cas, vous devez définir la
Locked
attributfalse
pour la autres colonnes, puis définissez IsProtected àtrue
.En gros, oui. Si I
Cela a très bien fonctionné, merci
Cela semble vraiment comme un vers l'arrière de façon à être en mesure de verrouiller une cellule. En fait, pourquoi même avoir un
Locked
bien si c'est la seule utilité est de pouvoir être mis àfalse
quandIsProtected
est fixé àtrue
? bizarre....Cela correspond Excel les fonctionnalités -- une feuille protégée protège "verrouillé" les cellules, et les cellules sont verrouillées par défaut. Je souhaite que Microsoft permettrait à grain plus fin de contrôles, tels que les différents types de protection pour les différentes gammes de la même feuille, mais hélas, ce n'est pas le cas.
OriginalL'auteur richardtallent
Je suis l'ajout de deux Feuilles de calcul et le besoin de protéger toutes les colonnes à l'exception de celui sur la troisième indice.
Cela a fonctionné pour moi 🙂
OriginalL'auteur Harmeet Singh Bhamra
Juste pensé que je poste la solution dans le cas où il aide à quelqu'un d'autre. J'ai dû mettre de l'intégralité de la feuille de calcul protégée, mais régler la
Locked
attribut à false pour chaque non-Id
champ.Dois-je encore besoin de protéger l'ensemble de la feuille de calcul? L'un des problèmes que nous avons rencontrés est que est ne semble pas vous pouvez couper/coller des lignes dans la feuille de calcul avec elle protégeait.
Je voulais mentionner que vous avez défini deux fois - ws.La Protection de l'.AllowInsertRows = true; Est-il nécessaire?
OriginalL'auteur NealR
Donc je faisais allusion à cette question et c'est comme ça que je le verrouillage.
OriginalL'auteur A4Abhiraj
devrait le faire. veuillez vérifier le reste de votre code d'erreurs 🙂
OriginalL'auteur Softwarehuset
de verrouillage de l'ensemble de la feuille en premier et ensuite déverrouiller les cellules qui u souhaitez déverrouiller.
pour plus de détails, voir lien ci-dessous:
https://epplus.codeplex.com/SourceControl/latest#SampleApp/Sample6.cs
OriginalL'auteur Prasad Shigwan