#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>
.