Как считывать данные из Excel и помещать в массив в asp.net ?

#c# #asp.net #arrays #excel

#c# #asp.net #массивы #excel

Вопрос:

Я новичок в программировании на c # и хотел бы знать, как мы можем считывать данные из ячейки Excel по ячейкам. В приведенном ниже коде я получаю массив данных из столбца A Excel в виде pValue1= a;b;c;d%;e%;f%; Теперь я хочу поместить только значения с% в конце в другой массив, если заголовок столбца A =Идентификатор. Кроме того, я хочу заключить каждый элемент в pValue1 в одинарные кавычки.

Ввод:

ID Имя
a рой
b может
c Jly
d% навигация
e% ноябрь
f% lio

Ожидаемый результат: pValue1= ‘a’;’b’;’c’ pValue3= d%e%f%

          try {
                Utils.ExcelFile excelFile = new Utils.ExcelFile(excelFilename);
                DataTable excelData = excelFile.GetDataFromExcel();

                // Column headers
                param1 = 0 < excelData.Columns.Count ? excelData.Columns[0].ColumnName :string.Empty;
                param2 = 1 < excelData.Columns.Count ? excelData.Columns[1].ColumnName :string.Empty;

                ArrayList pValueArray1 = new ArrayList();
                ArrayList pValueArray2 = new ArrayList();

                if (pValueArray1.Count > 0) pValue1 = string.Join(";", pValueArray1.ToArray())   ";";
                if (pValueArray2.Count > 0) pValue2 = string.Join(";", pValueArray2.ToArray())   ";";
               
            }
 

Ответ №1:

Не уверен, понял ли я вашу проблему. Я предполагаю, что вы уже загрузили excel в DataTable , и теперь вы просто хотите разделить Id столбец -на два отдельных списка. Вы можете использовать LINQ:

 var percentLookup = excelData.AsEnumerable()
    .ToLookup(row => row.Field<string>("Id").EndsWith("%"));
List<string> pValue1List = percentLookup[false]
    .Select(row => row.Field<string>("Id"))
    .ToList();
List<string> pValue2List = percentLookup[true]
    .Select(row => row.Field<string>("Id"))
    .ToList();
 

Поиск содержит две группы: строки, в которых столбец id имеет процент в конце, и остальные. Таким образом, вы можете легко создать два списка с его помощью.

Поскольку вы новичок в программировании на C #, возможно, было бы лучше использовать простой цикл:

 List<string> pValue1List = new List<string>();
List<string> pValue2List = new List<string>();
foreach (DataRow row in excelData.Rows)
{
    string id = row.Field<string>("Id");
    if(id.EndsWith("%"))
    {
        pValue2List.Add(id);
    }
    else
    {
        pValue1List.Add(id);
    }
}
 

Если вам нужно String[] вместо a List<string> использовать ToArray вместо ToList и во втором подходе заполните списки, но используйте т.е. pValue1List.ToArray в конце.

В общем: вы должны прекратить использовать ArrayList, которому 20 лет, и с тех пор он устарел более чем на 10 лет. Используйте строго типизированный List<T> , здесь a List<string> .