2016-09-09 1 views
-1

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 »

Répondre

1

Le problème est la ligne

footerMonth1Cell.Value = SetValueIntOrStr(footerMonth1Cell, monthsTruncatedYears[0]); 

SetValueIntOrStr ne retourne pas de valeur (vide) et ne peut donc pas être utilisé pour attribuer une valeur à la footerMonth1Cell.Value.

Ce serait un code valide parce que la propriété de valeur est déjà changé dans la fonction:

SetValueIntOrStr(footerMonth1Cell, monthsTruncatedYears[0]); 
+0

sûr/je aurais dû réaliser que. –