j'utilisais ce code pour remplir une cellule dans une feuille de calcul en utilisant EPPlus:Pourquoi je reçois, "Impossible de convertir implicitement le type 'void' en 'objet'" avec ce code (EPPlus)?
using (var footerMonth1Cell = prodUsageWorksheet.Cells[columnFooterRow, MONTH1_COL])
{
footerMonth1Cell.Value = monthsTruncatedYears[0];
footerMonth1Cell.Style.Font.Size = DATA_FONT_SIZE;
footerMonth1Cell.Style.HorizontalAlignment = ExcelHorizontalAlignment.Right;
}
Il fonctionnait très bien, je pensais, mais un utilisateur se plaint qu'il produisait des « triangles verts » dans les cellules. "monthsTruncatedYears" est une liste générique de chaîne.
J'ajouté cette fonction d'assistance:
public static void SetValueIntOrStr(this ExcelRangeBase range, object value)
{
string strVal = value.ToString();
if (!String.IsNullOrEmpty(strVal))
{
double dVal;
int iVal;
if (double.TryParse(strVal, out dVal))
range.Value = dVal;
else if (Int32.TryParse(strVal, out iVal))
range.Value = iVal;
else
range.Value = strVal;
}
else
range.Value = null;
}
... que je suis de here, puis a essayé de factoriser le code d'origine pour appeler cette fonction d'aide comme ceci:
using (var footerMonth1Cell = prodUsageWorksheet.Cells[columnFooterRow, MONTH1_COL])
{
footerMonth1Cell.Value = SetValueIntOrStr(footerMonth1Cell, monthsTruncatedYears[0]);
footerMonth1Cell.Style.Font.Size = DATA_FONT_SIZE;
footerMonth1Cell.Style.HorizontalAlignment = ExcelHorizontalAlignment.Right;
}
Toutefois, il ne compilera pas, en me disant, "Impossible de convertir le type 'void' en 'objet'"
Depuis Le second argument passé à SetValueIntOrStr(), à savoir "value", est de type object, je suppose que c'est le problème. Alors pourquoi le compilateur considère-t-il moisTruncatedYears [0] comme étant nul? Dans le code hérité, je l'ai assigné comme valeur à la cellule, et il n'était pas vide à ce moment-là, alors ...?!?
J'ai essayé couler la deuxième arg à l'objet comme ceci:
footerMonth1Cell.Value = ReportRunnerConstsAndUtils.SetValueIntOrStr(footerMonth1Cell, object(monthsTruncatedYears[0]));
... mais cela ne calcule pas, non plus, avec "terme d'expression non valide 'objet'"
... et cette tentative similaire:
footerMonth1Cell.Value = ReportRunnerConstsAndUtils.SetValueDoubleOrIntOrStr(footerMonth1Cell, monthsTruncatedYears[0] as object);
... Repère, "Impossible de convertir implicitement le type 'vide' à« objet"
Notez que la méthode auxiliaire est mal nommée dans le code emprunté; au lieu de « SetValueIntOrStr » il devrait être « SetValueDoubleOrIntOrStr »
sûr/je aurais dû réaliser que. –