在 LibreOffice Calc 中将 STRING 重铸为 VALUE

Posted

技术标签:

【中文标题】在 LibreOffice Calc 中将 STRING 重铸为 VALUE【英文标题】:Recasting a STRING into a VALUE in LibreOffice Calc 【发布时间】:2018-12-31 03:34:53 【问题描述】:

我有一个 Python 类,它可以对数字进行货币转换和字符串格式化。它接受多态输入,但只输出一个字符串化的数字。我可以很容易地将这些字符串化数字推送到 Python 中的 LibreOffice Calc:

stringifiednumber = str("1.01")
cell_a1 = sheet1.getCellRange("A1")
cell_a1.String = stringifiednumber

这实际上工作得很好,因为 Calc 中的内置货币格式可以很好地处理字符串化的数字。

不起作用的是公式,或者有点不起作用。调用 SUM(A1:A2) 将看不到字符串化的 A1。有一个解决方法(请原谅我来晚了,我完全忘记了,但它类似于:)=SUMRECORD(VALUE(A1:A2))

据我了解,每个单元格都有一个数字、字符串和公式的内存位置。该公式仅作用于VALUE 内存位置。

通过电子表格 UI,我可以在复制过程中将一种单元格类型转换为另一种。为此,我只需将以下公式放入 A2 中,并将 STRING(A1) 转换为 VALUE( A2)

# formula placed in A2

    =VALUE(A1)

但这只能通过将一个单元格复制到另一个单元格来实现。显然,电子表格中有一个内部重铸函数在复制期间进行转换。

我想要做的是,将一个字符串化的数字写入电子表格(如上),然后从 Python 调用电子表格的本地重铸函数,以便从 STRING(A1) 重铸 VALUE(A1)。

如果我知道重铸函数是什么,我可以在每次写入字符串后调用它。这将使 UI 中的宏像用户期望的那样工作。

如果您的答案是:“在 Python 端进行类型转换”,我已经考虑过了,这不是我要寻找的解决方案。

【问题讨论】:

请澄清sheet1 的来源。根据Calc API,电子表格中没有getCellRange 方法。只有getCellByPosition 获取单个单元格,getCellRangeByName 获取单元格范围。并且单个单元格提供setValuesetFormula 以及setString 【参考方案1】:

根据你的标题,乘以1

【讨论】:

感谢您的回复。原谅我的无知,但是你能给我一个例子,告诉 Calc 在 python 中将一个单元格乘以 1。或者基本的。不知道你是绑定了论坛,还是有API特定的函数或者算子什么的。

以上是关于在 LibreOffice Calc 中将 STRING 重铸为 VALUE的主要内容,如果未能解决你的问题,请参考以下文章

如何从命令行 Python 脚本将所有工作表保存在 LibreOffice Calc 电子表格中

libreoffice 在带有表格边缘的命令行中将 xlsx 转换为 pdf

LibreOffice (Calc) VBA 单元格总和(按索引)

用于 Libreoffice-calc 和 Openoffice-calc 的 Python“Hello World”[关闭]

用于 CSV 导入的 Libreoffice Calc 模板

如何让 LibreOffice 无头 Calc 计算以保存 uno 的新值?