簡體   English   中英

將多維數組轉換為具有可空值的單個數組

[英]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中提供以下輸出: Excel-DNA數組功能

對於這種情況,您可以在數組項的類型上添加檢查以處理空單元格:

 tempList.Add( oneObj is ExcelEmpty ? "!EMPTY" : oneObj.ToString() ); 
tempList.Add( oneObj.Value == null ? "!EMPTY" : oneObj.ToString() ); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM