[英]Converting Multi-Dimensional Array to Single, with nullable Values
我主要使用ExcelDNA / C#/ Excel。 我本質上想做的就是使用以下代碼將多維數組(即一定范圍的單元格)轉換為單維數組:
private static string[] MultiToSingle(object[,] multiArray)
{
List<string> tempList;
string[] returnArray;
tempList = new List<string>();
//Add each element of the multi-dimensional Array to the list
foreach (object oneObj in multiArray)
{
tempList.Add(oneObj.ToString());
}
//Convert the list to a single dimensional array
returnArray = tempList.ToArray();
return returnArray;
}
這很有效,並且在我的項目中多次使用,但是我想添加更多功能。
當我嘗試在包含一個空單元格的范圍內運行此功能時,它會嚴重錯誤,此刻,我只有一個try / catch並帶有一條錯誤消息,通知用戶在所有空單元格中輸入N / A。
我真正想做的是,也許是在此函數中,將任何“空”或任何存儲空單元格的Excel轉換為文本字符串“ N / A”。
也許只是:
tempList.Add(oneObj == null ? "n/a" : oneObj.ToString());
如果需要,我還可以考慮提高效率的方法:
string[] arr = new string[multiArray.Length];
int i = 0;
foreach (object oneObj in multiArray)
{
arr[i++] = oneObj == null ? "n/a" : oneObj.ToString();
}
return arr;
這樣可以減少中間列表和一些后備陣列副本。
如果您找到空值,這可能就是為什么您遇到錯誤,那么Marc的答案是正確的。 但是您可能想在另一個上下文中使用該函數-直接作為Excel-DNA公開的工作表函數。
Excel-DNA將空的Excel單元格作為ExcelDna.Integration.ExcelEmpty類型的對象編組到參數數組中。 因此,如果直接從Excel-DNA作為工作表函數調用代碼,則將從ToString()獲得類型名稱,而不是錯誤。
因此,將返回類型更改為object []的函數(Excel-DNA不會直接注冊您的string []函數)如下所示:
public static object[] MultiToSingle(object[,] multiArray)
{
List<string> tempList;
object[] returnArray;
tempList = new List<string>();
//Add each element of the multi-dimensional Array to the list
foreach (object oneObj in multiArray)
{
tempList.Add(oneObj.ToString());
}
//Convert the list to a single dimensional array
returnArray = tempList.ToArray();
return returnArray;
}
並在直接作為工作表函數調用時在Excel中提供以下輸出:
對於這種情況,您可以在數組項的類型上添加檢查以處理空單元格:
tempList.Add( oneObj is ExcelEmpty ? "!EMPTY" : oneObj.ToString() );
tempList.Add( oneObj.Value == null ? "!EMPTY" : oneObj.ToString() );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.