2016-09-09 31 views
-1

我使用此代碼使用EPPlus電子表格填充單元格:爲什麼我會用這段代碼(EPPlus)隱式地將類型'void'轉換爲'object'?

using (var footerMonth1Cell = prodUsageWorksheet.Cells[columnFooterRow, MONTH1_COL]) 
{ 
    footerMonth1Cell.Value = monthsTruncatedYears[0]; 
    footerMonth1Cell.Style.Font.Size = DATA_FONT_SIZE; 
    footerMonth1Cell.Style.HorizontalAlignment = ExcelHorizontalAlignment.Right; 
} 

這是工作的罰款,我想,但用戶抱怨說,它正在生產的細胞「綠三角」。 「monthsTruncatedYears」是字符串的通用列表。

所以我加入這個輔助函數:

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; 
} 

...這是我從here了,然後試圖重構原始代碼來調用輔助函數,像這樣:

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; 
} 

然而,它不會編譯,告訴我,「不能隱式地將類型'void'轉換爲'object'

由於th第二個參數傳遞給SetValueIntOrStr(),即「value」,是object類型的,我認爲這是問題。那麼爲什麼編譯器顯然將monthsTruncatedYears [0]視爲void?在遺留代碼中,我將它賦值爲單元格的值,並且當時它並不是真的,所以......?!?

我試圖鑄造第二對Arg的對象,像這樣:

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

...但不會計算,或者說,與 「無效的表達術語 '對象'」

...這種類似的嘗試:

footerMonth1Cell.Value = ReportRunnerConstsAndUtils.SetValueDoubleOrIntOrStr(footerMonth1Cell, monthsTruncatedYears[0] as object); 

...引起, 「無法隱式轉換類型 '無效' 到 '對象'」

請注意,輔助方法實際上在借用代碼中被錯誤命名;而不是「SetValueIntOrStr」應該是「SetValueDoubleOrIntOrStr」

回答

1

的問題是線

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

SetValueIntOrStr不返回任何值(無效),並且因此不能被用於分配一個值到footerMonth1Cell.Value

因爲Value屬性裏面的功能已經改變了這將是有效的代碼:

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

肯定/我應該意識到這點。 –

相關問題