public ActionResult Upload(HttpPostedFileBase upload, HttpPostedFileBase upload2, DateTime Date) { int progress = 0; double pro100 = 0; int procount = 0; if (upload != null) { HttpCookie cookie = new HttpCookie("My localhost cookie"); //найдем старые данные за этот месяц и заменим их не щадя List <Musor> dbMusor = new List <Musor>(); try { dbMusor = db.Musors.Where(x => x.Date.Year == Date.Year && x.Date.Month == Date.Month).ToList(); } catch { } pro100 = dbMusor.Count; foreach (Musor S in dbMusor) { try { db.Musors.Remove(S); db.SaveChanges(); procount++; progress = Convert.ToInt16(procount / pro100 * 100); if (procount > pro100) { procount = Convert.ToInt32(pro100); } ProgressHub.SendMessage("Удаляем старые данные...", progress); } catch (Exception e) { Console.WriteLine(e.Message); } } Excel.Application ApExcel = new Excel.Application(); Excel.Workbooks WB = null; WB = ApExcel.Workbooks; Excel.Workbook WbExcel = ApExcel.Workbooks.Add(System.Reflection.Missing.Value); for (int h = 1; h <= 31; h++) { ApExcel.Worksheets.Add(Type.Missing);//Добавляем лист Excel.Worksheet WS = WbExcel.Sheets[1]; WS.Name = h.ToString() + ".01.2019"; Excel.Range range; //рэндж ApExcel.Visible = false; //невидимо ApExcel.ScreenUpdating = false; //и не обновляемо //call this method inside your working action ProgressHub.SendMessage("Инициализация и подготовка...", 0); // получаем имя файла string fileName = Path.GetFileName(upload.FileName); string fileName2 = Path.GetFileName(upload2.FileName); // сохраняем файл в папку Files в проекте if (Directory.Exists(Server.MapPath("~/Files/")) == false) { Directory.CreateDirectory(Server.MapPath("~/Files/")); } upload.SaveAs(Server.MapPath("~/Files/" + fileName)); upload2.SaveAs(Server.MapPath("~/Files/" + fileName2)); //обрабатываем файл после загрузки //Загружаем файл ТБО string[] Names2 = new string[] { "Государственный регистрационный знак", "Итого принято ТКО за смену, кг", "Итого принято ТКО за смену, куб.м." }; string Error2 = ""; List <List <string> > excel2 = ExcelSVNUpload.IMPORT(Server.MapPath("~/Files/" + fileName2), Names2, out Error2, h.ToString()); //Загружаем файл наших выездов string[] Names = new string[] { "Дата", "Автомобиль", "Улица", "Номер дома", "Объем ТКО за смену, м3" }; string Error = ""; List <List <string> > excel = ExcelSVNUpload.IMPORT(Server.MapPath("~/Files/" + fileName), Names, out Error, h.ToString()); List <Musor> Result = new List <Musor>(); if (excel.Count < 1 || excel2.Count < 1) { //если нифига не загрузилось то ViewBag.Error = Error + Error2; ViewBag.Names = Names; return(View("NotUpload")); } else { pro100 = excel.Count; List <Musor> Mus = new List <Musor>(); List <string> NeMus = new List <string>(); //для каждой строки в экселе "Дата", "Автомобиль", "Улица", "Номер дома", "Объем ТКО за смену, м3" Musor Old = new Musor(); string Name = ""; foreach (List <string> L in excel) { try { if (L[1] != null && L[1] != "" && L[1] != "0") { Musor MusorKA = new Musor(); MusorKA.Date = Convert.ToDateTime(L[0]); MusorKA.Name = L[1].ToUpper().Replace(" ", "").Replace("154", "").Replace("54", "").Replace("ГАЗ", "").Replace("САЗ", "").Replace("МАЗ", "").Replace("ВАЗ", "").Replace("ЗИЛ", "").Replace("МТЗ", "").Replace("-", ""); MusorKA.AvtoID = 0; try { MusorKA.AvtoID = db.Avtomobils.Where(x => MusorKA.Name.Equals(x.Number)).Select(x => x.Id).First(); } catch { } MusorKA.KgOut = 0; MusorKA.Mesta = (L[2] + L[3]).Replace(" ", ""); MusorKA.ObiemIn = Convert.ToDecimal(L[4]); Mus.Add(MusorKA); Old = MusorKA; } else { if (L[2] != "0" && L[2] != null && L[2] != "") { Musor MusorKA = new Musor(); MusorKA.Date = Old.Date; MusorKA.Name = Old.Name; MusorKA.AvtoID = Old.AvtoID; MusorKA.KgOut = 0; MusorKA.Mesta = (L[2] + L[3]).Replace(" ", ""); MusorKA.ObiemIn = Convert.ToDecimal(L[4]); Mus.Add(MusorKA); } else { NeMus.Add(L[0] + ";" + L[1] + ";" + L[2] + ";" + L[3] + ";" + L[4] + ";"); continue; } } // db.Musors.Add(MusorKA); // db.SaveChanges(); } catch { if (L[0] != "" && L[0] != null) { Name = L[0].ToUpper().Replace(" ", "").Replace("154", "").Replace("54", "").Replace("ГАЗ", "").Replace("САЗ", "").Replace("МАЗ", "").Replace("ВАЗ", "").Replace("ЗИЛ", "").Replace("МАРШРУТ", "").Replace("МТЗ", "").Replace("-", ""); if (Name.Contains("№")) { for (int i = 0; i < 10; i++) { Name = Name.Replace("№" + i.ToString(), ""); } } Old.AvtoID = 0; try { Old.AvtoID = db.Avtomobils.Where(x => Name.Equals(x.Number)).Select(x => x.Id).First(); Old.Name = Name; } catch { NeMus.Add(L[0] + ";" + L[1] + ";" + L[2] + ";" + L[3] + ";" + L[4] + ";"); continue; } } else { NeMus.Add(L[0] + ";" + L[1] + ";" + L[2] + ";" + L[3] + ";" + L[4] + ";"); continue; } } procount++; progress = Convert.ToInt16(50 + procount / pro100 * 50); ProgressHub.SendMessage("Обрабатываем файл УЭВ...", progress); if (procount > pro100) { procount = Convert.ToInt32(pro100); } } List <string> Nam = Mus.Select(x => x.Name).Distinct().ToList(); foreach (string N in Nam) { if (N != "") { List <Musor> summa = Mus.Where(x => x.Name.Equals(N)).ToList(); string Mest = ""; decimal sum = 0; for (int i = 0; i < summa.Count; i++) { Mest += summa[i].Mesta + "\r\n"; sum += summa[i].ObiemIn; } Musor M = new Musor(); M.Date = summa[0].Date; M.AvtoID = summa[0].AvtoID; M.Mesta = Mest; M.Name = N; M.ObiemIn = sum; M.ObiemOut = 0; M.KgOut = 0; //Теперь ищем объёмы с полигона "Государственный регистрационный знак", "Итого принято ТКО за смену, кг", "Итого принято ТКО за смену, куб.м." foreach (List <string> P in excel2) { if (P[0].ToUpper().Replace(" ", "").Contains(N)) { M.ObiemOut = Convert.ToDecimal(P[2]); M.KgOut = Convert.ToDecimal(P[1]); break; } else { continue; } } //Ищем водителя и пробег в ездках Ezdka E = new Ezdka(); try { E = db.Ezdkas.Where(x => x.Date.Year == M.Date.Year && x.Date.Month == M.Date.Month && x.Date.Day == M.Date.Day && x.AvtoId == M.AvtoID).First(); } catch { } if (E.Voditel == null) { E.Voditel = ""; } if (E.Probeg == null) { E.Probeg = 0; } M.Driver = E.Voditel; M.Probeg = E.Probeg; Result.Add(M); } } } //Выводим отчет int stroka = 1; WS.Cells[stroka, 1] = "Приложение №3 "; range = WS.get_Range("A" + stroka.ToString(), "P" + stroka.ToString()); Opr.RangeMerge(ApExcel, range, true, true); stroka++; WS.Cells[stroka, 1] = "к договору на оказание услуг по транспортированию твердых коммунальных отходов №______от " + Result[0].Date.ToString("dd/MM/yyyy"); range = WS.get_Range("A" + stroka.ToString(), "P" + stroka.ToString()); Opr.RangeMerge(ApExcel, range, true, true); stroka++; WS.Cells[stroka, 1] = "Выезд на маршрут"; range = WS.get_Range("A" + stroka.ToString(), "C" + stroka.ToString()); Opr.RangeMerge(ApExcel, range, true, true); WS.Cells[stroka, 4] = "Загрузка ТКО"; range = WS.get_Range("D" + stroka.ToString(), "G" + stroka.ToString()); Opr.RangeMerge(ApExcel, range, true, true, 13, 70); WS.Cells[stroka, 8] = "Транспортирование ТКО"; range = WS.get_Range("H" + stroka.ToString(), "J" + stroka.ToString()); Opr.RangeMerge(ApExcel, range, true, true); WS.Cells[stroka, 11] = "Выгрузка ТКО"; range = WS.get_Range("K" + stroka.ToString(), "N" + stroka.ToString()); Opr.RangeMerge(ApExcel, range, true, true); WS.Cells[stroka, 15] = "Примечание"; range = WS.get_Range("O" + stroka.ToString(), "O" + stroka.ToString()); Opr.RangeMerge(ApExcel, range, true, true); stroka++; WS.Cells[stroka, 1] = "Дата"; range = WS.get_Range("A" + stroka.ToString(), "A" + stroka.ToString()); Opr.RangeMerge(ApExcel, range, true, true, 13, 20); WS.Cells[stroka, 2] = "Номер рейса"; range = WS.get_Range("B" + stroka.ToString(), "B" + (stroka + 1).ToString()); Opr.RangeMerge(ApExcel, range, true, true); WS.Cells[stroka, 3] = "ФИО водителя"; range = WS.get_Range("C" + stroka.ToString(), "C" + (stroka + 1).ToString()); Opr.RangeMerge(ApExcel, range, true, true); WS.Cells[stroka, 4] = "Место накопления(адрес загрузки мусоровоза)"; range = WS.get_Range("D" + stroka.ToString(), "D" + (stroka + 1).ToString()); Opr.RangeMerge(ApExcel, range, true, true, 13, 60); WS.Cells[stroka, 5] = "Объем / тип контейнера"; range = WS.get_Range("E" + stroka.ToString(), "E" + (stroka + 1).ToString()); Opr.RangeMerge(ApExcel, range, true, true); WS.Cells[stroka, 6] = "Время загрузки"; range = WS.get_Range("F" + stroka.ToString(), "F" + (stroka + 1).ToString()); Opr.RangeMerge(ApExcel, range, true, true); WS.Cells[stroka, 7] = "Объем загрузки"; WS.Cells[stroka, 8] = "Показания одометра, км"; range = WS.get_Range("H" + stroka.ToString(), "I" + stroka.ToString()); Opr.RangeMerge(ApExcel, range, true, true); WS.Cells[stroka, 10] = "Показания одометра Плечо доставки, км"; WS.Cells[stroka, 11] = "Место(адрес) выгрузки"; range = WS.get_Range("K" + stroka.ToString(), "K" + (stroka + 1).ToString()); Opr.RangeMerge(ApExcel, range, true, true); WS.Cells[stroka, 12] = "Дата / время выгрузки"; range = WS.get_Range("L" + stroka.ToString(), "L" + (stroka + 1).ToString()); Opr.RangeMerge(ApExcel, range, true, true); WS.Cells[stroka, 13] = "Объем и / или масса выгрузки"; range = WS.get_Range("O" + stroka.ToString(), "P" + stroka.ToString()); Opr.RangeMerge(ApExcel, range, true, true); stroka++; WS.Cells[stroka, 1] = "Время"; range = WS.get_Range("A" + stroka.ToString(), "A" + stroka.ToString()); Opr.RangeMerge(ApExcel, range, true, true, 13, 20); WS.Cells[stroka, 7] = "Объем, м³"; WS.Cells[stroka, 8] = "Начало маршрута"; WS.Cells[stroka, 9] = "Конец маршрута"; WS.Cells[stroka, 10] = "(от последнего места загрузки до места выгрузки)"; WS.Cells[stroka, 13] = "Объем, м³"; WS.Cells[stroka, 14] = "Масса, кг"; range = WS.get_Range("A1", "O15"); range.Font.Size = 13; range.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter; range.VerticalAlignment = Excel.XlHAlign.xlHAlignCenter; range.WrapText = true; range.Font.Bold = true; range.ColumnWidth = 15; range = WS.get_Range("A1", "A1"); range.ColumnWidth = 20; range = WS.get_Range("B1", "B1"); range.ColumnWidth = 6; range = WS.get_Range("C1", "C1"); range.ColumnWidth = 20; range = WS.get_Range("D1", "D1"); range.ColumnWidth = 60; range = WS.get_Range("E1", "E1"); range.ColumnWidth = 10; range = WS.get_Range("G1", "G1"); range.ColumnWidth = 10; range = WS.get_Range("J1", "J1"); range.ColumnWidth = 10; range = WS.get_Range("M1", "O1"); range.ColumnWidth = 10; stroka++; for (int i = 0; i < Result.Count(); i++) { WS.Cells[stroka, 1] = Result[i].Date; WS.Cells[stroka, 2] = (i + 1).ToString(); WS.Cells[stroka, 3] = Result[i].Driver; WS.Cells[stroka, 4] = Result[i].Mesta; WS.Cells[stroka, 5] = "0,75/M"; WS.Cells[stroka, 7] = Result[i].ObiemIn; WS.Cells[stroka, 10] = Result[i].Probeg; WS.Cells[stroka, 11] = "Полигон ТБО"; WS.Cells[stroka, 13] = Result[i].ObiemOut; WS.Cells[stroka, 14] = Result[i].KgOut; WS.Cells[stroka, 15] = Result[i].Name; range = WS.get_Range("A" + stroka, "A" + stroka); range.RowHeight = 50; range.Font.Size = 12; range.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter; range.VerticalAlignment = Excel.XlHAlign.xlHAlignCenter; range.WrapText = true; range.Borders.LineStyle = Excel.XlLineStyle.xlContinuous; stroka++; } } string patch = Server.MapPath("~/Content/OtchetECO.xlsx"); //@"C:\inetpub\Otchets\ASP" + "X" + Year.Remove(0, 2) + "X" + Month + ".xlsx";//Server.MapPath("~\\ASP" +"X"+ Year.Remove(0,2) +"X"+ Month + ".xlsx"); string filename = "OtchetECO.xlsx"; string path2 = Url.Content("~/Content/OtchetECO.xlsx"); // RedirectToAction("DownloadPS", new {path,filename}); string dat = path2; //+ filename; string contentType = "application/vnd.ms-excel"; // // Сохранение файла Excel. try { Opr.EstLiFile(patch); WbExcel.SaveCopyAs(patch);//сохраняем в папку } catch { } //WbExcel.PrintOutEx(1, 1, 1, true, null, null, null, null, null);//печать сразу после сохранения ApExcel.Visible = false; //невидимо ApExcel.ScreenUpdating = false; //и не обновляемо // Закрытие книги. WbExcel.Close(false, "", Type.Missing); // Закрытие приложения Excel. ApExcel.Quit(); Marshal.FinalReleaseComObject(WbExcel); Marshal.FinalReleaseComObject(WB); GC.Collect(); Marshal.FinalReleaseComObject(ApExcel); GC.WaitForPendingFinalizers(); ViewBag.date = Date; ViewBag.file = filename; ViewBag.dat = dat; // return File(path2, contentType, filename); // return Json(dat); return(View("UploadComplete")); } return(RedirectToAction("Upload")); }
public ActionResult Upload(HttpPostedFileBase upload, HttpPostedFileBase upload2) { Excel.Application ApExcel = new Excel.Application(); Excel.Workbooks WB = null; WB = ApExcel.Workbooks; Excel.Workbook WbExcel = ApExcel.Workbooks.Add(System.Reflection.Missing.Value); List <Element> Defects = new List <Element>(); // получаем имя файла string fileName = Path.GetFileName(upload.FileName); string fileName2 = Path.GetFileName(upload2.FileName); // сохраняем файл в папку Files в проекте if (Directory.Exists(Server.MapPath("~/Files/")) == false) { Directory.CreateDirectory(Server.MapPath("~/Files/")); } upload.SaveAs(Server.MapPath("~/Files/" + fileName)); upload2.SaveAs(Server.MapPath("~/Files/" + fileName2)); //обрабатываем файл после загрузки //Загружаем файл ТБО string[] Names = new string[] { "Id", "Element" }; string Error = ""; List <List <string> > excel = ExcelSVNUpload.IMPORT(Server.MapPath("~/Files/" + fileName), Names, out Error); //Загружаем файл наших выездов string[] Names2 = new string[] { "ElementId", "Description", "Location", "DeffDesc" }; string Error2 = ""; List <List <string> > excel2 = ExcelSVNUpload.IMPORT(Server.MapPath("~/Files/" + fileName2), Names2, out Error2); List <Musor> Result = new List <Musor>(); int elId = 0; if (excel.Count < 1 || excel2.Count < 1) { //если нифига не загрузилось то ViewBag.Error = Error + Error2; ViewBag.Names = Names; return(View("NotUpload")); } else { try { List <Defect> Def = db.Defects.ToList(); if (Def.Count > 0) { foreach (Defect D in Def) { db.Defects.Remove(D); db.SaveChanges(); } } } catch { } try { List <DefDescription> Def = db.DefDescriptions.ToList(); if (Def.Count > 0) { foreach (DefDescription D in Def) { db.DefDescriptions.Remove(D); db.SaveChanges(); } } } catch { } try { List <DefWork> DefWorks = db.DefWorks.ToList(); if (DefWorks.Count > 0) { foreach (DefWork D in DefWorks) { db.DefWorks.Remove(D); db.SaveChanges(); } } } catch { } try { List <Element> elem = db.Elements.ToList(); if (elem.Count > 0) { foreach (Element D in elem) { db.Elements.Remove(D); db.SaveChanges(); } } } catch { } for (int h = 1; h < excel.Count; h++) { if (excel[h][1] != "NULL" && excel[h][1] != null && excel[h][1] != "") { Element E = new Element(); E.Name = excel[h][1]; E.ElementId = Convert.ToInt32(excel[h][0]); try { db.Elements.Add(E); db.SaveChanges(); } catch { db.Elements.Remove(E); } } } decimal pro100 = Convert.ToDecimal(excel2.Count); int progress = 0; int procount = 0; /* * Excel.Range range;//рэндж * ApExcel.Visible = false;//невидимо * ApExcel.ScreenUpdating = false;//и не обновляемо * * //call this method inside your working action * ProgressHub.SendMessage("Инициализация и подготовка...", 0); * ApExcel.Visible = false;//невидимо * ApExcel.ScreenUpdating = false;//и не обновляемо */ /*ApExcel.Worksheets.Add(Type.Missing);//Добавляем лист * Excel.Worksheet WS = WbExcel.Sheets[1]; * try * { * WS.Name = Defects[h].Element; * } * catch * { * WS.Name = Defects[h].Element+h.ToString(); * * } */ foreach (List <string> E in excel2) { if (E[0] != null && E[0] != "") { int id = 0; string E1 = E[1].ToLower().Replace(",", "").Replace(".", "").Replace("-", ""); string E3 = E[3].ToLower().Replace(",", "").Replace(".", "").Replace("-", ""); string E2 = E[2].ToLower().Replace(",", "").Replace(".", "").Replace("-", ""); Defect DEFECT = new Defect(); bool go = true; try { id = Convert.ToInt32(E[0]); elId = db.Elements.Where(x => x.ElementId == id).Select(z => z.Id).First(); } catch { go = false; } if (go) { List <Defect> D = new List <Defect>(); //если нет совпадений то ok if (E1 != "" && E1 != "0" && E1 != "null") { DEFECT.Def = E1; DEFECT.ElementId = elId; try { db.Defects.Add(DEFECT); db.SaveChanges(); } catch { // db.DefDescriptions.Remove(DESC); // db.Defects.Remove(DEFECT); } } //Работа DefWork WORK = new DefWork(); //если нет совпадений то ok if (E2 != "" && E2 != "0" && E2 != "null") { WORK.Work = E2; WORK.ElementId = elId; try { db.DefWorks.Add(WORK); db.SaveChanges(); } catch { // db.DefDescriptions.Remove(DESC); //db.DefWorks.Remove(WORK); } } if (E3 != "" && E3 != "0" && E3 != "null") { WORK.Work = E3; WORK.ElementId = elId; try { db.DefWorks.Add(WORK); db.SaveChanges(); } catch { // db.DefDescriptions.Remove(DESC); // db.DefWorks.Remove(WORK); } } //если нет совпадений то ok } } procount++; progress = Convert.ToInt16(50 + procount / pro100 * 50); ProgressHub.SendMessage("Обрабатываем файл ...", progress); if (procount > pro100) { procount = Convert.ToInt32(pro100); } } } string patch = Server.MapPath("~/Content/OtchetDefects.xlsx"); //@"C:\inetpub\Otchets\ASP" + "X" + Year.Remove(0, 2) + "X" + Month + ".xlsx";//Server.MapPath("~\\ASP" +"X"+ Year.Remove(0,2) +"X"+ Month + ".xlsx"); string filename = "OtchetDefects.xlsx"; string path2 = Url.Content("~/Content/OtchetDefects.xlsx"); // RedirectToAction("DownloadPS", new {path,filename}); string dat = path2; //+ filename; string contentType = "application/vnd.ms-excel"; // ViewBag.file = filename; ViewBag.dat = dat; // Сохранение файла Excel. try { Opr.EstLiFile(patch); WbExcel.SaveCopyAs(patch);//сохраняем в папку } catch { } ApExcel.Visible = true; //видимо ApExcel.ScreenUpdating = true; //и обновляемо ApExcel.Quit(); Marshal.FinalReleaseComObject(WbExcel); Marshal.FinalReleaseComObject(WB); GC.Collect(); Marshal.FinalReleaseComObject(ApExcel); GC.WaitForPendingFinalizers(); return(View("UploadComplete")); }