[ERLEDIGT/Skript] Wie finden: Bezüge auf andere Arbeitsmappen

Antworten
Benutzeravatar
Michael Uplawski
Beiträge: 783
Registriert: 09.06.2010 14:27:54

[ERLEDIGT/Skript] Wie finden: Bezüge auf andere Arbeitsmappen

Beitrag von Michael Uplawski »

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.
Zuletzt geändert von Michael Uplawski am 03.03.2018 09:21:53, insgesamt 1-mal geändert.
Benutzeravatar
Michael Uplawski
Beiträge: 783
Registriert: 09.06.2010 14:27:54

Re: Wie finden: Bezüge auf andere Arbeitsmappen

Beitrag von Michael Uplawski »

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.

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
Edit: Obsoletes $TMPDIR etc. aus dem skript entfernt.
Antworten

Zurück zu „PlanMaker 2018 für Linux“