Excel Sheet auf 1 Blatt - Breite

Einbindung von Office-Komponenten wie Word, Excel usw.

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Excel Sheet auf 1 Blatt - Breite

Beitrag von AUGE_OHR »

hi,

Code: Alles auswählen

ActiveWindow.Zoom = 80
ActiveSheet.PageSetup.Zoom = 55
ich baue per ActiveX ein Array auf was ich an Excel übergebe.
für jeden Kunden füge ich eine Columne an C,D,E ... Z ..AZ
für jeden Artikel füge ich eine Row an 1,2,3 ... 100 ...

Code: Alles auswählen

cEnde     := ZAHL2CHR(nLFcount)
myRange := oSheet:range( "A1:"+cEnde+LTRIM( STR(nLen ) ) )
nun "passt" zwar alles in ein Excel Sheed, aber damit noch lange nicht auf den Bildschirm bzw Drucker.

es geht mir nun um die "Breite" z.b. von PORTRAIT oder LANDSCAPE und wie ich die am Anfang aufgeführten Property "berechne" ?

Code: Alles auswählen

ActiveSheet.PageSetup

        .LeftMargin   = Application.InchesToPoints(0.7)
        .RightMargin  = Application.InchesToPoints(0.7)
        .TopMargin    = Application.InchesToPoints(0.787401575)
        .BottomMargin = Application.InchesToPoints(0.787401575)
        .HeaderMargin = Application.InchesToPoints(0.3)
        .FooterMargin = Application.InchesToPoints(0.3)

        .PrintQuality = 300
        .CenterHorizontally = False
        .CenterVertically = False
        .Orientation = xlPortrait
        .Draft = False
        .PaperSize = xlPaperA4
ich habe mal die Property genommen von denen ich annehme das ich die Werte für die Berechnung gebrauchen könnte ?

Code: Alles auswählen

BEGIN SEQUENCE
   // Start Excel
   oExcel := CreateObject( "Excel.Application" )
...
// Make the first one active
   oWorkBook := oExcel:activeWorkBook
   oExcel:Application:Worksheets( 1 ):activate()

// Rename the sheet
   oExcel:Application:Worksheets( 1 ):name := ID_USER

// Speed things up by creating an object containing the cells
   oSheet := oExcel:Worksheets( 1 ):cells

   oSheet:Columns( myARTNR  ):ColumnWidth   :=  5 // Artnr
   oSheet:Columns( myGEWICHT):ColumnWidth   :=  7 // Gewicht
   oSheet:Columns( myLgPlatz):ColumnWidth   :=  4 // Platz
   oSheet:Columns( myARTIKEL):ColumnWidth   := 23 // Artikel
ich setzt auch die :ColumnWidth (in Millimeter -> Pixel ?) so das ich "weiss" wie "breit" es original ist.

.PaperSize = xlPaperA4 zusammen mit den Margin Werten "müssten" doch für eine "Berechnung" reichen, oder ? ... aber "wie" :-k

ich fürchte man muss alles auf Pixel ( = Point ? ) "umrechnen" ?
gruss by OHR
Jimmy
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Excel Sheet auf 1 Blatt - Breite

Beitrag von Martin Altmann »

Moin Jimmy,
Du weißt schon, dass Excel das automatisch macht?
Du kannst doch bei den Seiteneinstellungen angeben, dass der Ausdruck auf x Seiten Höhe und y Seiten Breite skaliert werden soll!

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Excel Sheet auf 1 Blatt - Breite

Beitrag von AUGE_OHR »

Martin Altmann hat geschrieben:Du weißt schon, dass Excel das automatisch macht?
Du kannst doch bei den Seiteneinstellungen angeben, dass der Ausdruck auf x Seiten Höhe und y Seiten Breite skaliert werden soll!
du meinst

Code: Alles auswählen

oWorkBook:workSheets(1):PageSetup:FitToPagesWide := 1
z.b. für 1 Seite / Breite. Das habe ich ausprobiert und das ist nicht das was ich suche.

Es gibt aber darunter dann "skalieren" für den Drucker und das ist dann

Code: Alles auswählen

ActiveSheet.PageSetup.Zoom = 55
unten in der Statusline gibt es doch noch einen Slider und das ist

Code: Alles auswählen

ActiveWindow.Zoom = 80
für den Bildschirm

wenn du mittels des Slider auf dem Bildschirm die volle "Breite" siehst, dann spiele man mit der Seiteneinstellung und achte auf die Markierung wie sich die Position ändert. In der Vorschau kann man dann sehen ob alles auf 1 Blatt "passt" (in der Breite)

ich will also für den User die beiden Zoom Werte "errechnen" ... wie :-k
gruss by OHR
Jimmy
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Excel Sheet auf 1 Blatt - Breite

