Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从表中查找值并用数据填充的正确方法_C#_Excel_Data Structures_Vlookup - Fatal编程技术网

C# 从表中查找值并用数据填充的正确方法

C# 从表中查找值并用数据填充的正确方法,c#,excel,data-structures,vlookup,C#,Excel,Data Structures,Vlookup,我目前的项目基本上是将excel电子表格转换为windows应用程序。我在工作表的某一部分使用了表格和vlookups。假设该表如下所示(仅在每个季度底部添加一行时与此完全相同): 我想模仿C#中的vlookups,我可以想出几种不同的方法,但我正在寻找“最佳”方法。我所说的“最佳”,是指最容易编写代码和最易于维护,我不是指速度,如果它能在10秒内工作就足够了。这发生在一个方法中,该方法将区域名称和Yr/Qrt作为字符串传入。使用这些,我应该使用什么样的数据结构来存储表数据,如何用最少的代码来

我目前的项目基本上是将excel电子表格转换为windows应用程序。我在工作表的某一部分使用了表格和vlookups。假设该表如下所示(仅在每个季度底部添加一行时与此完全相同):

我想模仿C#中的vlookups,我可以想出几种不同的方法,但我正在寻找“最佳”方法。我所说的“最佳”,是指最容易编写代码和最易于维护,我不是指速度,如果它能在10秒内工作就足够了。这发生在一个方法中,该方法将区域名称和Yr/Qrt作为字符串传入。使用这些,我应该使用什么样的数据结构来存储表数据,如何用最少的代码来实现

编辑

我现在已经收到了实际的excel文件,我将从中提取这些数据。关于如何仅获取“yearQtr”字段和带有C#的HRTC字段的任何建议,将不胜感激

编辑


刚刚发现运行此应用程序的计算机将没有excel。因此,在将上面显示的文件读入应用程序之前,必须将其更改为另一种格式(这将通过手动将文件从excel保存为csv或xml或任何格式来处理。因此,我想我的问题是如何从csv或xml中获取上述数据您可以这样做:

public class MyClass
{
    public List<string> columns;
}
公共类MyClass
{
公共列表列;
}
然后在表单中,您可以按如下方式进行查找:

List<MyClass> myValues;

public List<MyClass> LookUp(string value, int columnIndex)
{
    return this.myValues.Where(
                     input => input.columns[columnIndex] == value
                              ).ToList();     
}
列出myvalue;
公共列表查找(字符串值,int columnIndex)
{
返回this.myValues.Where(
input=>input.columns[columnIndex]==值
).ToList();
}

我目前正在使用此体系结构解决方案来满足我的数据需求。每次需要时,我都会创建一个新表(如我在问题中所说,速度无关紧要)。该表仅针对每个表的特定区域。正如您所知,我还没有找到Excel数据提取部分

class Table
    {
        Dictionary<String, double> _regionTimeValues;
        String _region;

        public Table(String region)
        {
            _regionTimeValues = new Dictionary<string, double>();
            _region = region;
            suckInValues();
        }

        private void suckInValues()
        {
            //Go find the File, get the appropriate Values
            //for each value found
        }


        internal double locateRelevantValue(string yearQuarter)
        {
            double locatedValue = 0.0;
            _regionTimeValues.TryGetValue(yearQuarter,out locatedValue);
            return locatedValue;

        }
    }
类表
{
字典_regionTimeValues;
弦区;
公共表(字符串区域)
{
_regionTimeValues=新字典();
_区域=区域;
吸吮();
}
私人无效票据()
{
//找到文件,获取适当的值
//对于找到的每个值
}
内部双LocaterElevationValue(字符串yearQuarter)
{
双定位值=0.0;
_regionTimeValues.TryGetValue(yearQuarter,OutLocatedValue);
返回locatedValue;
}
}

您可以为每一行设置一个
列表
,并将它们存储在由Yr/Qrt字符串键入的
字典中。然后您可以查找特定Yr/Qrt的
列表
,并在
列表
中使用索引来获得所需的列。@HosseinNarimaniRad我可以,但我想避免人们关注改进my解决方法。我的代码可以工作,但我认为这不是构建问题的最佳方法。这是否需要是动态的?例如,是否总是只有4列?或者这是否可以扩展/减少列数。@Derek它需要在两个方向上都是动态的。您是否也需要从Excel中提取数据,或者您已经完成了吗帽子?再详细介绍一下你已经做过的事情会很有用的。