使用Openpyxl将IF公式插入excel后出现“@”符号

2024-01-10

我的目标是使用 Openpyxl 将此公式输入到 Excel 中。

=CORREL(IF(A2:A7;A2:A7);B2:B7)

IF 公式的原因是忽略内部有 0 的单元格,默认情况下 CORREL 函数不会忽略这些单元格。

当将此公式插入 Excel 时,输出实际上是:

=CORREL(IF(@A2:A7;A2:A7);B2:B7)

如果在给定范围的同一行(此处为第 2-7 行)的单元格中输入公式,则该公式仍然有效。但给出#VALUE!当放在另一行时。手动删除“@”可以解决问题,但不可行,因为我想用它来自动分析。

我发现在某些情况下,Excel 为数组添加了“@”,并替换为“[#This Row]”Excel 2010 之前的版本 https://superuser.com/questions/501691/what-does-the-bar-foo-operator-do-in-excel-in-particular-the-at-sign,这解释了为什么在同一行输入公式时会起作用。 当公式不被识别。 https://stackoverflow.com/questions/61705150/openpyxl-is-inserted-to-formula-when-saving-to-file但是,这两个链接都没有解释为什么在我的示例中添加“@”。

这是在 IF 函数中使用范围的副作用吗?这是将范围解析为 IF 函数的错误(/功能)吗?

这是我用来复制错误的代码。我的 Openpyxl 版本是 3.0.5,我使用 Microsoft 365 中的 Excel。

from openpyxl import Workbook
wb = Workbook()
ws = wb.active
rows = [
    ['Size', 'Batch 1', 'Batch 2'],
    [2, 40, 30],
    [0, 40, 25],
    [0, 50, 30],
    [5, 30, 25],
    [6, 25, 35],
    [7, 20, 40],
]

for row in rows:
    ws.append(row)

formula = '=CORREL(IF(A2:A7,A2:A7),B2:B7)'
ws.cell(row=5, column=5, value=formula) # Formula in row 5 works
ws.cell(row=9, column=5, value=formula) # Formula in row 9 returns #VALUE!
formula = '=CORREL(A2:A7,B2:B7)'
ws.cell(row=6, column=5, value=formula) # CORREL function with ranges works fine
formula = '=IF(A2:A3,A2:A3)'
ws.cell(row=7, column=5, value=formula) # enters "=@IF(@A2:A3;A2:A3)"
formula = '=IF(A2,B2)'
ws.cell(row=8, column=5, value=formula) # enters "=IF(A2;B2)"

wb.save("test.xlsx")

在“test.xlsx”中,这是我的输出(单元格 E5-E9)

-0.9528
-0.9528
#VALUE!
40
#VALUE!

以及公式:

=CORREL(IF(@A2:A7;A2:A7);B2:B7)
=CORREL(A2:A7;B2:B7)
=@IF(@A2:A3;A2:A3)
=IF(A2;B2)
=CORREL(IF(@A2:A7;A2:A7);B2:B7)

在这里回答我自己的问题。谢谢JvdV https://stackoverflow.com/users/9758194/jvdv让我走上正确的道路。

In this https://stackoverflow.com/a/57441549/回答我发现什么解决了我的问题。我在示例代码中保存 Excel 文件之前添加了这一行:

ws.formula_attributes['E9'] = {'t': 'array', 'ref': "E9:E9"}

这实质上将单元格“E9”中的公式设置为读取为数组公式,该公式在 Excel 中通过大括号 ({}) 之间的公式显示。在旧版本的 Excel 中,这是通过在输入公式时按 ctrl-shift-enter 来完成的。请注意,在公式字符串中写入这些花括号不起作用。

如果有人知道“ref”部分是如何工作的,请随时在评论中添加它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Openpyxl将IF公式插入excel后出现“@”符号 的相关文章

随机推荐

  • Adobe Air SDK 在页面加载时调整窗口大小

    我需要将 html 页面上的 adobe air sdk 窗口的大小调整为特定的像素高度和宽度 不在应用程序描述符中查找初始窗口 我不太擅长编码 所以有人可以给我代码吗 我认为这将是一个 JavaScript 函数 提前致谢 没有意识到我可
  • 创建连接池TypeOrm

    如何使用TypeOrm创建连接池 在探索 TypeOrm 时 我想创建连接池以使用 MySql 下面是代码片段 import createConnection from typeorm export const databaseProvid
  • 为什么将 body 标签的样式设置为“position:relative”会导致绝对定位的 div 开头较低?

    如果我制作一个 div 在页面顶部 有一个margin top 10px 然后是一个绝对定位的 div 即位于较高的 z index 上且位于该 div 之外 在该 div 的父级之外 开始不于top 0px but at 10px htt
  • 如何确定给定 JDBC 连接的数据库类型?

    我需要处理返回三个数据库 Oracle sybase MS Server 的存储过程 函数的结果集 Oracle 中的过程 函数大体相同 但调用略有不同 statement registerOutParameter 1 oracle jdb
  • 使用文件部分中自定义页面中的两个/多个选定目录

    我需要创建两个目的地的自定义页面 我已经搞定了 define MyAppName TESTPROG Setup AppName MyAppName DefaultDirName C test MyAppName DefaultGroupNa
  • 使用导航组件时动态更改工具栏后退箭头图标的颜色

    因此 我有单个活动应用程序 其中单个工具栏放置在活动布局中 如果还没有片段被夸大 下一个代码仅适用于更改导航图标按钮的颜色 binding toolbar setNavigationIconTint ContextCompat getCol
  • 在 Prolog 中将列表拆分为两个长度相等的列表

    我正在 Prolog 中编写一个谓词 将一个列表分为两个长度相等的列表 例如 div 1 2 3 4 X Y X 1 2 Y 3 4 这是我的代码 但它不起作用 div L L1 L length L length L1 div H T H
  • 无法在 Selenium WebDriver 中使用 gettext 提取文本,也无法单击它

    我找不到gettextSelenium WebDriver 中的以下代码 a class blueTextNormal1 spc title 079 Country a 我想获得 Country 的值 我尝试使用xpath driver f
  • 将 MTLTexture 转换为 CVPixelBuffer

    我目前正在使用 Metal 开发实时滤波器 定义 CIImage 后 我将图像渲染到 MTLTexture 下面是我的渲染代码 context是由 Metal 支持的 CIContext targetTexture是附加到的纹理的别名cur
  • useNavigate() 只能在 组件的上下文中使用

    请参阅下面的我的代码 我正在尝试添加这个返回上一页的按钮react router dom但我收到以下错误 并且我网站上的所有组件都消失了 Error useNavigate 只能在组件上下文中使用 My code function App
  • 我应该使用像 IEnumerable 这样的接口,还是像 List<> 这样的具体类

    我最近在其他地方表达了我对此的看法 但我认为它值得进一步分析 因此我将其作为自己的问题发布 假设我需要在程序中创建并传递一个容器 我可能对一种容器与另一种容器没有强烈的看法 至少在现阶段是这样 但我确实选择了一种 为了便于讨论 假设我要使用
  • RestKit 派生数据问题

    我正在尝试使用 Restkit 我已按照此处的安装说明进行操作 https github com RestKit RestKit wiki Installing RestKit in Xcode 4 x https github com R
  • 导航抽屉标题未隐藏

    我尝试使用抽屉菜单创建一个简单的应用程序 我使用 Android Studio 创建了一个项目并选择导航抽屉布局 我试图隐藏导航抽屉标题并将其放在工具栏上 我找到了放在工具栏上的方法 但我找不到图片中标题的隐藏红色部分 你能帮我吗 这是我的
  • WinAPI 确定文件是否可访问/私有的方法

    在 win32 c 中 有没有办法确定文件夹 文件是否可访问 您知道如果您尝试访问 C Windows 目录中的某个文件夹 您将收到一个弹出窗口 提示 此文件夹无法访问 也许有一个文件属性常量表明该文件是私有的 也许类似 FILE ATTR
  • 我可以使用什么库来进行简单、轻量级的消息传递?

    我将启动一个需要分布式节点之间通信的项目 该项目是用 C 编写的 我需要一个轻量级消息传递库来在节点之间传递非常简单的消息 基本上只是文本字符串 图书馆必须具备以下特点 无需外部设置 我需要能够在我的代码中启动并运行所有内容 我不想要求用户
  • 如何更新 Quartz JobDataMap 中的值?

    我使用的是quartz scheduler 1 8 5 我创建了一个实现 StatefulJob 的作业 我使用 SimpleTrigger 和 StdSchedulerFactory 来安排作业 看来除了 JobDetail 的 JobD
  • 在node.js上进行一些身份验证后,如何避免请求流数据丢失?

    请求流如何与node js express或restify 一起工作 当客户端尝试将音频 mpeg 或其他二进制文件上传到服务器时 请求应该是服务器上的可读流 我们可以使用管道进入另一个流request pipe 例如 从请求中获取文件 然
  • 从哈希图中删除元素时出现 java.util.ConcurrentModificationException

    我正在学习HashMap类并编写了这个简单的程序 这段代码适用于向散列映射添加元素 并且在从散列映射中删除元素时 我遇到了java util ConcurrentModificationException例如 这是我的终端的副本 ravi
  • AWT 机器人无法拖动窗口

    我正在尝试使用 AWT 机器人移动 Windows 资源管理器窗口 该机器人运行Java 7 操作系统为Windows 7 我可以移动鼠标并单击某些内容 但是当我尝试单击并拖动时 它似乎根本没有按下按钮 我看不出出了什么问题 或者想不出如何
  • 使用Openpyxl将IF公式插入excel后出现“@”符号

    我的目标是使用 Openpyxl 将此公式输入到 Excel 中 CORREL IF A2 A7 A2 A7 B2 B7 IF 公式的原因是忽略内部有 0 的单元格 默认情况下 CORREL 函数不会忽略这些单元格 当将此公式插入 Exce