如何将一系列数字包装到选定单元格的表格中?在 LibreOffice Calc 中

如何将一系列数字包装到选定单元格的表格中?在 LibreOffice Calc 中

在 LibreOffice Calc 中,如何将一系列数字包装到选定单元格的表中,以便它们停止在突出显示的行的末尾、表格的右侧结束处,并继续在其下方下一列的左侧停止?

这是它正在做的事情 - 我非常接近成功 - 但第一行的数字继续无休止地出现。见截图:

在此处输入图片描述

我需要他们在蓝色选择的末尾停止并在下面的下一个蓝色列中再次继续。

这里是ODT 文件

下面是一系列数字的示例:10、31、34、6、14、3、16、23、6、33、15、32,10、31、34、6、14、3、16、23、6、33、15、32,10、31、34、6、14、3、16、23、6、33、15、32,10、31、34、6、14、3、16、23、6、33、15、32,10、31、34、6、14、3、16、23、6、33、15、32,10、31、34、6、14、3、16、23、6、33、15、32,10、31、34、6、14、 3, 16, 23, 6, 33, 15, 32,10, 31, 34, 6, 14, 3, 16, 23, 6, 33, 15, 32,10, 31, 34, 6, 14, 3, 16, 23, 6, 33, 15, 32,10, 31, 34, 6, 14, 3, 16, 23, 6, 33, 15, 32,10, 31, 34, 6, 14, 3, 16, 23, 6, 33, 15, 32

-谢谢!

答案1

我开始相信在 LibreOffice 及其同类软件中使用脚本过于复杂。
基于 Python 的此类脚本import uno一开始会引用复杂的对象(!?)。

下面是一个基于 Python 的简单解决方案;
您可以将其用作纯 *.py 脚本的基础。

我把你的数字列表放在一个文件中

$ cat numsplit.txt
10, 31, 34, 6, 14, 3, 16, 23, 6, 33, 15, 32,10, 31, 34, 6, 14, 3, 16, 23, 6, 33, 15, 32,10, 31, 34, 6, 14, 3, 16, 23, 6, 33, 15, 32,10, 31, 34, 6, 14, 3, 16, 23, 6, 33, 15, 32,10, 31, 34, 6, 14, 3, 16, 23, 6, 33, 15, 32,10, 31, 34, 6, 14, 3, 16, 23, 6, 33, 15, 32,10, 31, 34, 6, 14, 3, 16, 23, 6, 33, 15, 32,10, 31, 34, 6, 14, 3, 16, 23, 6, 33, 15, 32,10, 31, 34, 6, 14, 3, 16, 23, 6, 33, 15, 32,10, 31, 34, 6, 14, 3, 16, 23, 6, 33, 15, 32,10, 31, 34, 6, 14, 3, 16, 23, 6, 33, 15, 32

然后写了一个“单行”命令从标准输入读取 250000 个字符,
然后我将其拆分成更易读的格式,
并将其放在一个文件中,...

$ cat numsplit.sh
python -c "\
import sys;\
nums=sys.stdin.read(250000).replace(' ','').split(',');\
lines=[nums[i:i+10] for i in range(0,len(nums),10) ];\
print('\n'.join([','.join(lst) for lst in lines]))"

... 像这样执行:

$ source numsplit.sh  <numsplit.txt
10,31,34,6,14,3,16,23,6,33
15,32,10,31,34,6,14,3,16,23
6,33,15,32,10,31,34,6,14,3
16,23,6,33,15,32,10,31,34,6
14,3,16,23,6,33,15,32,10,31
34,6,14,3,16,23,6,33,15,32
10,31,34,6,14,3,16,23,6,33
15,32,10,31,34,6,14,3,16,23
6,33,15,32,10,31,34,6,14,3
16,23,6,33,15,32,10,31,34,6
14,3,16,23,6,33,15,32,10,31
34,6,14,3,16,23,6,33,15,32
10,31,34,6,14,3,16,23,6,33
15,32

$

10python 代码中有两个,
将它们更改为任何合理的数字,您的行将包含该数量的项目。
replace(...)中间删除任何空格字符,
随后split(',')拆分(分离)项目。
然后再将其拆分为lines,每行一个项目列表,每行作为单独的列表。 print() 中的列表理解然后从中创建输出 列表列表

将输出导入到任何电子表格中,它将相应地创建数据表。

更多帮助,即使用剪贴板执行脚本的所有 IO

man xclip  
man xclipboard

当然,所有这些可以作为 LibrOffice-Calc 脚本的基础!
您需要弄清楚的只是如何从第一行单元格中获取数字,运行上述操作,最后将这些项目放回 Calc 中,而不是打印。

答案2

这是将值插入到 Calc 表中的 python-uno 代码,借用了其他答案中的一些代码。

import uno

MAXCOL = 'O'  # from the screenshot in the question
nums = (
    10, 31, 34, 6, 14, 3, 16, 23, 6, 33, 15, 32,10, 31, 34, 6, 14, 3, 16,
    23, 6, 33, 15, 32,10, 31, 34, 6, 14, 3, 16, 23, 6, 33, 15, 32,10, 31,
    34, 6, 14, 3, 16, 23, 6, 33, 15, 32,10, 31, 34, 6, 14, 3, 16, 23, 6,
    33, 15, 32,10, 31, 34, 6, 14, 3, 16, 23, 6, 33, 15, 32,10, 31, 34, 6,
    14, 3, 16, 23, 6, 33, 15, 32,10, 31, 34, 6, 14, 3, 16, 23, 6, 33, 15,
    32, 10, 31, 34, 6, 14, 3, 16, 23, 6, 33, 15, 32,10, 31, 34, 6, 14, 3,
    16, 23, 6, 33, 15, 32,10, 31, 34, 6, 14, 3, 16, 23, 6, 33, 15, 32)
MAXCOLNUM = ord(MAXCOL) - ord('A') + 1
lines = [nums[i:i+MAXCOLNUM]
    for i in range(0, len(nums), MAXCOLNUM)]
oSheet = XSCRIPTCONTEXT.getDocument().getSheets().getByIndex(0)
for row, line in enumerate(lines):
    for col in range(len(line)):
        oCell = oSheet.getCellByPosition(col, row)
        oCell.setValue(line[col])

我不确定为什么 @Hannu 认为 python-uno 过于复杂。对我来说,代码看起来很容易理解,而且不需要以这种方式创建中间文件。与 MS Office VBA 相比,UNO API 通常被认为是较低级别的,因此对于简单任务来说可能更难,但对于高级任务来说则更好。

这可以使用电子表格公式而不是脚本来完成。为此,请MOD使用电子表格函数例如INDIRECT获取每个单元格的适当值。这是否更容易取决于您需要的具体内容。

相关内容