BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Format Spaltenbreite und/oder Zeilenhöhe übertragen

CALC ist die Tabellenkalkulation, die Sie immer wollten.
Mondblatt24
Beiträge: 2837
Registriert: Fr 3. Mär 2017, 17:12

Re: Format Spaltenbreite und/oder Zeilenhöhe übertragen

Beitrag von Mondblatt24 » Mo 20. Mai 2019, 12:34

Hallo,
Damit die Ränder der Zellen nicht sichtbar sind formatierte ich den Hintergrund weiß.
Eine andere Möglichkeit dies zu erreichen kenne ich nicht.
Menü: Ansicht→ Gitterlinien anzeigen


Gruß Peter
Win 11 (x64) ▪ LO 24.2.1.2 (x64) ▪ AOO Portable 4.1.15
Wenn Eure Frage zutreffend beantwortet wurde, seid so nett und fügt dem Betreff der Eingangsfrage [GELÖST] hinzu.

craig
Beiträge: 1137
Registriert: Do 21. Apr 2016, 11:42

Re: Format Spaltenbreite und/oder Zeilenhöhe übertragen

Beitrag von craig » Mo 20. Mai 2019, 12:52

Hallo Ich Bins,
ich benutze Version: 6.2.3.2 (x64)
Build-ID: aecc05fe267cc68dde00352a451aa867b3b546ac
Ich nutze dieselbe Version, damit ist bei mir der Skalierungs-Bug behoben.
Damit die Ränder der Zellen nicht sichtbar sind formatierte ich den Hintergrund weiß.
Eine andere Möglichkeit dies zu erreichen kenne ich nicht.
Weiß wird eh nicht gedruckt, ich empfinde dies eher als störend, zumal
es passieren kann, dass andere Formatierungen überlagert werden.
Deshalb nutze ich z.B. die Funktion:
Menü Ansicht --> Gitternetzlinien anzeigen
Damit kannst Du je nach Wunsch die Ansicht umschalten.
Ausserdem kannst Du bei Bedarf die Gitternetzlinie so formaieren:
Menü Extras --> Optionen...
LibreOffice Calc --> Ansicht
Dann rechts unter "optische Hilfen" die Farben der Gitternetzlinien anpassen.
Dies hat keine Auswirkung beim Ausdruck, ist halt reine Ansichtssache:)

