public static _Workbook CriarAbaResumo(_Workbook workbook, IList <SerieHistoricaChuvas> serieHistorica, EstacaoData estacao) { GC.Collect(); _Worksheet worksheet = workbook.Worksheets[4]; SerieHistoricaChuvas linhaEstacao = new SerieHistoricaChuvas(); DateTime dataInicio = estacao.Inicio.HasValue ? estacao.Inicio.Value : serieHistorica.OrderBy(c => c.Data).First().Data; DateTime dataFim = estacao.Fim.HasValue ? estacao.Fim.Value : serieHistorica.OrderByDescending(c => c.Data).First().Data; DateTime dataIt = new DateTime(dataInicio.Year, 1, 1); long yearsQuantity = dataFim.Year - dataInicio.Year + 1; //Adiciona ano final object[,] dados = new object[yearsQuantity, 28]; int i = 0; while (dataIt <= dataFim)//Cria todas as linhas até a data fim. { dados[i, 0] = dataIt.Date.Year; for (int j = 1; j <= 12; j++) { //Tenta buscar dados consistidos, senão busca os dados Brutos linhaEstacao = serieHistorica.FirstOrDefault(c => c.Data == dataIt && c.NivelConsistencia == "2"); if (linhaEstacao == null) { linhaEstacao = serieHistorica.FirstOrDefault(c => c.Data == dataIt && c.NivelConsistencia == "1"); } if (linhaEstacao == null) { dados[i, 14] = "a"; dados[i, j + 14] = "i"; } else { dados[i, j] = linhaEstacao.Total; dados[i, j + 14] = string.IsNullOrWhiteSpace(linhaEstacao.TotalStatus) ? "b" : linhaEstacao.TotalStatus; dados[i, 14] = linhaEstacao.NivelConsistencia != "2" ? "a" : string.Empty; dados[i, 13] = linhaEstacao.TotalAnual; dados[i, 27] = linhaEstacao.TotalAnualStatus; } dataIt = dataIt.AddMonths(1); } i++; } Range range = worksheet.Cells[3, 2]; range = range.Resize[yearsQuantity, 28]; range.Value = dados; Range range2 = worksheet.Cells[3, 2]; range = range.Resize[yearsQuantity, 14]; range.Cells.Borders.LineStyle = XlLineStyle.xlContinuous; return(workbook); }
public static _Workbook CriarAbaResumoDiasFalha(_Workbook workbook, IList <SerieHistoricaChuvas> serieHistorica, EstacaoData estacao) { GC.Collect(); _Worksheet worksheet = workbook.Worksheets[7]; DateTime dataInicio = estacao.Inicio.HasValue ? estacao.Inicio.Value : serieHistorica.OrderBy(c => c.Data).First().Data; DateTime dataIt = new DateTime(dataInicio.Year, 1, 1); DateTime dataFim = estacao.Fim.HasValue ? estacao.Fim.Value : serieHistorica.OrderByDescending(c => c.Data).First().Data; SerieHistoricaChuvas linhaEstacao = new SerieHistoricaChuvas(); int totalAnos = dataFim.Year - dataIt.Year; // Dias no mes mais linha referente ao ano. int somatorioDias; object[,] dados = new object[totalAnos + 2, 27]; int totalLinhas = totalAnos + 2; for (int linha = 0; linha < totalLinhas - 1; linha++) { somatorioDias = 0; for (int coluna = 0; coluna < 14; coluna++) { //Somatorio Total if (coluna == 13) { dados[linha, coluna] = somatorioDias; } else { int diasMes = DateTime.DaysInMonth(dataIt.Year, dataIt.Month); linhaEstacao = serieHistorica.FirstOrDefault(c => c.Data == dataIt && c.NivelConsistencia == "2"); if (linhaEstacao == null) { linhaEstacao = serieHistorica.FirstOrDefault(c => c.Data == dataIt); } if (coluna == 0) { dados[linha, coluna] = dataIt.Year; } else if (linhaEstacao == null) { dados[linha, coluna] = diasMes; dados[linha, coluna + 13] = "i"; } else { int diasFalha = linhaEstacao.StatusChuvasArray.Where(c => c == "0").Count(); int diasChuva = linhaEstacao.StatusChuvasArray.Where(c => c == "1").Count(); if (diasMes == diasChuva) { dados[linha, coluna] = 0; } else if (diasMes == diasFalha) { dados[linha, coluna] = diasFalha; dados[linha, coluna + 13] = "i"; somatorioDias += diasFalha; } else if (diasMes != diasFalha) { if (diasMes > diasFalha) { dados[linha, coluna] = diasMes - diasChuva; dados[linha, coluna + 13] = "a"; somatorioDias += diasMes - diasChuva; } else { somatorioDias += diasMes; dados[linha, coluna] = diasMes; dados[linha, coluna + 13] = "i"; } } } if (coluna != 0) { dataIt = dataIt.AddMonths(1); } } } } dados[totalLinhas - 1, 0] = "Médias"; for (int linhaMedia = 1; linhaMedia <= 13; linhaMedia++) { int valor = 0; int quantidadeValores = 0; double somatorio = 0.0; double media = 0.0; for (int colunaSomatorio = 0; colunaSomatorio < totalLinhas - 1; colunaSomatorio++) { valor = !(dados[colunaSomatorio, linhaMedia] == string.Empty) ? Convert.ToInt32(dados[colunaSomatorio, linhaMedia]) : 0; somatorio += valor; if (valor != 0) { quantidadeValores++; } } media = somatorio / (dataFim.Year - dataInicio.Year + 1); dados[totalLinhas - 1, linhaMedia] = media; } //Imprime os dados Range range = worksheet.Cells[3, 2]; range = range.Resize[totalLinhas, 27]; range.Value = dados; range = worksheet.Cells[3, 2]; range = range.Resize[totalLinhas, 14]; range.Cells.Borders.LineStyle = XlLineStyle.xlContinuous; return(workbook); }
public static _Workbook CriarAbaResumoDia(_Workbook workbook, IList <SerieHistoricaChuvas> serieHistorica, EstacaoData estacao) { GC.Collect(); _Worksheet worksheet = workbook.Worksheets[5]; DateTime dataInicio = estacao.Inicio.HasValue ? estacao.Inicio.Value : serieHistorica.OrderBy(c => c.Data).First().Data; DateTime dataIt = new DateTime(dataInicio.Year, 1, 1); DateTime dataFim = estacao.Fim.HasValue ? estacao.Fim.Value : serieHistorica.OrderByDescending(c => c.Data).First().Data; int linhasRange = 32; int anoIteracao = 0; int linhaInicio = 3; SerieHistoricaChuvas linhaEstacao = new SerieHistoricaChuvas(); while (dataIt <= dataFim)//Cria todas as linhas até a data fim. { object[,] dados = new object[32, 25]; for (int i = 0; i <= 12; i++) //iteração por mes { var diasNoMes = DateTime.DaysInMonth(dataIt.Year, dataIt.Month); // Dias no mes mais linha referente ao ano. linhaEstacao = serieHistorica.FirstOrDefault(c => c.Data == dataIt && c.NivelConsistencia == "2"); if (linhaEstacao == null) { linhaEstacao = serieHistorica.FirstOrDefault(c => c.Data == dataIt && c.NivelConsistencia == "1"); } //preenche a coluna for (int index = 0; index <= 31; index++) // iteracao por dia { if (i == 0 && index == 0) //Escreve o Ano { dados[index, i] = dataIt.Year; } if (i != 0 && index == 0) //Escreve o "-" { dados[index, i] = "-"; } if (i == 0 && index != 0) //Escreve o dia do mes { dados[index, i] = index; } if (i != 0 && index != 0) // Escreve dados da chuva para o dia { if (linhaEstacao == null) // nao existe dados para este mes { dados[index, i + 12] = "i"; } else if (string.IsNullOrEmpty(linhaEstacao.ChuvasArray[index]) && index > diasNoMes) { dados[index, i] = "-"; } else if (string.IsNullOrEmpty(linhaEstacao.ChuvasArray[index])) { dados[index, i + 12] = "b"; } else { dados[index, i] = linhaEstacao.ChuvasArray[index]; } } } if (i != 0) { dataIt = dataIt.AddMonths(1); } } linhaInicio = 3 + (linhasRange * anoIteracao); //Imprime os dados Range range = worksheet.Cells[linhaInicio, 2]; range = range.Resize[linhasRange, 25]; range.Value = dados; //Desenha as linhas de borda range = range.Resize[linhasRange, 13]; range.Cells.Borders.LineStyle = XlLineStyle.xlContinuous; anoIteracao++; } return(workbook); }