您可以在 C# 中根据 Excel 文件中的行动态创建变量吗?
Can you dynamically create variables based on rows in an Excel file in C#?
我正在尝试制作一个从 excel 文件获取坐标的 C# 程序,因为每一列分别是 x、y、z 和 r,每一行都是不同的点。我希望能够创建格式为 point0、point1 等的变量,具体取决于行数。
截至目前,我正在将每个单元格读入一个数组,然后从该数组手动创建点。在这种情况下,有 4 行和 4 个点(点 0 到 3)。这目前有效,但我不得不想象有一种更简单的方法可以做到这一点,或者至少有更动态的方法。 4 分不是什么大问题,但可以有更多。
int rows = 4;
for(int i = 0; i < 4; i++)
{
for(int j = 0; j < rows; j++)
{
points[i,j] = excel.ReadCell(i, j);
}
}
for(int i = 0; i < 4; i++)
{
point0[0, i] = points[0, i];
}
for (int i = 0; i < 4; i++)
{
point1[1, i] = points[1, i];
}
for (int i = 0; i < 4; i++)
{
point2[2, i] = points[2, i];
}
for (int i = 0; i < 4; i++)
{
point3[3, i] = points[3, i];
}
即使压缩手动创建点的循环集也会节省时间,我只是不确定是否有办法说
for(int i = 0; i < rows; i++)
{
for(int j = 0; j < cols; j++)
{
point+"i"[i,j] = points[i,j]
}
}
其中第 i 次迭代连接到变量名称。
任何帮助将不胜感激,我愿意接受所有建议(如果你不知道的话,我是 C# 的新手)
我会定义一个 class 四点组合的含义。不是基于它们存储的行或列,而是它们实际代表的内容。
public class Shape
{
public int Start { get; set; }
public int End { get; set; }
public int Mean { get; set; }
public int Median { get; set; }
}
然后,当您遍历每一行时,您可以同时创建和添加所有四个点。像这样的东西。
public 列出 GetShapesFromExcel()
{
var list = new List();
int StartColumn = 'x';
int EndColumn = 'y';
int MeanColumn = 'z';
int MedianColumn = 'r';
foreach (var row in workSheet)
{
var shape = new Shape()
{
Start = excel.ReadCell(row, StartColumn);
End = excel.ReadCell(row, EndColumn);
Mean = excel.ReadCell(row, MeanColumn);
Median = excel.ReadCell(row, MedianColumn);
};
}
return list;
}
我在黑暗中对你的数据实际代表的内容进行了疯狂的尝试,但我会花时间继续并将其旋转成一个真实的对象,这样就更容易像你一样推理'重新编写代码。
像“I”和“J”这样的变量在这种情况下没有节省足够的时间。
最后的建议是继续检查包 EPPlus。该包能够将行转换为结构化 classes
查看此内容以开始使用。
我正在尝试制作一个从 excel 文件获取坐标的 C# 程序,因为每一列分别是 x、y、z 和 r,每一行都是不同的点。我希望能够创建格式为 point0、point1 等的变量,具体取决于行数。
截至目前,我正在将每个单元格读入一个数组,然后从该数组手动创建点。在这种情况下,有 4 行和 4 个点(点 0 到 3)。这目前有效,但我不得不想象有一种更简单的方法可以做到这一点,或者至少有更动态的方法。 4 分不是什么大问题,但可以有更多。
int rows = 4;
for(int i = 0; i < 4; i++)
{
for(int j = 0; j < rows; j++)
{
points[i,j] = excel.ReadCell(i, j);
}
}
for(int i = 0; i < 4; i++)
{
point0[0, i] = points[0, i];
}
for (int i = 0; i < 4; i++)
{
point1[1, i] = points[1, i];
}
for (int i = 0; i < 4; i++)
{
point2[2, i] = points[2, i];
}
for (int i = 0; i < 4; i++)
{
point3[3, i] = points[3, i];
}
即使压缩手动创建点的循环集也会节省时间,我只是不确定是否有办法说
for(int i = 0; i < rows; i++)
{
for(int j = 0; j < cols; j++)
{
point+"i"[i,j] = points[i,j]
}
}
其中第 i 次迭代连接到变量名称。
任何帮助将不胜感激,我愿意接受所有建议(如果你不知道的话,我是 C# 的新手)
我会定义一个 class 四点组合的含义。不是基于它们存储的行或列,而是它们实际代表的内容。
public class Shape
{
public int Start { get; set; }
public int End { get; set; }
public int Mean { get; set; }
public int Median { get; set; }
}
然后,当您遍历每一行时,您可以同时创建和添加所有四个点。像这样的东西。
public 列出 GetShapesFromExcel() { var list = new List();
int StartColumn = 'x';
int EndColumn = 'y';
int MeanColumn = 'z';
int MedianColumn = 'r';
foreach (var row in workSheet)
{
var shape = new Shape()
{
Start = excel.ReadCell(row, StartColumn);
End = excel.ReadCell(row, EndColumn);
Mean = excel.ReadCell(row, MeanColumn);
Median = excel.ReadCell(row, MedianColumn);
};
}
return list;
}
我在黑暗中对你的数据实际代表的内容进行了疯狂的尝试,但我会花时间继续并将其旋转成一个真实的对象,这样就更容易像你一样推理'重新编写代码。
像“I”和“J”这样的变量在这种情况下没有节省足够的时间。
最后的建议是继续检查包 EPPlus。该包能够将行转换为结构化 classes
查看此内容以开始使用。