In Deinem Muster sehe ich 8 Seiten!
  • Bereich: A1:N68 = Seite 1
  • Bereich: A69:N135 = Seite 2
  • Bereich: ...
  • Bereich: O1:P68 = Seite 5
  • Bereich: O69:P135 = Seite 6
  • Bereich: ...
  • Bei einem Skalierungsfaktor von 100% (Menü Format --> Seite Register "Tabelle"
Ist dies korrekt?

Schalte dazu die Ansicht um:
Menü Ansicht --> Seitenumbruch
Gruß

Craig

Nie die Sicherungskopie vergessen!

════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8

Ich Bins
Beiträge: 236
Registriert: Do 2. Aug 2018, 12:30

Re: Format Spaltenbreite und/oder Zeilenhöhe übertragen

Beitrag von Ich Bins » Mo 20. Mai 2019, 13:36

Hallo zusammen,

ursprünglich entwickelte ich die Datei mit Excel, bin dann letztes Jahr auf LO umgestiegen und kämpfe noch mit den Anpassungen.
Aus Excel stammt die weiße Formatierung.
Vielen Dank für: Menü Ansicht --> Gitternetzlinien anzeigen

Die Seitenaufteilung stimmt überhaupt nicht. Liegt daran, dass beim Kopieren die Ränder, die ich im Origial in der Druckvorschau geändert habe nicht in die Kopie übernommen wurden.
Mit Tabelle in eine neue Datei kopieren gehen diese Einstellungen verloren. Jetzt habe ich alle anderen Tabellen meiner Datei gelöscht, nur die Beispieltabelle drin gelassen, Seitenbeschriftung eingefügt und als Beispiel.ods gespeichert.
Beispiel.ods
(41.4 KiB) 172-mal heruntergeladen
Viele Grüße
Ich Bins

craig
Beiträge: 1137
Registriert: Do 21. Apr 2016, 11:42

Re: Format Spaltenbreite und/oder Zeilenhöhe übertragen

Beitrag von craig » Mo 20. Mai 2019, 21:41

Hallo Ich Bins,

teste mal meinen Code zunächst nur in meiner Beispieldatei.

Deine zuletzt hochgeladene Datei enthält VBA-Rückstände und ggf. einige andere
Konvertierungsfehler. Als ich ein Makro-Modul einfügen wollte stürzte LibO ab.
Ich habe deshalb das Tabellenblatt in eine neue saubere Calc-Datei kopiert und hier das Makro angelegt.
Dadurch sind fast alle Zell- und Seitenvorlagen verloren gegangen.

Mit Konvertierungsfehler meine ich z.B. die Spalte D. Sie ist laut Basic-Code nicht ausgeblendet,
sondern nur auf einer sehr geringe Spaltenbreite gesetzt (11/1000=‭0,011‬cm).
Spalte I hingegen enthält die Eigenschaft "IST AUSGEBLENDET".
Ob dies bei den Zeilen auch vorkommt habe ich nicht geprüft.

Was passiert im Code:
Das aktuelle Dokument wird referenziert.
Das Tabellenblatt mit dem Index 0 wurde als Quelle festgelegt.
D.h. die Spaltenbreite, die Zeilenhöhe und die Eigenschaft ob die Spalte, bzw. die Zeile ausgeblendet wurde,
wird aus diesem Tabellenblatt in zwei Array‘s eingelesen.
mCol(n,n) steht für die Spalteneigenschaften. Durchnummeriert von 0 bis 15, wobei das Array zweidimensional ist.
mRow(n,n) steht für die Zeileneigenschaften. Durchnummeriert von 0 bis 223, wobei das Array zweidimensional ist.
Beispiel:
mCol(0,0) entspricht der Spalte A und enthält den Wert der Breite (z.B. 4000)
mCol(0,1) entspricht der Spalte A und enthält den Wert True ODER False
Die Eigenschaft dazu lautet „IsVisible“
IsVisible=True → Spalte ist sichtbar
IsVisible=False → Spalte ist ausgeblendet

Dann Zähler + 1
mCol(1,0) entspricht der Spalte B und enthält den Wert der Breite (z.B. 1400)
mCol(1,1) entspricht der Spalte B und enthält den Wert True ODER False
usw.

Gleiches gilt für die Zeilen:
mRowl(0,0) entspricht der Zeile 1 und enthält den Wert der Höhe (z.B. 150)
mRow(0,1) entspricht der Zeile 1 und enthält den Wert True ODER False
Die Eigenschaft dazu lautet „IsVisible“
IsVisible=True → Spalte ist sichtbar
IsVisible=False → Spalte ist ausgeblendet

Dann Zähler + 1
mRowl(1,0) entspricht der Zeile 2 und enthält den Wert der Höhe (z.B. 250)
mRow(1,1) entspricht der Zeile 2 und enthält den Wert True ODER False
usw.

Danach folgt eine Schleife über alle Tabellenblätter.
Da Tabellenblatt-Index 0 = die Quelle der Daten ist, beginnt der Zähler in meiner Beispieldatei bei 1.
Die Anzahl der zu bearbeitenden Blätter kann im oberen Codeteil mittels der Variablen „nSheet=n“ festgelegt werden.
Ich habe kurz nach dem Start des Makros eine Messagebox eingebaut, diese gibt den internen Index des
jeweiligen Tabellenblattes und den dazugehörenden Namen aus.
Warum?
Wegen der Konvertierung aus einer Excel-Datei in eine Calc-Datei ist die interne Reihenfolge (Index <-->Name)
nicht immer korrekt. Ich will damit sagen „Tabelle2“ muss nicht unbedingt Index 1 (Zählung beginnt bei 0!) sein.

Wenn Du von den Indizes unabhängig arbeiten möchtest, bleibt aus meiner Sicht nur ein etwas unschöner
Umweg über ein eindimensionales Array, dem im Code alle relevanten Tabellenblatt-Namen übergeben werden.
z.B. so:

Code: Alles auswählen

Dim mTab(0 to 3) as String	`0-3 = vier Felder = vier Tabellenblätter
mTab()=Array("Tabelle1","Tabelle2","Tabelle3","Tabelle4",)
Danach Codezeilen 69-72 anpassen:
	' Tabellenzähler
	For z = lBound(mTab()) to uBound(mTab()) ' <-- Untergrenze bis Obergrenze des Array‘s
			' Objekt-Referenz auf nächstes Tabellenblatt legen	
			oSheetNext=oDoc.getSheets.getbyName(mTab(z))
Nachdem nun alle Eigenschaften in die Array‘s geschrieben wurden, werden diese auf die einzelnen Tabellenblätter angewendet. D.h. die Array-Daten werden ausgelesen und den Spalten und Zeilen per Schleife zugewiesen.
Am Ende erfolgt für das jeweilige Blatt die Seitenformatierung. Siehe hierzu den Codeabschnitt ab Zeile 88

Code: Alles auswählen

REM ----------------------------------------------------------------------------------------------
REM Seite formatieren
	' ermitteln des Namens der aktuellen Seitenvorlage
	s = oDoc.CurrentController.getActiveSheet().PageStyle
Um Dich ein wenig mehr in die Programmierung einzuarbeiten schau Dir auch mal diesen Hinweis an:
Codeinspection: MRI und XRAY
Am Anfang sind die Tools eine wenig konfus, ich möchte sie aber keinerfalls mehr missen.
Beispiel v03 ODF.ods
(21.45 KiB) 166-mal heruntergeladen
:D
Gruß

Craig

Nie die Sicherungskopie vergessen!

════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8

Ich Bins
Beiträge: 236
Registriert: Do 2. Aug 2018, 12:30

Re: Format Spaltenbreite und/oder Zeilenhöhe übertragen

Beitrag von Ich Bins » Di 21. Mai 2019, 21:10

Guten Abend Craig,

hast Du Dir eine Arbeit gemacht- sensationell. Vielen, vielen Dank!
Dein Beispiel funktioniert auch in meinem PC.
Ich habe jetzt noch einmal eine Beispieldatei erstellt, blicke aber mom. nicht so recht wo sich die drei Makros befinden die im Beispiel von gestern drin waren. Ich vermute, dass die Makros die irgendwann einmal erstellt wurden jeder neuen *.ods "vererbt" werden.

Bei Excel gibt es die Datei Personl.xls.
Gibt es so etwas auch bei Calc?
Was passiert, wenn ich die Makro innerhalb der Beispieldatei lösche?
Werden die dann auch "global" gelöscht ?

Viele Grüße
Ich Bins

craig
Beiträge: 1137
Registriert: Do 21. Apr 2016, 11:42

Re: Format Spaltenbreite und/oder Zeilenhöhe übertragen

Beitrag von craig » Di 21. Mai 2019, 23:17

Hallo Ich Bins,

gern geschehen. :D
Ich habe jetzt noch einmal eine Beispieldatei erstellt, blicke aber mom. nicht so recht wo sich die drei Makros befinden die im Beispiel von gestern drin waren.
In einer Excel-Datei wird es ähnlich sein wie in einer Calc-Datei. Beide arbeiten nach dem ODF-Standard.
Leider wird der Standard unterschiedlich ausgelegt, was bei der Konvertierung der Dokument immer wieder zu Problemen führt.
Ich lese oft in den Forne "Hilfe kann meine Datei nicht mehr öffnen" oder "Hilfe, menie Datei enthält nur noch Hashes (#)".

Deshalb erstelle Dir sofort ausreichend Sicherungskopien, auch ohne Konvertierung ist dies immer angeraten.
Zumal mir Dein Dokument sehr umfangreich scheint (habe ich aus den Formatvorlagen abgeleitet).

Mein Rat, dem Du nicht unbedingt folgen musst wäre, eine reine neue Calc-Datei auf Basis Deiner Daten zuerstellen.
Dies sofern Du nicht zwischen Excel und Calc hin und her springen möchtets.

Konvertierungsfehler äußern sich u.a. auch, in Formatierungfehlern. Plötzlich verbundene Zellen oder die genannten "Spaltenfehler".
Aber auch alte VBA-Makros kollidieren mit den neue LibO-Makros, und, und...
Ich vermute, dass die Makros die irgendwann einmal erstellt wurden jeder neuen *.ods "vererbt" werden.
Sie werden nicht vererbt, sondern befinden sich als XML-Datei innerhalb des Dokuments.
Eine ODF-Datei ist immer eine gezippte Datei, welche einzelnen "Unterdateien" und Ordner enthält.
Darin gibt es einen Ordner namens BASIC, in diesem sind die Makros gespeichert.
Dies gilt aber nur für die Makros, welche mit dem Dokument gespeichert wurden.
Dazu später mehr, ist etwas komplex.
Was passiert, wenn ich die Makro innerhalb der Beispieldatei lösche?
Werden die dann auch "global" gelöscht ?
Unter vorherigem Link findest Du dazu die ersten HInweise.
Es gibt Makro-Bliotheken
  • Die Bibliothek "Standard" innerhalb einer Datei
  • Die Bibliothek "Standard" ("global") unter der Hauptbibliopthek "Meine Makros und Dialoge"
    mit weiteren "Unterbibliotheken" sofern diese von Dir angelegt wurden.
  • Diverse Bibliotheken unter der Hauptbibliopthek "LibreOffice Makros"
    mit diversen "Unterbibliotheken", welche bereits bei der Installation mit angelegt wurden.
  • usw.
In all diesen BIbliotheken können Makro-Module angelegt sein.
Die Module selbst enthalten dann den Quellcode in Form von SUB-Routinen und/ oder Funktionen.
Bei Doppelklick auf ein Modul wird Dir der dazugehörige Code im Modulblatt angezeigt.
Desweiteren findest unterhalb des Objektkatalogs, das Beobachtungsfenster und darunter die Register mti den
Modulnamen, sofern mehrere Module innerhalb ein Bibliothek enthalten sind.

Die beste Vorschau erhältst Du, wenn Du meine Beispieldatei öffnest.
Dann in der Basic-IDE unter Menü Ansicht folgende Optionen einschaltest:
  • Zeilennummer
  • Objektkatalog
Der Objektkatalog wird Dir auf der linken Seite des Fenster angezeigt.
Hier kannst Du Dich durch die einzelnen Bibliotheken klicken, ist wie eine Art Explorer aufgebaut.
Gruß

Craig

Nie die Sicherungskopie vergessen!

════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8

Lupo
Beiträge: 279
Registriert: Do 11. Okt 2012, 14:22

Re: Format Spaltenbreite und/oder Zeilenhöhe übertragen

Beitrag von Lupo » Mi 22. Mai 2019, 07:19

"12 gleiche Arbeitsblätter" ist schlichtweg Murks. Man sollte schon EDV-technisch denken beim Design.

Predigen wir bei Excel den Leuten jeden Tag. Und hauen Verstöße den Fragern um die Ohren.
MfG Lupo - xxcl.de Win10ProLO6062

Ich Bins
Beiträge: 236
Registriert: Do 2. Aug 2018, 12:30

Re: Format Spaltenbreite und/oder Zeilenhöhe übertragen

Beitrag von Ich Bins » Mi 22. Mai 2019, 10:52

Hallo Lupo,

nimm es mir bitte nicht übel, Du weißt nicht um was für ein Projekt es sich handelt, also denke was auch immer, aber Finger weg von der Tastatur.

Gruß
Ich Bins

Ich Bins
Beiträge: 236
Registriert: Do 2. Aug 2018, 12:30

Re: Format Spaltenbreite und/oder Zeilenhöhe übertragen

Beitrag von Ich Bins » Mi 22. Mai 2019, 11:15

Hallo Craig,

vielen Dank für Deine ausführliche Antwort.
Anbei ist ein weiterer Versuch die Beispieldatei fehlerfrei bereitzustellen.
Beispiel.ods
(20.36 KiB) 170-mal heruntergeladen
Ich bin gespannt, ob sie jetzt noch Makros enthält.

Keine der extrem schmalen Spalten D und I waren ausgeblendet und enthalten Daten.
In diesem Format benötige ich diese Spalten.

Viele Grüße
Ich Bins

Lupo
Beiträge: 279
Registriert: Do 11. Okt 2012, 14:22

Re: Format Spaltenbreite und/oder Zeilenhöhe übertragen

Beitrag von Lupo » Mi 22. Mai 2019, 19:09

Es würde mich interessieren, in welche Richtung ein Projekt geht, für das meine Anweisung nicht gelten soll.

Gleiche Arbeitsblätter

- nur als maschinengenerierter Output (ist ok)
- niemals produktiv! Das ist Bullshit. War 1985 meine erste Erkenntnis mit Multiplan. Denn Erfassung in gleichen Blättern ist keine EDV, sondern Karteikartenbeschreibseln.
MfG Lupo - xxcl.de Win10ProLO6062

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten