Files
Schnittstelle/Schnittstelle/Export/Excel.cs
2024-08-26 12:30:54 +02:00

203 lines
10 KiB
C#

using Schnittstelle.Import.XML.v2013.Model;
using Schnittstelle.Sanierung;
using Syncfusion.XlsIO;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
namespace Schnittstelle.Export
{
public static class Excel
{
const string LizenceKey = "Ngo9BigBOggjHTQxAR8/V1NCaF5cXmZCf1FpRmJGdld5fUVHYVZUTXxaS00DNHVRdkdnWXdccXRQQ2NZWEBxWUM=";
public static void MakeWorkbook(List<KanalObjekt> KanalObjekte, List<Sanierungart> sanierungsarten)
{
Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense(LizenceKey);
ExcelEngine excelEngine = new ExcelEngine();
IApplication application = excelEngine.Excel;
application.DefaultVersion = ExcelVersion.Xlsx;
IWorkbook workbook = application.Workbooks.Create(KanalObjekte.Count);
IStyle CellStyle = workbook.Styles.Add("MainStyle");
CellStyle.Borders[ExcelBordersIndex.EdgeLeft].LineStyle = ExcelLineStyle.Thin;
CellStyle.Borders[ExcelBordersIndex.EdgeRight].LineStyle = ExcelLineStyle.Thin;
CellStyle.Borders[ExcelBordersIndex.EdgeTop].LineStyle = ExcelLineStyle.Thin;
CellStyle.Borders[ExcelBordersIndex.EdgeBottom].LineStyle = ExcelLineStyle.Thin;
IStyle HeaderStyle = workbook.Styles.Add("HeaderStyle");
HeaderStyle.Borders[ExcelBordersIndex.EdgeLeft].LineStyle = ExcelLineStyle.Thin;
HeaderStyle.Borders[ExcelBordersIndex.EdgeRight].LineStyle = ExcelLineStyle.Thin;
HeaderStyle.Borders[ExcelBordersIndex.EdgeTop].LineStyle = ExcelLineStyle.Thin;
HeaderStyle.Borders[ExcelBordersIndex.EdgeBottom].LineStyle = ExcelLineStyle.Thin;
HeaderStyle.Font.Bold = true;
IStyle KodierungEnde = workbook.Styles.Add("KodierungEndestyleStyle");
KodierungEnde.Borders[ExcelBordersIndex.EdgeLeft].LineStyle = ExcelLineStyle.Thin;
KodierungEnde.Borders[ExcelBordersIndex.EdgeRight].LineStyle = ExcelLineStyle.Thin;
KodierungEnde.Borders[ExcelBordersIndex.EdgeTop].LineStyle = ExcelLineStyle.Thin;
KodierungEnde.Borders[ExcelBordersIndex.EdgeBottom].LineStyle = ExcelLineStyle.Thick;
for (int i = 0; i < KanalObjekte.Count; i++)
{
IWorksheet worksheet = workbook.Worksheets[i];
KanalObjekt k = KanalObjekte[i];
CalculateHaltung(k, worksheet, sanierungsarten, CellStyle, HeaderStyle, KodierungEnde);
}
FileStream stream = new FileStream("beurteilung.xlsx", FileMode.Create, FileAccess.ReadWrite);
workbook.SaveAs(stream);
stream.Dispose();
}
private static void CalculateHaltung(KanalObjekt haltung, IWorksheet worksheet, List<Sanierungart> sanierungsarten, IStyle cellStyle, IStyle headerStyle, IStyle kodierungEnde)
{
worksheet.Name = string.Format("{0}", haltung.Stammdaten.Objektbezeichnung);
int row = 1;
for (int i = 0; i < sanierungsarten.Count; i++)
{
Sanierungart sanArt = sanierungsarten[i];
int mainrow = row;
worksheet.Range[row, 1].Text = "Haltung";
worksheet.Range[row, 2].Text = "Länge";
worksheet.Range[row, 3].Text = "Tiefe";
worksheet.Range[row, 4].Text = "Inspizierte Länge";
worksheet.Range[row, 5].Text = "Straße";
worksheet.Range[row, 9].Text = "DN";
worksheet.Range[row, 10].Text = "Material";
row++;
worksheet.Range[row, 1].Text = haltung.Stammdaten.Objektbezeichnung;
worksheet.Range[row, 2].Text = "TODO"; // Länge
worksheet.Range[row, 3].Text = "TODO"; // Tiefe
worksheet.Range[row, 5].Text = haltung.Inspektionsdaten.Lage.Strassename;
worksheet.Range[row, 9].Text = haltung.Inspektionsdaten.OptischeInspektion[0].Rohrleitung.Grunddaten.Profilbreite.ToString();
worksheet.Range[row, 10].Text = haltung.Inspektionsdaten.OptischeInspektion[0].Rohrleitung.Grunddaten.Material.ToString();
worksheet.Range[mainrow, 1, mainrow, 10].CellStyle = headerStyle;
worksheet.Range[row,1,row,10].CellStyle = cellStyle;
row += 2;
worksheet.Range[row, 2].Text = sanArt.Sanierungsbezeichnung;
row+= 2;
//int temprow = row;
worksheet.Range[row, 1].Text = "Stat";
worksheet.Range[row, 2].Text = "Kürzel";
worksheet.Range[row, 3].Text = "Charakterisierung";
worksheet.Range[row, 4].Text = "Quantifizierung";
worksheet.Range[row, 5].Text = "Lage";
worksheet.Range[row, 6].Text = "Verb.";
worksheet.Range[row, 7].Text = "Schaden";
worksheet.Range[row, 8].Text = "Strecke";
worksheet.Range[row, 9].Text = "Sanierung";
worksheet.Range[row, 10].Text = "Kosten";
worksheet.Range[row, 1, row,10].CellStyle=headerStyle;
row++;
int temprow = row;
int codestart_row = row;
//int rows = 7;
decimal inspizierteLaenge = 0m;
for (int j = 0; j < haltung.Inspektionsdaten.OptischeInspektion.Count; j++)
{
OptischeInspektion opt = haltung.Inspektionsdaten.OptischeInspektion[j];
inspizierteLaenge += opt.Rohrleitung.Zustaende.Max(x => x.Station);
foreach (RZustand code in opt.Rohrleitung.Zustaende)
{
worksheet.Range[row + j, 1].Text = code.Station.ToString();
worksheet.Range[row + j, 2].Text = code.Inspektionskode;
string ch = "";
if (code.Charakterisierung1 != null)
ch = code.Charakterisierung1;
if (code.Charakterisierung2 != null)
ch = string.Format("{0} / {1}", ch, code.Charakterisierung2);
worksheet.Range[row + j, 3].Text = ch;
worksheet.Range[row + j, 4].Text = code.Quantifizierung1.ToString();
string pos = "";
if (code.PositionVon != 0)
pos = code.PositionVon.ToString();
if (code.PositionBis != 0)
pos = string.Format("{0} - {1}", pos, code.PositionBis);
worksheet.Range[row + j, 5].Text = pos;
if (code.Verbindung)
worksheet.Range[row + j, 6].Text = "JA";
worksheet.Range[row + j, 7].Text = code.KodeDescription;
worksheet.Range[row + j, 8].Text = code.Streckenschaden;
Tuple<string, double> d;
if (sanArt.Sanierungen.TryGetValue(code.Inspektionskode, out d))
{
worksheet.Range[row + j, 9].Text = d.Item1;
worksheet.Range[row + j, 10].Number = d.Item2;
}
row++;
}
}
worksheet.Range[temprow, 1, row-1, 10].CellStyle = cellStyle;
worksheet.Range[row-1, 1, row-1, 10].CellStyle = kodierungEnde;
temprow = row;
worksheet.Range[row, 7].Text = "Zwischensumme";
worksheet.Range[row, 10].Formula = string.Format("=SUM(J{0}:J{1})", codestart_row, row-1);
row++;
worksheet.Range[row, 7].Text = "Baustelleneinrichtung"; //10%
worksheet.Range[row, 8].Number = 10;
worksheet.Range[row, 10].Formula = string.Format("=(H{0}/100)*J{1}", row, temprow);
row++;
worksheet.Range[row, 7].Text = "Verkehrssicherung"; // 5%
worksheet.Range[row, 8].Number = 5;
worksheet.Range[row, 10].Formula = string.Format("=(H{0}/100)*J{1}", row, temprow);
row++;
worksheet.Range[row, 7].Text = "Aufrechterhaltung der Vorflut"; // 12%
worksheet.Range[row, 8].Number = 12;
worksheet.Range[row, 10].Formula = string.Format("=(H{0}/100)*J{1}", row, temprow);
row++;
worksheet.Range[row, 7].Text = "Kanalreinigung"; // 2€ /m
worksheet.Range[row, 8].Number = Convert.ToDouble(inspizierteLaenge);
worksheet.Range[row, 9].Number = 2;
worksheet.Range[row, 10].Formula = string.Format("=H{0}*I{0}", row);
row++;
worksheet.Range[row, 7].Text = "Kamerainspektion"; // 3€ /m
worksheet.Range[row, 8].Number = Convert.ToDouble(inspizierteLaenge);
worksheet.Range[row, 9].Number = 3;
worksheet.Range[row, 10].Formula = string.Format("=H{0}*I{0}", row);
row++;
worksheet.Range[row, 7].Text = "Reinigung verstopfter Abzweiger"; //250€
worksheet.Range[row, 9].Number = 250;
worksheet.Range[row, 10].Formula = string.Format("=H{0}*I{0}", row);
row++;
worksheet.Range[row, 7].Text = "Summe netto";
worksheet.Range[row, 10].Formula = string.Format("=SUM(J{0}:J{1})",temprow,row-1);
row++;
worksheet.Range[row, 7].Text = "Mehrwertsteuer"; // 19%
worksheet.Range[row, 8].Number = 19;
worksheet.Range[row, 10].Formula = string.Format("=(H{0}/100)*J{1}",row,row-1);
row++;
worksheet.Range[row, 7].Text = "Summe brutto";
worksheet.Range[row, 10].Formula = string.Format("=SUM(J{0}:J{1})", row - 1, row - 2);
worksheet.Range[temprow, 7, row, 10].CellStyle = cellStyle;
worksheet.Range[mainrow+1, 4].Text = inspizierteLaenge.ToString();
row += 5;
}
worksheet.UsedRange.AutofitColumns();
}
}
}