Индекс находился за пределами границы массива
Из вышесказанного я хочу получить следующий результат
В таблице у меня есть запись следующим образом
Фермер код FarmDetailsdata FarmerName
1 TestA "Área de Milho":"1","Área de Mandioca":"2","Área de
Feijão":"2","Plantou alogdao no ano?":"Nao"
2 TestB "Área de Milho":"2","Área de Mandioca":"3","Área de
Feijão":"4","Plantou alogdao no ano?":"да"
Я хочу получить нижеприведенный вывод следующим образом
Farmerid NameArea de Milho Area de Mandioca Area de Feijao Plantou alogdao no ano?
1 TestA 1 2 2 Nao
2 Тестб 2 3 4 Да
Мой код aspx выглядит следующим образом
if (filterCriteria == "2" && dataFormat == "3")
{
если (!Directory.Exists(HttpContext.Current.Сервер.MapPath("~/") + "отчеты"))
{
Каталог.CreateDirectory(HttpContext.Current.Сервер.MapPath("~/") + "отчеты");
}
ВАР имя = "FarmerReportsSurveyQuestions" + Датавремя.Сейчас.Метод toString("ыыыы_ММ_ДД__АА") + ".XLSX-файл";
var outputDir = HttpContext.Current.Сервер.MapPath("~") + "\\отчеты\\";
var file = new FileInfo(outputDir + fileName);
пробовать
{
использование (var package = new ExcelPackage(file))
{
ExcelWorksheet worksheet = пакет.Рабочая тетрадь.Worksheets.Add("отчеты фермера/фермы");
рабочий лист.TabColor = Цвет.Зеленый;
рабочий лист.DefaultRowHeight = 12;
рабочий лист.HeaderFooter.Первостатейный.LeftAlignedText = строка.Формат("Generated: {0}", DateTime.Now.ToShortDateString());
DataTable dtFarmerFarmReports = dal.DAL_GetFarmer_FarmReports_All_Forexcel(originname, hdnSeasonalYear.Value.Метод toString());
var othercols = dtFarmerReports.Методом asenumerable().Метода SelectMany(х => У Х.Поле в<строка> У("farm_detailsdata").Split(новая строка[] { ":", "," },
StringSplitOptions.RemoveEmptyEntries).Где((y, i) => i % 2 == 0)).Различны().Выберите(х =&ГТ; новый datacolumn(х, вызова typeof(строка))).ToList(); //добавлено
foreach (DataColumn oc в othercols)
dtFarmerReports.Столбцы.Добавить(oc);
по каждому элементу (объекта datarow Dr в dtFarmerReports.Строк)
{
foreach (DataColumn oc в othercols)
dr.SetField(oc, dr.Field<string>("farm_detailsdata").Расщеплять(',')
.Где(г =&ГТ; г.Содержит(ОС.Имя_столбца)).Select(z => z.Split(':')[1]).FirstOrDefault());
}
dtFarmerReports.Столбцы.Удалить(dtFarmerReports.Столбцы["farm_detailsdata"]);
for (int r = 0; r < dtFarmerReports.Rows.Count; r++)
{
DataRow dr = dtFarmerReports.Ряды[Р];
for (int c = 0; c < dr.таблица.Столбцы.Count; c++)
рабочий лист.Ячейки[r + 2, c + 1].Значение = dr[c];
}
если (dtFarmerReports.Строк.Count > 0)
{
использование (var range = worksheet.Клетки[2, 1, 2, 11])
{
диапазон.Стиль.Шрифт.Жирный = истина;
диапазон.Стиль.Border.Top.Style = ExcelBorderStyle.Тонкий;
диапазон.Стиль.Граница.Правильно.Стиль = ExcelBorderStyle.Тонкий;
диапазон.Стиль.Border.Left.Style = ExcelBorderStyle.Тонкий;
диапазон.Стиль.Граница.Дно.Стиль = ExcelBorderStyle.Тонкий;
диапазон.Стиль.Заполнить.Шаблонтип = ExcelFillStyle.Твердый;
диапазон.Стиль.Шрифт.Цвет.SetColor(Цвет.Черный);
диапазон.Стиль.Заполнить.Фоновый цвет.SetColor(Цвет.Зеленый);
диапазон.AutoFitColumns();
}
рабочий лист.Ячейки["A1:AY1"].Merge = true;
рабочий лист.Ячейки["A1:AY1"].Value = "данные фермера/фермы";
рабочий лист.строка(1).Высота = 35 см;
использование (var range = worksheet.Ячейки[1, 1, 1, 11])
{
диапазон.Стиль.Шрифт.Жирный = истина;
диапазон.Style.Font.Size = 22;
диапазон.Стиль.Border.Top.Style = ExcelBorderStyle.Тонкий;
диапазон.Стиль.Граница.Правильно.Стиль = ExcelBorderStyle.Тонкий;
диапазон.Стиль.Граница.Дно.Стиль = ExcelBorderStyle.Тонкий;
диапазон.Стиль.Border.Left.Style = ExcelBorderStyle.Тонкий;
диапазон.Стиль.Заполнить.Шаблонтип = ExcelFillStyle.Твердый;
диапазон.Стиль.Заполнить.Фоновый цвет.SetColor(Цвет.LightSeaGreen);
диапазон.Стиль.Шрифт.Цвет.SetColor(Цвет.Черный);
диапазон.Стиль.Поле HorizontalAlignment = ExcelHorizontalAlignment.Центр;
диапазон.Стиль.Имеет = ExcelVerticalAlignment.Центр;
диапазон.Стиль.ShrinkToFit = false;
}
рабочий лист.Ячейки[2, 1].Значение = "идентификатор фермера";
рабочий лист.Ячейки[2, 2].Значение = "имя";
рабочий лист.Ячейки[2, 3].Значение = "нет. ФЕРМЕРСКИХ ХОЗЯЙСТВ";
рабочий лист.Ячейки[2, 4].Value = "оценка производства";
рабочий лист.Ячейки[2, 5].Значение = "ферма нет";
рабочий лист.Ячейки[2, 6].значение = "район";
рабочий лист.Ячейки[2, 7].значение = "СУБРАЙОН";
рабочий лист.Ячейки[2, 8].значение = "секция";
рабочий лист.Ячейки[2, 9].значение = "зона";
рабочий лист.Ячейки[2, 10].Value = "полевой персонал";
рабочий лист.Ячейки[2, 11].Value = "сведения о ферме";
for (int j = 0; j < dtFarmerReports.Rows.Count; j++)
{
int j1 = (j + 3);
farmerid = dtFarmerReports.Строки[j]["farmer_id"].Метод toString();
рабочий лист.Ячейки[(j1), 1].Значение = dtFarmerReports.Строки[j]["farmer_id"].Метод toString();
рабочий лист.Ячейки[(j1), 2].Значение = dtFarmerReports.Строки[j]["farmer_name"].Метод toString();
рабочий лист.Ячейки[(j1), 3].Значение = dtFarmerReports.Строки[j]["nooffarms"].Метод toString();
рабочий лист.Ячейки[(j1), 4].Значение = dtFarmerReports.Строки[j]["produtionestimation"].Метод toString();
рабочий лист.Ячейки[(j1), 5].Значение = dtFarmerReports.Строки[j]["farm_no"].Метод toString();
рабочий лист.Ячейки[(j1), 6].значение = dtFarmerReports.Строки[j]["districtname"].Метод toString();
рабочий лист.Ячейки[(j1), 7].значение = dtFarmerReports.Строки[j]["subdistrictname"].Метод toString();
рабочий лист.Ячейки[(j1), 8].значение = dtFarmerReports.Строки[j]["имя раздела"].Метод toString();
рабочий лист.Ячейки[(j1), 9].значение = dtFarmerReports.Строк[Дж]["имя_зоны"].Метод toString();
рабочий лист.Ячейки[(j1),10].Value = dtFarmerReports.Строки[j]["fieldstaffname"].Метод toString();
рабочий лист.Ячейки[(j1),11].Value = dtFarmerReports.Строки[j]["farm_detailsdata"].Метод toString();
}
рабочий лист.Ячейки["A2:AY2"].автофильтр = true;
}
еще
{
рабочий лист.Клетки["A1:I1"].Слияние = true;
рабочий лист.Ячейки["A1:I1"].Value = "нет данных фермера/фермы";
рабочий лист.строка(1).Высота = 35 см;
использование (var range = worksheet.Ячейки[1, 1, 1, 11])
{
диапазон.Стиль.Шрифт.Жирный = истина;
диапазон.Style.Font.Size = 18;
диапазон.Стиль.Border.Top.Style = ExcelBorderStyle.Тонкий;
диапазон.Стиль.Граница.Правильно.Стиль = ExcelBorderStyle.Тонкий;
диапазон.Стиль.Граница.Дно.Стиль = ExcelBorderStyle.Тонкий;
диапазон.Стиль.Border.Left.Style = ExcelBorderStyle.Тонкий;
диапазон.Стиль.Заполнить.Шаблонтип = ExcelFillStyle.Твердый;
диапазон.Стиль.Заполнить.Фоновый цвет.Функции Setcolor(Цвет.Красный);
диапазон.Стиль.Шрифт.Цвет.SetColor(Цвет.Черный);
диапазон.Стиль.Поле HorizontalAlignment = ExcelHorizontalAlignment.Центр;
диапазон.Стиль.Имеет = ExcelVerticalAlignment.Центр;
диапазон.Стиль.ShrinkToFit = false;
}
}
рабочий лист.Ячейки.AutoFitColumns();
пакет.Рабочая тетрадь.Свойства.Название = "Отчеты Фермера";
пакет.Рабочая тетрадь.Свойства.Автор = "Олам";
пакет.Рабочая тетрадь.Свойства.Компания = "Olam";
пакет.Сохранить();
modalPopupExport.Скрыть();
}
Ответ.Четкий();
Ответ.Значение ContentType = Значение ContentType;
Ответ.AppendHeader("Content-Disposition", "attachment; filename=" + file.Name);
Ответ.WriteFile(outputDir + fileName);
Свойство HttpContext.Тока.ApplicationInstance.CompleteRequest();
Ответ.Конец();
}
поймать (исключение бывший)
{
BindDetails();
это.modalPopupExport.Скрыть();
showStatusTrue.Стиль.Добавить("дисплей", "никто");
showStatusTrue.свойство innerHTML = "";
showStatusWarning.Стиль.Добавить("дисплей", "никто");
showStatusWarning.свойство innerHTML = "";
showStatusAlready.Стиль.Добавить("дисплей", "никто");
showStatusAlready.свойство innerHTML = "";
showStatusFalse.Style.Add("display", "block");
showStatusFalse.InnerHtml = "что-то пошло не так при экспорте";
farmerid = "" + farmerid;
Элемента управления scriptmanager.RegisterStartupScript(это.Пейдж, это.Метод gettype(), "ТММ", "myfunction () с;", ложные);
Logger log = новый регистратор();
бревно.WriteToErrorLog("FARMER REPORTS EXCEL", "EX", ex.Message.Метод toString(), "", "");
}
}
Когда я запускаю приведенный выше код показывает ошибку следующим образом
Индекс находился за пределами массива.
Ошибка отображается в следующей строке следующим образом
dr.SetField(oc, dr.Field<string>("farm_detailsdata").Расщеплять(',').Где(y => y.содержит(oc.ColumnName)).Select(z => z.Split(':')[1]).FirstOrDefault());
пожалуйста, помогите мне, в чем ошибка в моем приведенном выше коде строки
Что я уже пробовал:
From the above i want output as follows In table i have record as follows Farmer id FarmerName FarmDetailsdata 1 TestA "Área de Milho":"1","Área de Mandioca":"2","Área de Feijão":"2","Plantou alogdao no ano?":"Nao" 2 TestB "Área de Milho":"2","Área de Mandioca":"3","Área de Feijão":"4","Plantou alogdao no ano?":"Yes" I want to get the below output as follows Farmerid NameArea de Milho Area de Mandioca Area de Feijao Plantou alogdao no ano? 1 TestA 1 2 2 Nao 2 TestB 2 3 4 Yes My aspx code as follows if (filterCriteria == "2" && dataFormat == "3") { if (!Directory.Exists(HttpContext.Current.Server.MapPath("~/") + "reports")) { Directory.CreateDirectory(HttpContext.Current.Server.MapPath("~/") + "reports"); } var fileName = "FarmerReportsSurveyQuestions" + DateTime.Now.ToString("yyyy_MM_dd__hh") + ".xlsx"; var outputDir = HttpContext.Current.Server.MapPath("~") + "\\reports\\"; var file = new FileInfo(outputDir + fileName); try { using (var package = new ExcelPackage(file)) { ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("FARMER/FARM REPORTS"); worksheet.TabColor = Color.Green; worksheet.DefaultRowHeight = 12; worksheet.HeaderFooter.FirstFooter.LeftAlignedText = string.Format("Generated: {0}", DateTime.Now.ToShortDateString()); DataTable dtFarmerFarmReports = dal.DAL_GetFarmer_FarmReports_All_ForExcel(originname, hdnSeasonalYear.Value.ToString()); var othercols = dtFarmerReports.AsEnumerable().SelectMany(x => x.Field<string>("farm_detailsdata").Split(new string[] { ":", "," }, StringSplitOptions.RemoveEmptyEntries).Where((y, i) => i % 2 == 0)).Distinct().Select(x => new DataColumn(x, typeof(string))).ToList(); //added foreach (DataColumn oc in othercols) dtFarmerReports.Columns.Add(oc); foreach (DataRow dr in dtFarmerReports.Rows) { foreach (DataColumn oc in othercols) dr.SetField(oc, dr.Field<string>("farm_detailsdata").Split(',') .Where(y => y.Contains(oc.ColumnName)).Select(z => z.Split(':')[1]).FirstOrDefault()); } dtFarmerReports.Columns.Remove(dtFarmerReports.Columns["farm_detailsdata"]); for (int r = 0; r < dtFarmerReports.Rows.Count; r++) { DataRow dr = dtFarmerReports.Rows[r]; for (int c = 0; c < dr.Table.Columns.Count; c++) worksheet.Cells[r + 2, c + 1].Value = dr[c]; } if (dtFarmerReports.Rows.Count > 0) { using (var range = worksheet.Cells[2, 1, 2, 11]) { range.Style.Font.Bold = true; range.Style.Border.Top.Style = ExcelBorderStyle.Thin; range.Style.Border.Right.Style = ExcelBorderStyle.Thin; range.Style.Border.Left.Style = ExcelBorderStyle.Thin; range.Style.Border.Bottom.Style = ExcelBorderStyle.Thin; range.Style.Fill.PatternType = ExcelFillStyle.Solid; range.Style.Font.Color.SetColor(Color.Black); range.Style.Fill.BackgroundColor.SetColor(Color.Green); range.AutoFitColumns(); } worksheet.Cells["A1:AY1"].Merge = true; worksheet.Cells["A1:AY1"].Value = "FARMER/FARM DATA"; worksheet.Row(1).Height = 35; using (var range = worksheet.Cells[1, 1, 1, 11]) { range.Style.Font.Bold = true; range.Style.Font.Size = 22; range.Style.Border.Top.Style = ExcelBorderStyle.Thin; range.Style.Border.Right.Style = ExcelBorderStyle.Thin; range.Style.Border.Bottom.Style = ExcelBorderStyle.Thin; range.Style.Border.Left.Style = ExcelBorderStyle.Thin; range.Style.Fill.PatternType = ExcelFillStyle.Solid; range.Style.Fill.BackgroundColor.SetColor(Color.LightSeaGreen); range.Style.Font.Color.SetColor(Color.Black); range.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center; range.Style.VerticalAlignment = ExcelVerticalAlignment.Center; range.Style.ShrinkToFit = false; } worksheet.Cells[2, 1].Value = "FARMER ID"; worksheet.Cells[2, 2].Value = "NAME"; worksheet.Cells[2, 3].Value = "NO. OF FARMS"; worksheet.Cells[2, 4].Value = "PRODUCTION ESTIMATION"; worksheet.Cells[2, 5].Value = "FARM NO"; worksheet.Cells[2, 6].Value = "DISTRICT"; worksheet.Cells[2, 7].Value = "SUB DISTRICT"; worksheet.Cells[2, 8].Value = "SECTION"; worksheet.Cells[2, 9].Value = "ZONE"; worksheet.Cells[2, 10].Value = "FIELD STAFF"; worksheet.Cells[2, 11].Value = "FARM DETAILS DATA"; for (int j = 0; j < dtFarmerReports.Rows.Count; j++) { int j1 = (j + 3); farmerid = dtFarmerReports.Rows[j]["farmer_id"].ToString(); worksheet.Cells[(j1), 1].Value = dtFarmerReports.Rows[j]["farmer_id"].ToString(); worksheet.Cells[(j1), 2].Value = dtFarmerReports.Rows[j]["farmer_name"].ToString(); worksheet.Cells[(j1), 3].Value = dtFarmerReports.Rows[j]["nooffarms"].ToString(); worksheet.Cells[(j1), 4].Value = dtFarmerReports.Rows[j]["produtionestimation"].ToString(); worksheet.Cells[(j1), 5].Value = dtFarmerReports.Rows[j]["farm_no"].ToString(); worksheet.Cells[(j1), 6].Value = dtFarmerReports.Rows[j]["districtname"].ToString(); worksheet.Cells[(j1), 7].Value = dtFarmerReports.Rows[j]["subdistrictname"].ToString(); worksheet.Cells[(j1), 8].Value = dtFarmerReports.Rows[j]["sectionname"].ToString(); worksheet.Cells[(j1), 9].Value = dtFarmerReports.Rows[j]["zonename"].ToString(); worksheet.Cells[(j1),10].Value = dtFarmerReports.Rows[j]["fieldstaffname"].ToString(); worksheet.Cells[(j1),11].Value = dtFarmerReports.Rows[j]["farm_detailsdata"].ToString(); } worksheet.Cells["A2:AY2"].AutoFilter = true; } else { worksheet.Cells["A1:I1"].Merge = true; worksheet.Cells["A1:I1"].Value = "NO FARMER/FARM DATA"; worksheet.Row(1).Height = 35; using (var range = worksheet.Cells[1, 1, 1, 11]) { range.Style.Font.Bold = true; range.Style.Font.Size = 18; range.Style.Border.Top.Style = ExcelBorderStyle.Thin; range.Style.Border.Right.Style = ExcelBorderStyle.Thin; range.Style.Border.Bottom.Style = ExcelBorderStyle.Thin; range.Style.Border.Left.Style = ExcelBorderStyle.Thin; range.Style.Fill.PatternType = ExcelFillStyle.Solid; range.Style.Fill.BackgroundColor.SetColor(Color.Red); range.Style.Font.Color.SetColor(Color.Black); range.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center; range.Style.VerticalAlignment = ExcelVerticalAlignment.Center; range.Style.ShrinkToFit = false; } } worksheet.Cells.AutoFitColumns(); package.Workbook.Properties.Title = "Farmer Reports"; package.Workbook.Properties.Author = "Olam"; package.Workbook.Properties.Company = "Olam"; package.Save(); modalPopupExport.Hide(); } Response.Clear(); Response.ContentType = ContentType; Response.AppendHeader("Content-Disposition", "attachment; filename=" + file.Name); Response.WriteFile(outputDir + fileName); HttpContext.Current.ApplicationInstance.CompleteRequest(); Response.End(); } catch (Exception ex) { BindDetails(); this.modalPopupExport.Hide(); showStatusTrue.Style.Add("display", "none"); showStatusTrue.InnerHtml = ""; showStatusWarning.Style.Add("display", "none"); showStatusWarning.InnerHtml = ""; showStatusAlready.Style.Add("display", "none"); showStatusAlready.InnerHtml = ""; showStatusFalse.Style.Add("display", "block"); showStatusFalse.InnerHtml = "Something went wrong while export"; farmerid = "" + farmerid; ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "tmp", "myFunction();", false); Logger log = new Logger(); log.WriteToErrorLog("FARMER REPORTS EXCEL", "EX", ex.Message.ToString(), "", ""); } } When i run the above code shows error as follows Index was outside the bounds of the array. The error shows in below line as follows dr.SetField(oc, dr.Field<string>("farm_detailsdata").Split(',').Where(y => y.Contains(oc.ColumnName)).Select(z => z.Split(':')[1]).FirstOrDefault()); please help me what is the mistake in my above line code
Richard MacCutchan
Пожалуйста, отредактируйте свой вопрос и удалите код, не связанный с проблемой, а также покажите, где именно возникла проблема.
Проще говоря, вы пытаетесь получить доступ к элементу массива со значением индекса, которое меньше нуля или больше предела массива.