Gateway_man Geschrieben 28. Juli 2010 Geschrieben 28. Juli 2010 Guten Tag, ich bekam vor geraumer Zeit folgendes Projekt zugeteilt: Projekttitel: Berichtgenerator Erstellen Sie eine Allgemeingültige Klasse, welche Excel Vorlagen mit Daten aus einer MSSQL Datenbank füllt (Die Positionierung wird durch Vorlagengruppen abhängige Bookmarks gesetzt). Auf einige Konstrukte muss der User Einfluss nehmen können. Beispielsweise wenn es sich um einen Tabelle handelt (sprich handelt es sich nur um eine Aufzählung oder um Rechnungsposten). Das ganze muss wirklich so Allgemein gehalten werden wie nur möglich. Zur Problematik: Problem 1: Sobald man meine bereits existierende Klasse Instanziert werden aus Zeitkritischen gründen mehrere Aufgaben in meherern Threads abgearbeiten. Vor allem anderen wird per WMI die momentanen Konfigurationen aller registrierten und auffindbaren Drucker abgerufen. Ist das getan, wird dem User ein Dialog gezeigt, wo dieser den für die aktuelle selektierte Vorlage zu nutzenden Durcker auswählt. Das überprüfen der Drucker dauert auf dem Entwicklerrechner satte 5 Sekunden (Bei 5 Verfügbaren Druckern). Definitiv zu lange. Kennt jemand einen schnelleren Weg als den meinen. Ich gehe über die PrinterConfigurations der WMI. Problem 2: Da der Drucker Variable sein soll muss ich auch davon ausgehn, dass das momentan eingestellte Blattformat unterschiedlich ist. Diese Information ist für mich nicht ganz unerheblich, da ich mich ja auch um die Seitenumbrüche in Excel kümmern muss. Wegen möglichen Bereichen, die sich auf jeder Seite am Anfang wiederholen sollen. Mein Gedanke war: Da ich die momentane eingestellte größe des Papiers des für die Aufgabe selektierten Drucker bereits habe, wollte ich zwei Schleifen starten. Die eine Arbeitet die zurückgegeben Rows der Datenbank ab, die andere vergleicht die momentan erreichte höhe mit der Maximalhöhe des Papiers (in zehntel mm). Jedoch gestaltet sich das als etwas größeres Problem, da mir Excel per Rangeobjekt eine Größeneinheit zurückliefert die ich nicht kenne. In der MSDN steht leider auch nicht welche Einheit die Funktion [range].Cells.ColumnWidth zurückgibt. Ich habe nur von einer sehr obskure Größeneinheit gehört. Siehe Hier. Demnach würde sich die Spaltenbreite nach der Standartschriftgröße Orientieren?! Wenn das jemand wüsste wäre mir sehr geholfen. Lg Gateway Zitieren
Gooner85 Geschrieben 28. Juli 2010 Geschrieben 28. Juli 2010 Warum Excel die Spaltenbreite in "Zeichen" angibt wird hier erklärt: Understanding Column Widths (Microsoft Excel) This used to mean something very understandable in the "olden days" before proportional fonts came on the scene. Zitieren
Gooner85 Geschrieben 28. Juli 2010 Geschrieben 28. Juli 2010 Hier findest Du den Thread, den ich zum Thema in der MSDN aufgemacht habe: Column Width - how many characters possible? Es gibt bereits zwei Vorschläge: Possibility one: Use Courier instead of Arial. The Courier-font is linear Possibility two: use something like Graphics.MeasureString (C-Sharp) to estimate the size in pixels. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.