C# Interop 将数组的数组写入工作表
C# Interop write array of arrays to worksheet
我正在尝试将二维数组写入工作表,但出现以下错误:
Specified array was not of the expected type.
这是我的代码:
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 行注释将数组一个一个地添加到工作表中,我试图一次添加它们以节省一些时间。
您可以将数组的数组转换为二维数组。从这里使用 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
我正在尝试将二维数组写入工作表,但出现以下错误:
Specified array was not of the expected type.
这是我的代码:
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 行注释将数组一个一个地添加到工作表中,我试图一次添加它们以节省一些时间。
您可以将数组的数组转换为二维数组。从这里使用 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