/// <summary> /// Erstellt einen neuen Workbook Cache. /// Es wird mindestens ein leerer WorkbookCache zurückgegeben. /// Die darin enthaltenen SheetCaches können von außerhalb nicht gefüllt werden. /// </summary> /// <param name="workbook"></param> /// <returns></returns> internal static WorkbookCache CreateWorkbookCache(Excel.Workbook workbook) { try { if (workbook != null) { //Neuen WorkbookCache erzeugen var wbCache = new WorkbookCache { //Name und SheetCache initialisieren WorkbookName = workbook.Name, SheetCaches = new List <SheetCache>() }; //Durch alle Sheets laufen und die SheetCaches erzeugen foreach (Excel.Worksheet sheet in workbook.Sheets) { wbCache.SheetCaches.Add(SheetCache.CreateSheetCache(sheet)); } return(wbCache); } return(null); } catch (Exception) { throw; } }
/// <summary> /// Fügt einen SheetCache dem Workbook hinzu /// </summary> /// <param name="sheetCache"></param> internal void AddSheetCache(SheetCache sheetCache) { if (SheetCaches == null) { SheetCaches = new List <SheetCache>(); } if (sheetCache != null) { SheetCaches.Add(sheetCache); } }
/// <summary> /// Versucht im Worksheet die Shapes mit den Barcodes zu finden. Dabei wird wenigstens ein Zellen /// Cache mit einer leeren Liste an Zellen Shapes erstellt. Wenn der Worksheet null ist, wird null /// zurückgegeben. /// </summary> /// <param name="worksheet"></param> /// <returns></returns> internal static SheetCache CreateSheetCache(Excel.Worksheet worksheet) { //Ist der Sheet vorhanden if (worksheet != null) { //Neuen Zellen Cache erstellen SheetCache cellCache = new SheetCache { CellShapes = new List <CellShape>(), WorksheetName = worksheet.Name }; //Durch alle Shapes im Worksheet laufen foreach (Excel.Shape shape in worksheet.Shapes) { //Prüft den Shape auf Name, null usw. if (CellShape.CheckShapeName(shape)) { //Aktuelle Adresse var addressCurShape = CellShape.GetAddress(shape); //Aktueller Wert var cellValue = worksheet.Range[addressCurShape]?.Value; //Wert und Adresse auf null prüfen if (addressCurShape != null && cellValue != null) { //Adresse, aktueller Wert und Shape im Cache ablegen cellCache.CellShapes.Add(new CellShape { Shape = shape, Address = addressCurShape, Value = cellValue }); } } } //Es wird mindestens ein instanziierter Zellen Cache mit einer leeren instanziierten Liste zurückgegeben. return(cellCache); } //Es gibt nichts return(null); }
/// <summary> /// Fügt diesem WorkbookCache ein CellShape hinzu. Dieser wird als Barcode auf dem Worksheet angezeigt. /// Erzeugt also einen Barcode im <paramref name="workbook"/> und der <paramref name="range"/> /// und passt diesen an die Zelle an <paramref name="fitToCell"/>. /// </summary> /// <param name="workbook">In diesem Workbook soll der Barcode hinzugefügt werden.</param> /// <param name="range">Ein Bereich an Zellen. Die Zellen sollten Inhalte besitzen.</param> /// <param name="xlPlacement">Wie soll der Barcode an die Zelle gebunden sein.</param> /// <param name="fitToCell">Soll der Barcode an die Größe der Zelle angepasst werden.</param> /// <param name="cellFitToPicture">Soll die Zelle an die Größe des Bildes angepasst werden.</param> internal void AddCellShape(Excel.Workbook workbook, Excel.Range range, Excel.XlPlacement xlPlacement = Excel.XlPlacement.xlMove, bool fitToCell = false, bool cellFitToPicture = false) { try { if (workbook?.Name.Equals(WorkbookName) == true && range != null) { //Existiert bereits ein SheetCache zu dem Worksheet if (!HasSheetCache(range.Worksheet)) { //Nein existiert nicht //Neuen SheetCache hinzufügen var shCch = SheetCache.CreateSheetCache(range.Worksheet); if (shCch != null) { AddSheetCache(shCch); } } //Den SheetCache ermitteln var shCache = GetSheetCache(range.Worksheet); if (shCache != null) { //Durch alle Zellen in der range laufen foreach (Excel.Range cell in range) { //Jetzt den CellShape in den SheetCache schreiben, dabei wird er auch auf der Mappe erzeugt shCache.AddCellShape(CellShape.AddShape(cell, xlPlacement, fitToCell, cellFitToPicture)); } } } } catch (Exception) { throw; } }
/// <summary> /// Setzt die Felder in der eigenen Instanz /// </summary> /// <param name="cellCache">der zu setzende CellCache</param> private void SetFelder(SheetCache cellCache) { CellShapes = cellCache?.CellShapes; WorksheetName = cellCache?.WorksheetName; }