将 ods 更改为 txt,ods 中的所有列均使用制表符分隔符正确分布

将 ods 更改为 txt,ods 中的所有列均使用制表符分隔符正确分布

我知道有人问过类似的问题,但似乎对我不起作用。我尝试过 odt2txt、unoconv 和转换为 .csv 而不是 .txt。我需要找到一种方法(在 bash 脚本内)将 ods 文件更改为 txt 文件,其中 ods 中的所有列都使用制表符分隔符正确分布,并且行也位于正确的位置。但迄今为止的每一次尝试都错误地转换了文件。

提前致谢

我将提供一个示例输入和输出,但本质上我只是希望它们看起来相同,但输入是 ods 中的多列,输出具有相同的列,但作为制表符分隔的文本文件。

某些列之间会有一些空行(以防这可能导致问题)

答案1

使用egunoconv将其转换为CSV,然后将CSV 转换为制表符分隔的列。

unoconv下面是一个使用Python 实现此目的的Bash 脚本:

#!/bin/bash
if [ $# -lt 1 -o "$1" = "-h" -o "$1" = "--help" ]; then
    exec >&2
    printf '\n'
    printf 'Usage: %s [ -h | --help ]\n' "$0"
    printf '       %s FILE.ods [ ... ] [ > output.txt ]\n' "$0"
    printf '\n'
    exit 0
fi

unoconv --stdout -f csv "$@" | python -c '
import sys
import csv
from string import maketrans
whitespace = maketrans("\t\r\n", "   ")
def fix(s):
    return str(s).translate(whitespace)
for row in csv.reader(sys.stdin):
    print("\t".join(map(fix, row)))'

这个是偏执的,因为它确保字段不包含制表符或换行符(如果确实出现,则用空格替换),否则会混淆输出。

如果您将以上内容(暂时)保存为ods2tsv,则可以使用以下命令安装它

sudo install -o root -g root -m u=rwx,g=rx,o=rx ods2tsv /usr/bin/ods2tsv

你可以使用它,例如

ods2tsv somefile.ods > your.txt

相关内容