使用LibreOffice的'scalc'将制表符分隔的文本从命令行转换为Excel 参考文献来源

如何解决使用LibreOffice的'scalc'将制表符分隔的文本从命令行转换为Excel 参考文献来源

我有一个以LF终止,制表符分隔的输入文件,希望使用.xlsx转换为Excel格式(例如,OOXML scalc --headless)。

我知道诸如pyuno之类的其他选项,甚至还有this one之类的一些预先编写的脚本,但我认为没有理由为了完成我认为确定的事情而与Python混淆scalc可以使用内置的命令行选项。

这是我尝试过的无效的方法:

scalc --headless --convert-to xlsx input.tsv
scalc --headless --infilter=tsv --convert-to xlsx input.tsv
scalc --headless --infilter=tsv:Text --convert-to xlsx input.tsv
scalc --headless --infilter=Text:tsv --convert-to xlsx input.tsv  # --> Error: no export filter

最后两个是完整的猜测,因为,--infilter选项除了scalc --help输出中的两个示例外,没有关于--infilter="Calc Office Open XML" --infilter="Text (encoded):UTF8,LF,Liberation Mono,en-US" 选项的真实文档。

最后一个错误,但是在所有其他情况下,制表符不被识别为字段定界符,生成的Excel电子表格仅将所有数据串联在一起。

参考文献

解决方法

尽管没有令人失望的文献记载,但我能够从几个不同的来源整理这个可行的解决方案:

scalc --headless --infilter="Text - txt - csv (StarCalc):9" \
      --convert-to xlsx input.tsv

“ 9”是水平制表符的十进制ASCII control code。我使用python -c 'print(ord("\t"))'来找到它,尽管man ascii也可以。

详细的here中,可以将许多逗号分隔的选项传递给此过滤器:

╔══════════════╤══════════╤═══════════╤═════════════╤══════════════════╤═════════════════════╗
║ option (pos) │ sep. (1) │ quote (2) │ charset (3) │ 1st line (4)     │ cell format (5)     ║
╠══════════════╪══════════╪═══════════╪═════════════╪══════════════════╪═════════════════════╣
║ defaults (?) │ 44 (,)   │ 34 (")    │ 0 (system)  │ 1                │ null ("standard")   ║
╟──────────────┼──────────┼───────────┼─────────────┼──────────────────┼─────────────────────╢
║ example      │ 9 (tab)  │ 39 (')    │ 76 (UTF-8)  │ 2 (skip 1st row) │ 1/9 (skip 1st col.) ║
╚══════════════╧══════════╧═══════════╧═════════════╧══════════════════╧═════════════════════╝

例如,

scalc --headless --infilter="Text - txt - csv (StarCalc):9,39,76,2,1/9" \
      --convert-to xlsx input.tsv

将以单引号作为文本分隔符和UTF-8编码的制表符分隔的输入文件转换为Excel .xlsx文件,而跳过第一行和第一列。

如上所述,输入记录分隔符和引号字符是ASCII序数。可以查询here字符集的代码,但是可以查询0(系统默认值),1(Windows-1252),12(ISO-8859-1) ,而76(UTF-8)对于说英语的人来说很有趣。

用逗号分隔的选项字符串中的第五个位置“单元格格式”指定特定列的格式,并由正斜杠(col/fmt/col/fmt)分隔。 here对此进行了详细说明,但简要介绍了:

1   Standard
2   Text
3   MM/DD/YY
4   DD/MM/YY
5   YY/MM/DD
6   - (unused?)
7   - ("     ")
8   - ("     ")
9   ignore field (do not import)
10  US-English
    (',' as 1000s sep,'.' as decimal,regardless of locale)

此后,过滤器选项字符串中甚至还有 more 个值,这些值与导入/导出对话框中的各种选项有关,例如“引用字段为文本”。再次参考上面相同的OpenOffice wiki article进行解释,因为我在这里已经精疲力尽了。

来源

  • Linux Journal article使用pyuno,这使我无法使用Text - txt - csv (StarCalc)作为过滤器名称
    • 我基本上通过误入LibreOffice源代码树中的this directory来确证,其中定义了所有过滤器
  • https://wiki.openoffice.org/wiki/Documentation/DevGuide/Spreadsheets/Filter_Options
    • 具体来说,this section用于CSV过滤器
    • 不太有用地标记为“从OpenOffice 4.1.x开始不再有效”,但是当前足够仍可以解决我的问题
    • 这篇文章让我有了一个想法,尝试将Tab的ASCII序数作为--infilter字符串的“过滤器选项”部分的第一个字符
    • 我应该在2014年从this commit推断出我应该使用冒号作为定界符,并在--infilter的输出中添加了两个soffice --help例子

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)> insert overwrite table dwd_trade_cart_add_inc > select data.id, > data.user_id, > data.course_id, > date_format(
错误1 hive (edu)> insert into huanhuan values(1,'haoge'); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive> show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 <configuration> <property> <name>yarn.nodemanager.res