2021-04-27 11:25:55 +02:00
|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
usage() {
|
|
|
|
cat << EOF
|
|
|
|
|
|
|
|
USAGE:
|
|
|
|
$0 [options]
|
|
|
|
|
|
|
|
OPTIONS:
|
|
|
|
-i Input file (required)
|
|
|
|
-o Output file (required)
|
|
|
|
-v Verbose
|
|
|
|
-h Show this help
|
|
|
|
|
|
|
|
EOF
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
error() {
|
|
|
|
if [ -n "$1" ]; then
|
|
|
|
printf "%s\\n" "$1" >/dev/stderr
|
|
|
|
fi
|
|
|
|
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
2021-04-27 12:08:17 +02:00
|
|
|
exitIfEmpty() {
|
2021-04-27 11:25:55 +02:00
|
|
|
if [ -z "$1" ]; then
|
|
|
|
error "$2"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
log() {
|
|
|
|
if [ "$VERBOSE" -eq 1 ]; then
|
|
|
|
printf "%s\\n" "$1"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
unzipExcel() {
|
|
|
|
if [ "$VERBOSE" -eq 0 ]; then
|
|
|
|
verbosity=-qq
|
|
|
|
fi
|
|
|
|
|
|
|
|
unzip $verbosity -d "$TEMP_DIRECTORY/excel" "$INPUT_FILE"
|
|
|
|
}
|
|
|
|
|
|
|
|
createExcel() {
|
|
|
|
current_dir="$(pwd)"
|
|
|
|
|
|
|
|
if [ "$VERBOSE" -eq 0 ]; then
|
|
|
|
verbosity=-q
|
|
|
|
fi
|
|
|
|
|
|
|
|
cd "$TEMP_DIRECTORY/excel"
|
|
|
|
zip $verbosity -r "../result.xslx" ./*
|
|
|
|
cd "$current_dir"
|
|
|
|
mv "$TEMP_DIRECTORY/result.xslx" "$OUTPUT_FILE"
|
|
|
|
|
|
|
|
log "$OUTPUT_FILE generated"
|
|
|
|
}
|
|
|
|
|
|
|
|
createTmpDirectory() {
|
|
|
|
TEMP_DIRECTORY="$(mktemp -d)"
|
|
|
|
log "Temp directory created: $TEMP_DIRECTORY"
|
|
|
|
}
|
|
|
|
|
|
|
|
removePassword() {
|
|
|
|
sed -i 's#<sheetProtection[^>]*>##' "$1"
|
|
|
|
}
|
|
|
|
|
|
|
|
removePasswords() {
|
|
|
|
grep -Rn sheetProtection "$TEMP_DIRECTORY" | cut -d: -f1 | while read -r file; do
|
|
|
|
removePassword "$file"
|
|
|
|
log "Password removed in: $file"
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
|
|
|
cleanUp() {
|
|
|
|
rm -fr "$TEMP_DIRECTORY" && log "Temp directory removed: $TEMP_DIRECTORY"
|
|
|
|
}
|
|
|
|
|
|
|
|
ERROR=0
|
|
|
|
VERBOSE=0
|
|
|
|
|
|
|
|
while getopts "hvi:o:" option; do
|
|
|
|
case "$option" in
|
|
|
|
i) INPUT_FILE="$OPTARG";;
|
|
|
|
o) OUTPUT_FILE="$OPTARG";;
|
|
|
|
h) usage; exit 0;;
|
|
|
|
v) VERBOSE=1;;
|
|
|
|
:) ERROR=1;;
|
|
|
|
?) ERROR=1;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
2021-04-27 12:10:08 +02:00
|
|
|
if [ "$ERROR" -eq 1 ]; then
|
|
|
|
error "$(usage)"
|
2021-04-27 11:25:55 +02:00
|
|
|
fi
|
|
|
|
|
2021-04-27 12:08:17 +02:00
|
|
|
exitIfEmpty "$INPUT_FILE" "Input file is missing (-i)"
|
2021-04-27 13:28:50 +02:00
|
|
|
exitIfEmpty "$OUTPUT_FILE" "Output file is missing (-o)"
|
2021-04-27 11:25:55 +02:00
|
|
|
|
|
|
|
if [ ! -f "$INPUT_FILE" ]; then
|
|
|
|
error "No such file: $INPUT_FILE"
|
|
|
|
fi
|
|
|
|
|
|
|
|
createTmpDirectory
|
|
|
|
unzipExcel
|
|
|
|
removePasswords
|
|
|
|
createExcel
|
|
|
|
cleanUp
|