J'ai un fichier Excel avec une table tblPhoneCode
et avec deux colonnes Country
et Code
, et j'ai une cellule B1 avec liste de validation de données pointant vers la colonne Country
EPPlus renvoie #VALUE! au lieu du contenu cellulaire lorsqu'il est utilisé avec la Formule OFFSET, INDIRECT & MATCH
et une cellule B2, il affiche essentiellement la Code
pour le Country
sélectionné.
cellule B2 utilise la formule suivante
OFFSET(INDIRECT("tblPhoneCode[#Headers]"),MATCH(B1,INDIRECT("tblPhoneCode[Country]"),0),1,1,1)
Tout dans Excel fonctionne comme il se doit, mais la question est quand je lis la valeur de B2 en utilisant EPPlus en C# Je reçois #VALUE!
au lieu du téléphone réel Code
. J'ai essayé .Calculate()
à partir du classeur, feuille de calcul, à la cellule et essayé d'accéder à la valeur est toujours la même. J'ai attaché l'enregistreur et il apparaît vide et il n'y a pas d'erreur connecté.
code C#
static void Main(string[] args)
{
var excelFile = new FileInfo(@"C:\Users\Ash\Desktop\Epplus.xlsx");
using (var package = new ExcelPackage(excelFile))
{
// Output from the logger will be written to the following file
var logfile = new FileInfo(@"C:\Users\Ash\Desktop\EpplusLogFile.txt");
// Attach the logger before the calculation is performed.
package.Workbook.FormulaParserManager.AttachLogger(logfile);
// Calculate - can also be executed on sheet- or range level.
package.Workbook.Calculate();
Debug.Print(String.Format("Country: \t{0}", package.Workbook.Worksheets[1].Cells["B1"].Value));
Debug.Print(String.Format("Phone Code:\t{0}", package.Workbook.Worksheets[1].Cells["B2"].Value));
// The following method removes any logger attached to the workbook.
package.Workbook.FormulaParserManager.DetachLogger();
}
}
Sortie:
Country: US
Phone Code: #VALUE!
Tout est beaucoup apprécié l'aide ou un aperçu, j'utilise MS Excel 2010, .NET 4.0, EPPlus 4.1.0 et Windows 10 64bit
try package.Workbook.Worksheets [1] .Cells ["B2"]. Value.ToString(); –
J'ai essayé avec et sans '.ToString()' même résultat, voir Sortie. J'ai même essayé '.Text' – Ash
Je vois, pourquoi ne pas utiliser le dictionnaire en C# au lieu de lire la valeur (Country Code) il suffit de lire la clé (Country Name) et obtenir la valeur du dictionnaire –