2017-03-23 1 views
1

J'ai essayé d'utiliser deux fonctions dans Excel INDEX et MATCH et selon EPPlus codeplex, these should be supported. Chaque fois que j'ouvre le fichier, il y a un message d'avertissement disant que quelque chose est cassé et demande si je veux réparer le document, et quand il s'ouvre, toutes les formules ont disparu. Lors de la réparation du document, une boîte de dialogue s'affiche indiquant que la formule a été supprimée de /xl/worksheets/sheet1.xml-del.La formule EPPlus ne fonctionne pas sans appeler Calculer

Je peux placer les formules manuellement dans la feuille de spécifications et elles fonctionnent, mais la seule façon d'obtenir des données à afficher dans le fichier xlsx généré est d'appeler Calculate() dans la feuille de calcul. Cela va sortir les données correctement, mais ce dont j'ai besoin, c'est d'avoir les formules dans le document.

Voici un petit exemple de formules que j'ai essayé

private byte[] TestingFormula() 
{ 
    using (ExcelPackage pck = new ExcelPackage(_helper.GetTemplateStream("TEST.xlsx"))) 
    { 
     var ws = pck.Workbook.Worksheets[1]; 

     ws.Cells["A4"].Formula = "INDEX($C$1:$D$24;4;2)"; 
     ws.Cells["A6"].Formula = "INDEX(C1:D24;6;2)"; 

     ws.Cells["B26"].Formula = "MATCH($B$12;$C$1:$D$1;0)"; 

     // sum works as expected 
     //ws.Cells["D25"].Formula = "SUM(D2:D24)"; 

     //pck.Workbook.Calculate(); 
     //pck.Workbook.CalcMode = ExcelCalcMode.Automatic; 
     return pck.GetAsByteArray(); 
    } 
} 

Le TEST.xlsx est juste un modèle qui ressemble à ceci

enter image description here

Alors, que suis Je fais mal ici?

+0

Pourquoi vos formules utilisent-elles des points-virgules au lieu de virgules? Je n'ai pas testé, mais je pense que "" INDEX ($ C $ 1: $ D $ 24,4,2) "' fonctionnerait très bien. – reasra

+0

J'ai utilisé des formules existantes que je viens de copier. L'utilisation de virgules à la place du point-virgule a résolu le problème, donc je suppose qu'epplus ne gère pas les points-virgules, juste Excel. – Binke

Répondre

2

Utilisez des virgules au lieu de points-virgules dans vos formules:

ws.Cells["A4"].Formula = "INDEX($C$1:$D$24,4,2)"; 
ws.Cells["A6"].Formula = "INDEX(C1:D24,6,2)"; 

ws.Cells["B26"].Formula = "MATCH($B$12,$C$1:$D$1,0)"; 

Je devine que lorsque vous entrez directement dans Excel des points-virgules, MS fixe la formule à la volée. Le XML actuel nécessite probablement des virgules, mais je ne suis pas sûr.

0

Bonne réponse de reasra (Je ne peux pas encore faire de commentaire). Ceci est documenté sous la rubrique « Certaines erreurs communes » sur cette page:

https://epplus.codeplex.com/wikipage?title=About%20Formula%20calculation&referringTitle=Documentation

  • Ne pas utiliser les noms de fonctions localisées. Seuls les noms anglais (tels que SUM, IF, VLOOKUP, etc.) sont pris en charge.
  • N'utilisez pas de point-virgule comme séparateur entre les arguments de fonction. Seule la virgule est prise en charge.
  • N'ajoutez pas le signe leading = dans votre formule. "= SUM (A1: A2)" est faux ", SUM (A1: A2)" est correct