【问题标题】:C# Interop write array of arrays to worksheetC# Interop 将数组数组写入工作表
【发布时间】:2017-08-22 12:49:40
【问题描述】:

我正在尝试将二维数组写入工作表,但出现以下错误:

指定的数组不是预期的类型。

这是我的代码:

            string[][] allEvars = new string[evars.Count][];

            for (var i = 0; i < evars.Count; i++) {
                var evarsList = new List<string>();
                evarsList.Add(evars[i].id.Value);
                evarsList.Add(evars[i].name.Value);
                if (evars[i].enabled != null)
                    evarsList.Add(evars[i].enabled.Value.ToString());
                else
                    evarsList.Add("");
                if (evars[i].description != null)
                    evarsList.Add(evars[i].description.Value);
                else
                    evarsList.Add("");
                string[] evarsArray = evarsList.ToArray();
                //var range = (Excel.Range)wsEvars.Range[wsEvars.Cells[i + 5, 2], wsEvars.Cells[i + 5, evarsArray.Length]];
                //range.Value = evarsArray;
                allEvars[i] = evarsList.ToArray();
            }
            var range = (Excel.Range)wsEvars.Range[wsEvars.Cells[5, 2], wsEvars.Cells[allEvars.Length, 3]];
            range.Value2 = allEvars; // This is the line with the exception

我的代码中的 2 行注释将数组一一添加到工作表中,我试图一次将它们全部添加以节省一些时间。

【问题讨论】:

    标签: c# arrays excel interop


    【解决方案1】:

    您可以将数组数组转换为二维数组。从此使用 Jon Skeet 方法 answer

    static T[,] CreateRectangularArray<T>(T[][] arrays)
        {
            // TODO: Validation and special-casing for arrays.Count == 0
            int minorLength = arrays[0].Length;
            T[,] ret = new T[arrays.Length, minorLength];
            for (int i = 0; i < arrays.Length; i++)
            {
                var array = arrays[i];
                if (array.Length != minorLength)
                {
                    throw new ArgumentException
                        ("All arrays must be the same length");
                }
                for (int j = 0; j < minorLength; j++)
                {
                    ret[i, j] = array[j];
                }
            }
            return ret;
        }
    

    在您的代码中:

            string[][] allEvars = new string[evars.Count][];
    
            for (var i = 0; i < evars.Count; i++) {
                var evarsList = new List<string>();
                evarsList.Add(evars[i].id.Value);
                evarsList.Add(evars[i].name.Value);
                if (evars[i].enabled != null)
                    evarsList.Add(evars[i].enabled.Value.ToString());
                else
                    evarsList.Add("");
                if (evars[i].description != null)
                    evarsList.Add(evars[i].description.Value);
                else
                    evarsList.Add("");
                string[] evarsArray = evarsList.ToArray();
                //var range = (Excel.Range)wsEvars.Range[wsEvars.Cells[i + 5, 2], wsEvars.Cells[i + 5, evarsArray.Length]];
                //range.Value = evarsArray;
                allEvars[i] = evarsList.ToArray();
            }
            var range = (Excel.Range)wsEvars.Range[wsEvars.Cells[5, 2], wsEvars.Cells[allEvars.Length, 3]];
            string[,] newallEvars = CreateRectangularArray<string>(allEvars); //added row
            range.Value2 = newallEvars; // changed row
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-29
      • 1970-01-01
      • 2021-04-04
      相关资源
      最近更新 更多