Hallo Lilo,
ich hatte mich vor 4 Jahren schon mal mit dem Problem odDatei entpacken
und wieder packen beschäftigt. Ich habe Dir mal aus meiner
PERL-Bibliothek die benötigten Programme in eine Datei zusammengestellt,
so dass Du schon mal ein ablauffähiges PERL-Programm hast zum Testen,
wenn Du in dieser Richtung weiter machen willst.
Ich schicke Dir diese Datei "ChangeAutoTrueToFalse.pl" als
"ChangeAutoTrueToFalse.txt" auch an deine private Mail-Adresse, weil
hier die Einrückungen oftmals verloren gehen - und dann isses doch etwas
unübersichtlich.
Allerdings halte ich die MAKRO-Variante noch immer für die bessere
Variante als dieses direkte Eingreifen :-o in die odDatei : ...
Gruß
Hans-Werner ;-))
##############################################################################################################
use strict;
use warnings;
my $AV; # Arbeits Verzeichnis
my $odD; # open document Datei
my $odV; # open document Verzeichnis (= zip-Archiv)
$AV = "E:/TMP/";
$odD = "standard-defekt1.odt";
# Programmablauf:
# [1] "E:/TMP/standard-defekt1.odt" entpacken nach
"E:/TMP/standard-defekt1.odt_unpacked"
# [2] "E:/TMP/standard-defekt1.odt" umbennen in
"E:/TMP/BACKUP_standard-defekt1.odt",
# weil sonst später "PackOD" meckert, dass die odDatei schon
existiert.
# [3] Programmablauf-Unterbrechung (hier für Testzwecke), damit man das
'odVerzeichnis'
# "E:/TMP/standard-defekt1.odt_unpacked" inspizieren kann.
# [4] 'odDatei'-Archiv wieder packen zu "E:/TMP/standard-defekt1.odt".
$odV = UnpackOD($AV,$odD); # odDatei entpacken:
'AV'"standard-defekt1.odt_unpacked"
rename($AV.$odD,$AV."BACKUP_".$odD); # originale odDatei umbennen:
"BACKUP_'odDatei'"
# In der Datei "styles.xml" die Modifikation 'style:auto-update="true"'
zu 'style:auto-update="false"' durch-
# führen.
print "\n Weiter mit [ENTER] ... "; <STDIN>;
PackOD($AV,$odV); # odDatei packen:
"standard-defekt1.odt
##############################################################################################################
sub UnpackOD {
#
=================================================================================================
11.06.2014
# Entpackt das in einer OD-Datei enthaltene OD-Archiv in ein
Verzeichnis.
#
------------------------------------------------------------------------------------------------------------
# odc = 'o'pen 'd'ocument format data 'c'hart - Diagramm
# odf = 'o'pen 'd'ocument format 'f'ormula - Formel
# odg = 'o'pen 'd'ocument format 'g'raphics -
Zeichnung
# odi = 'o'pen 'd'ocument format 'i'mage - Bild
# odm = 'o'pen 'd'ocument format text-'m'aster -
Globaldokument
# odp = 'o'pen 'd'ocument format 'p'resentation -
Präsentation
# ods = 'o'pen 'd'ocument format 's'preadsheet -
Tabellendokument
# odt = 'o'pen 'd'ocument format 't'Text - Text
# otg = 'o'pen document format 't'emplate 'g'raphics -
Zeichnungsvorlage
# otp = 'o'pen document format 't'emplate 'p'resentation -
Präsentationsvorlage
# ots = 'o'pen document format 't'emplate 's'preadsheet -
Tabellenvorlage
# ott = 'o'pen document format 't'emplate 't'ext -
Textvorlage
#
============================================================================================================
use strict;
use warnings;
use Archive::Zip qw(:ERROR_CODES);
use File::Path;
my $AV; # Arbeits Verzeichnis
my $odD; # open document Datei
($AV,$odD) = @_;
my @M; # (array) Member
my $A; # Archiv
my $odDAV; # open document Datei Archiv Verzeichnis
my $M; # Member
my $RA; # Regulärer Ausdruck
$RA = '\.(odc|odf|odg|odi|odm|odp|ods|odt|otg|otp|ots|ott)$';
#
============================================================================================================
# OD-Datei auf Existenz prüfen:
unless ( -e $AV."/".$odD ) {
MsgError("[UnpackOD] Die OD-Datei existiert nicht.\n".
"Datei : ".$odD."\n".
"Verzeichnis: ".$AV."/");
exit;
}
# OD-Datei auf OD-Dateierweiterung prüfen:
unless ( $odD =~ m/$RA/ ) {
MsgError("[UnpackOD] Die OD-Datei hat keine
OD-Dateierweiterung.\n".
"OD-Datei : ".$odD."\n".
"Bezugspfad: ".$AV."\n".
"Syntax :
\'datei\'.\'[odc|odf|odg|odi|odm|odp|ods|odt|otg|otp|ots|ott]\'");
exit;
}
# OD-Verzeichnis anlegen:
$odDAV = $AV."/".$odD."_unpacked";
if ( -e $odDAV ) {
rmtree($odDAV);
}
mkpath($odDAV);
# OD-Datei entpacken:
$A = Archive::Zip->new($AV."/".$odD); #
Archiv-Objekt initiieren
@M = $A->memberNames(); #
Archiv-Membernamen holen
foreach $M (@M){
unless ( $A->extractMember($M,$odDAV."/".$M) == AZ_OK ) { #
Archiv-Member entpacken
MsgError("[UnpackOD] Archive::Zip: extractMember ist
fehlgeschlagen.\n".
"Member: ".$M);
exit;
}
}
# Rückgabewert setzen:
return($odD."_unpacked");
}
##############################################################################################################
sub PackOD {
#
=================================================================================================
11.06.2014
# Packt den Inhalt eines OD-Verzeichnisses, welches die Elemente
einer entpackten OD-Datei enthält, zu
# einer OD-Datei. Das OD-Verzeichnis wird nach dem Packen gelöscht.
#
------------------------------------------------------------------------------------------------------------
# odc = 'o'pen 'd'ocument format data 'c'hart - Diagramm
# odf = 'o'pen 'd'ocument format 'f'ormula - Formel
# odg = 'o'pen 'd'ocument format 'g'raphics -
Zeichnung
# odi = 'o'pen 'd'ocument format 'i'mage - Bild
# odm = 'o'pen 'd'ocument format text-'m'aster -
Globaldokument
# odp = 'o'pen 'd'ocument format 'p'resentation -
Präsentation
# ods = 'o'pen 'd'ocument format 's'preadsheet -
Tabellendokument
# odt = 'o'pen 'd'ocument format 't'Text - Text
# otg = 'o'pen document format 't'emplate 'g'raphics -
Zeichnungsvorlage
# otp = 'o'pen document format 't'emplate 'p'resentation -
Präsentationsvorlage
# ots = 'o'pen document format 't'emplate 's'preadsheet -
Tabellenvorlage
# ott = 'o'pen document format 't'emplate 't'ext -
Textvorlage
#
============================================================================================================
use strict;
use warnings;
use Archive::Zip qw(:ERROR_CODES);
use File::Path;
my $AV; # Arbeits Verzeichnis
my $odV; # open document Verzeichnis
($AV,$odV) = @_;
my $A; # Archiv
my $D; # Datei
my $RA; # Regulärer Ausdruck
$RA = '\.(odc|odf|odg|odi|odm|odp|ods|odt|otg|otp|ots|ott)$';
#
============================================================================================================
# OD-Verzeichnis auf '_unpacked'-Endung prüfen:
unless ( $odV =~ m/_unpacked$/ ) {
MsgError("[PackOD] Der OD-Verzeichnisname endet nicht auf
'\_unpacked\'.\n".
"OD-Verzeichnis: ".$odV."\n".
"Bezugspfad : ".$AV);
exit;
}
# OD-Datei auf OD-Dateierweiterung prüfen:
$D = $odV;
$D =~ s/_unpacked//g;
unless ( $D =~ m/$RA/ ) {
MsgError("[PackOD] Die OD-Datei hat keine
OD-Dateierweiterung.\n".
"OD-Datei : ".$D."\n".
"Bezugspfad: ".$AV."\n".
"Syntax :
\'datei\'.\'[odc|odf|odg|odi|odm|odp|ods|odt|otg|otp|ots|ott]\'");
exit;
}
# OD-Verzeichnis auf Existenz prüfen:
unless ( -e $AV."/".$odV ) {
MsgError("[odUnpackOD] Das OD-Verzeichnis wurde nicht
gefunden.\n".
"OD-Verzeichnis: ".$odV."\n".
"Pfad : ".$AV);
exit;
}
# OD-Datei auf Existenz prüfen:
if ( -e $AV."/".$D ) {
MsgError("[odUnpackOD] Zu packende OD-Datei existiert
bereits.\n".
"OD-Datei: ".$D."\n".
"Pfad : ".$AV);
exit;
}
# OD-Datei packen:
$A = Archive::Zip->new(); #
Archiv-Objekt initiieren
unless ( $A->addTree($AV."/".$odV) == AZ_OK ) { # OD-Daten
packen
MsgError("[odPackOD] Archive::Zip: addTree ist
fehlgeschlagen.\n");
exit;
}
unless ( $A->writeToFileNamed($AV."/".$D) == AZ_OK ) { # OD-Datei
erzeugen
MsgError("[odPackOD] Archive::Zip: writeToFileNamed ist
fehlgeschlagen.\n");
exit;
}
rmtree($AV."/".$odV);
# Rückgabewert setzen:
return($D);
}
##############################################################################################################
sub MsgError {
#
=================================================================================================
11.06.2014
# Gibt eine formatierte Fehlermeldung aus.
#
============================================================================================================
my $ME; # Message Error
($ME) = $_[0];
my @ME; # [array] Message Error
my $idxME; # index Message Error
#
============================================================================================================
@ME = SplitString("\n",$ME); # Zeilen anhand
"\n" in Array-Elemente aufteilen
print "\n". # Erste Zeile
ausgeben
" FEHLER - ".$ME[0]."\n";
for ( $idxME = 1 ; $idxME <= $#ME; $idxME++ ) {
print " ".$ME[$idxME]."\n"; # Eventuelle
Folgezeilen ausgeben
}
print "\n".
" Weiter mit [ENTER] ... ";
<STDIN>;
}
##############################################################################################################
sub SplitString {
#
=================================================================================================
11.06.2014
# Teilt eine übergebene Zeichenkette anhand eines übergebenen Trenners
in Teilzeichenketten auf, wobei
#
# + der Trenner aus
# + beliebig vielen beliebigen Zeichen
# + "\n", welches in "~T~R~E~N~N~E~R~" umgesetzt wird,
# bestehen darf.
# + entstandene leere Teilzeichenketten "" mit einem " " belegt werden.
#
============================================================================================================
use strict;
use warnings;
#
------------------------------------------------------------------------------------------------------------
my $T; # Trenner
my $ZK; # Zeichen Kette
($T,$ZK) = @_;
my @ZK; # array Zeichenkette
my $idxZK; # index Zeichen Kette
my $TP; # Trenner Position
#
============================================================================================================
# Trenner "\n" ersetzen durch "~T~R~E~N~N~E~R~":
if ( $T eq "\n") {
$ZK =~ s/$T/~T~R~E~N~N~E~R~/g;
$T = "~T~R~E~N~N~E~R~";
}
# Der Trenner enthält kein Zeichen:
if ( $T =~ /^$/ ) {
MsgError("[SplitString] Der Trenner enthält kein Zeichen.\n".
"Trenner =====>".$T."<=====\n".
"Zeichenkette: ".$ZK);
# Der Trenner enthält mindestens 1 Zeichen:
} else {
# Die Zeichenkette enthält den Trenner:
if ( index($ZK,$T) != -1 ) {
# Zeichenkette an den Trennerstellen aufteilen:
$idxZK = -1;
while ( index($ZK,$T) != -1 ) {
$idxZK++;
$TP = index($ZK,$T);
$ZK[$idxZK] = substr($ZK,0,$TP);
$ZK = substr($ZK,$TP+length($T));
}
if ( length($ZK) > 0 ) {
$idxZK++;
$ZK[$idxZK] = $ZK;
}
# Leere Teilzeichenketteelemente mit " " belegen:
for ( $idxZK=0; $idxZK <= $#ZK ; $idxZK++ ) {
if ( $ZK[$idxZK] eq "" ) {
$ZK[$idxZK] = " ";
}
}
# Die Zeichenkette enthält den Trenner nicht:
} else {
$ZK[0] = $ZK;
}
}
return @ZK;
}
##############################################################################################################
--
Liste abmelden mit E-Mail an: users+unsubscribe@de.libreoffice.org
Probleme? https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: https://listarchives.libreoffice.org/de/users/
Datenschutzerklärung: https://www.documentfoundation.org/privacy
Context
- Re: [de-users] Einfach und schnell deaktivierung von 'Automatische Aktualisierung' in allen Absatzvorlagen · OoOHWHOoO
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.