Beitrag von Martin Altmann »

Jimmy,
die Zoomwerte in % für den Drucker und die Skalierung in x Seiten Breite und y Seiten Höhe liefern im Ergebnis das gleiche!
Wenn Du eine Exceltabelle hast die über 4 DIN-A4-Seiten geht, ist es kein Unterschied ob Du sagst, Du willst sie auf 50% der Normalgröße oder auf 1 Seite in der Breite und 1 Seite in der Höhe skaliert bekommen.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Excel Sheet auf 1 Blatt - Breite

Beitrag von AUGE_OHR »

Martin Altmann hat geschrieben:die Zoomwerte in % für den Drucker und die Skalierung in x Seiten Breite und y Seiten Höhe liefern im Ergebnis das gleiche!
Wenn Du eine Exceltabelle hast die über 4 DIN-A4-Seiten geht, ist es kein Unterschied ob Du sagst, Du willst sie auf 50% der Normalgröße oder auf 1 Seite in der Breite und 1 Seite in der Höhe skaliert bekommen.
hm ... ich denke schon !

Es wird doch alles "verkleinert" und in der Vorschau, wie auch im PDF Druck, habe ich dann die "volle" Breite.
dito mit dem Slider bekomme ich ebenfalls die "volle" Breite auf den Bildschirm.

... ob man es, stark verkleinert, noch lesen kann ... das ist eine andere Frage :-"
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Excel Sheet auf 1 Blatt - Breite

Beitrag von AUGE_OHR »

ok du hast Recht.

Code: Alles auswählen

oWorkBook:workSheets(1):PageSetup:FitToPagesWide := 1
es kommt darauf an "wo" die Codezeile steht damit die "wirkt" ...

sobald man unter Seitenlayout / Breite "1 Seite" einstellt ist der Spinbutton für % disable
damit hat sich das "drucken" Problem erledigt, aber nun bleibt noch der Bildschirm auf den die Einstellung nicht "wirkt". Ich muss also immer noch per Zoom ( Slider ) so lange "probieren" bis es "passt"... oder kann das Excel auch "automatisch" ? (wo muss ich drauf klicken ... )

p.s. Excel 2007 mit Ribbonbar
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Excel Sheet auf 1 Blatt - Breite

Beitrag von AUGE_OHR »

AUGE_OHR hat geschrieben:

Code: Alles auswählen

oWorkBook:workSheets(1):PageSetup:FitToPagesWide := 1
es kommt darauf an "wo" die Codezeile steht damit die "wirkt" ...
und es hat ( z.Z. mal wieder ) "Nebenwirkung" auf die "Seitenhöhe" die dann auch 1 wird ... vorhin ging es mal ...

auch funktioniert das leider nicht

Code: Alles auswählen

:PageSetup:FitToPagesTall := 0
denn er "meckert" dann
oError:args :
-> VALTYPE: C VALUE: FitToPagesTall
-> VALTYPE: N VALUE: 0
oError:canDefault : J
oError:canRetry : N
oError:canSubstitute: J
oError:cargo : NIL
oError:description : Die FitToPagesTall-Eigenschaft des PageSetup-Objektes
kann nicht festgelegt werden.
oError:filename : NIL
oError:genCode : NIL
oError:operation : FitToPagesTall
oError:osCode : -2146827284
oError:severity : 2
oError:subCode : 6500
oError:subSystem : Automation
oError:thread : 1
oError:tries : NIL
also muss ich doch den :zoom für den Drucker "berechnen" ...

ich habe bei A4 ja 2970x2100 - Ränder
bei :ColumnWidth := 5 habe ich 44Pixel von Excel bekommen

Code: Alles auswählen

4    36
5    44
6    51 
7    59
8    67
20  159
also ca. 8 Differenz pro :ColumnWidth

Code: Alles auswählen

// mehr als 10 passen nicht bei Portrait, also Landscape
IF nLFcount > 10
   oWorkBook:workSheets(1):PageSetup:Orientation := xlLandscape
   aPaperSize  := {2970,2100}
ELSE
   oWorkBook:workSheets(1):PageSetup:Orientation := xlPortrait
   aPaperSize  := {2100,2970}
ENDIF
...
nMaxWide := aPaperSize[1]-nLeftMargin-nRightMargin
//        feste Spalten     pro Kunde Spalte        
nWide := ((44+59+36+159+67+44)*nFaktor)+((nLFcount-myEinheit+1)*51*nFaktor)
nZoom := (nWide/nMaxWide)*100
und nun brauche ich dazu den nFaktor...

ich bin jetzt so bei 1.75 für die "breite", ausgehend von 1024x768 Bildschirm auf A4 Papier ...
gruss by OHR
Jimmy
Antworten