Moin.
Beim Öffnen einer Arbeitsmappe wird gefragt, ob ich Bezüge auf andere Arbeitsmappen aktualisieren möchte.
1) Wie kann ich die betroffenen Zellen finden, da solche Bezüge unerwünscht sind. Leider enthält die Arbeitsmappe viele Blätter.
2) Wie kann ich externe Bezüge im XML-Code der Datei ausfindig machen? Das Bereinigen wäre dann automatisierbar.
Herzlichen Dank im Voraus.
[ERLEDIGT/Skript] Wie finden: Bezüge auf andere Arbeitsmappen
- Michael Uplawski
- Beiträge: 783
- Registriert: 09.06.2010 14:27:54
[ERLEDIGT/Skript] Wie finden: Bezüge auf andere Arbeitsmappen
Zuletzt geändert von Michael Uplawski am 03.03.2018 09:21:53, insgesamt 1-mal geändert.
- Michael Uplawski
- Beiträge: 783
- Registriert: 09.06.2010 14:27:54
Re: Wie finden: Bezüge auf andere Arbeitsmappen
Also:
Externe Bezüge sind im Unterverzeichnis "xl/externalLinks" definiert. Statt die XML-Dateien darin zu bearbeiten, genügt es, das gesamte Verzeichnis zu löschen. Damit werden alle externen Bezüge (zu anderen Arbeitsmappen) entfernt.
Das folgende Skript erledigt das für die Datei, die als erstes Argument geliefert wird. Ohne Argument oder nur mit ‚-h’ gestartet, gibt das Programm die Usage-Meldung aus. Bisher nur in Englisch, weil sowieso niemand danach fragt.
Edit: Das Skript funktioniert, wenn das file-Kommando existiert und OOXML dem gültigen Magic-File bekannt ist.
Edit: Obsoletes $TMPDIR etc. aus dem skript entfernt.
Externe Bezüge sind im Unterverzeichnis "xl/externalLinks" definiert. Statt die XML-Dateien darin zu bearbeiten, genügt es, das gesamte Verzeichnis zu löschen. Damit werden alle externen Bezüge (zu anderen Arbeitsmappen) entfernt.
Das folgende Skript erledigt das für die Datei, die als erstes Argument geliefert wird. Ohne Argument oder nur mit ‚-h’ gestartet, gibt das Programm die Usage-Meldung aus. Bisher nur in Englisch, weil sowieso niemand danach fragt.
Edit: Das Skript funktioniert, wenn das file-Kommando existiert und OOXML dem gültigen Magic-File bekannt ist.
Code: Alles auswählen
#!/bin/bash
# ©2018-2018 Michael Uplawski <michael.uplawski@uplawski.eu>
#
# This script is distributed without any warranty, none of MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE, nor other. Use, copy, modify this script
# as you please but at your own risk.
#
# PSE keep intact my copyright notice.
SCRIPT=`basename "$0"`
USAGE="\nUSAGE: $SCRIPT spreadsheet.[xlsx, pmdx] [-o]\n\
\n\tWill create a copy of the said spreadsheet-file with all\n\
\treferences to external files removed.\n\
\tIf the option -o is given as last argument, the original\n\
\tfile is overwritten, instead, after confirmation by the user."
if [ $# -gt 0 ]
then
if [ -e "$1" ]
then
OFILE="$1"
if [ `file "$OFILE" | grep "OOXML" | wc -c` -gt 0 ]
then
FNAME=`basename "$OFILE"`
DNAME=`dirname "$OFILE"`
if [ "$2" == '-o' ]
then
NNAME="$FNAME"
else
NNAME=new_"$FNAME"
fi
if [ -e "$DNAME/$NNAME" ]
then
echo -e "\n\tATTN! Overwriting existing version of\n\t$DNAME/$NNAME?\n\
\tProceed (y/N)?"
read resp
if [ "$resp" != 'Y' -a "$resp" != 'y' ]
then
echo -e "\n\tOkay, doing nothing. Bye"
exit
fi
fi
#---------------------
echo -e "\topening $FNAME"
unzip $FNAME 1>/dev/null
echo -e "\tremoving external links"
rm -rf xl/externalLinks
echo -e "\tcreating new file"
zip -9r "$NNAME" \[Content_Types\].xml docProps _rels xl 1>/dev/null
mv -f "$NNAME" "$DNAME" 2>/dev/null
if [ -e "$DNAME/$NNAME" ]
then
echo -e "\n\tDONE! A new file $NNAME has been written to $DNAME\n"
else
echo -e "\tATTN! Something went wrong. The file has not been copied."
fi
#----------------------
else
echo -e "\n\tERROR! $OFILE is not in Microsoft® OOXML format!"
echo -e "\t(File-extensions associated with this file-format can be xlsx or pmdx)"
echo -e "\t$SCRIPT can not work with this file.\n"
fi
elif [ "$1" == "-h" -o "$1" == "--help" ]
then
echo -e $USAGE
else
echo -e "\n\tERROR: $1 does not exist\n\t(or is not a file)\n"
fi
else
echo -e "ERROR! Arguments missing."
echo -e $USAGE
fi