问题标签 [openpyxl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
13727 浏览

python - 使用python(openpyxl)从excel中删除网格线

我正在尝试从使用 openpyxl 创建的 excel 工作表中删除网格线,但它不起作用。我正在这样做:

该代码打印'False',但保存的文件显示网格线。

0 投票
4 回答
6984 浏览

python - 在 openpyxl 中使用 Optimized Writer 设置单元格格式和样式

我必须编写一个巨大的 Excel 文件,而我需要的是 openpyxl 中的优化编写器。

问题是:使用优化的编写器时是否可以设置单元格的样式和格式?样式并不那么重要(我只想突出显示列标题),但对于某些包含货币值的列,我需要正确的数字格式。我看到ws.cell()使用优化编写器时该方法不可用,那怎么办?

预先感谢您的帮助!

0 投票
8 回答
21164 浏览

python - 使用 Python 从 Excel (.xlsx) 中提取超链接

我一直在研究用于 Excel 文件操作的 xlrd 和 openpyxl 库。但是,xlrd 目前不支持formatting_info=True.xlsx 文件,所以我不能使用 xlrdhyperlink_map功能。所以我转向openpyxl,但也没有运气从excel文件中提取超链接。下面的测试代码(测试文件包含一个简单的 google 超链接,超链接文本设置为“test”):

输出:

我猜openpyxl目前也不完全支持格式化?是否有其他库可以用来从 Excel (.xlsx) 文件中提取超链接信息?

0 投票
1 回答
6248 浏览

python - openpyxl 行迭代器忽略 row_offset 参数?

我正在尝试筛选大量毫无价值的数据,并且我想让用户有机会自己设置偏移量。代码最终看起来像:

然而,在调用next(master_rows)[0]时,输出结果是:

基本上,偏移量似乎被完全忽略了,它总是从 0 开始。我做错了什么吗?

0 投票
2 回答
3617 浏览

python - 使用 Openpyxl 条件解析和输出 xlsx 文件

我正在研究一个研究项目的数据。输出为 .csv 文件的形式,这些文件已转换为 .xlsx 文件。每个参与者都有一个单独的输出文件,每个文件包含关于几十个(左右)刺激的大约 40 种不同测量的数据。为了理解收集到的数据,我们需要用相关的相关测量分别查看每个刺激。每个输出文件都很大(50 列 x 60000 行)。我正在寻找使用 openpyxl 解析数据库以搜索具有特定字符串值的预先指定列中的单元格。当找到这样的单元格时,将该单元格与同一行中的其他指定列一起写入新工作簿。

例如,解析下表,我正在尝试使用 openpyxl 在列 A 中搜索“幻灯片 2”。当为特定行找到此值时,该单元格将与同一行的 C 列和 D 列中的值一起写入新工作簿。

会写:

...或一些类似的格式。

我还希望用下一个文件中的数据填充 D 和 E 列,然后用文件中的数据填充 F 和 G (依此类推),但我可能可以弄清楚那部分。

我试过了:

还添加以下内容以尝试在内存中创建一个工作表,以在其中操作单元格:

...两者都有细微的变化,但它们都输出原始文件的副本。

我已经阅读并重新阅读了 openpyxl 的文档,但无济于事。这里的论坛上似乎也没有任何类似的问题。

任何正确操作和写入数据的见解将不胜感激。我也希望这可以帮助其他试图理解庞大数据集的人。提前致谢!

我在 Windows 7 上运行 Python3.3.2(64 位)和 openpyxl-1.6.2。数据最初为 .csv 格式,因此如果有帮助,可以导出为 .xls 或其他格式。我简要地研究了 xlutils(使用 xlwt 和 xlrd),但 openpyxl 对 xlsx 文件效果更好。


编辑

非常感谢@MikeMüller 指出我需要两个工作簿来传输数据。这更有意义。

我现在有以下内容,但它仍然返回一个空工作簿。原始单元格不是空白的。(注释行是为了简化 - 当然没有缩进 - 但无论哪种方式代码都不成功。)


编辑 2

我已经更新了代码以包含单元格的 .value,但它仍然返回一个空白工作簿。


下一个遇到麻烦的人的总结:

您需要在内存中创建两个工作表。一个用于导入您的文件,另一个用于写入新的工作簿文件。

使用 cell.value 调用函数将输入的文本提取到导入工作簿的每个单元格中,并将其设置为导出工作簿中所需的单元格。

确保从零开始计算行和列。

0 投票
1 回答
2861 浏览

python - 使用openpyxl读取为时间日期的浮动数值

我有一个 Excel 电子表格,其中有一个包含小 %f.2 值的字段,例如 1.2、1.07、2.3 等,出于某种原因,openpyxl 将这些单元格读取为 1900 日期。我已经多次看到这个问题被提出,但通常这些用户期待约会并且得到一个虚假的约会。我期待一个值,通常 x<10.0 并且我得到大约 30-40% 的“坏”数据(读取为时间日期),而其他时间则读取为数值。

我正在使用迭代器,所以我做了一个简单的 ws.iter_rows() 调用来一次提取一行数据。我试图将其“转换”为先前创建的包含数值的变量,但这并没有多大好处。

有没有人对如何克服这个零星问题提出建议。如果这是一个已知的错误,是否有任何已知的解决方法?

我发现如果我将文件存储为 csv,然后将其重新打开为 csv,然后将其重新存储为 xlsx,我最终会得到一个可以正确读取的文件。虽然这有助于调试代码,但我需要一个我的客户可以使用的解决方案,而无需跳过这些环节。

我认为如果列的格式不正确,它将适用于所有元素,因此间歇性发生这种情况会令人困惑。

这是我从 Excel 表中看到的输入

这是我的输出,您可以看到前七行将第二个字段表示为 1900 年的日期,而第 8-13 行将该字段正确显示为数字字段:

使用 python 3.3 和 openpyxl 1.6.2

0 投票
0 回答
82 浏览

python-3.x - 在单个脚本中第 67 次成功调用函数后出现 UnboundLocalError

我正在从 excel 表中提取大量数据,以写入另一个 excel 文件。脚本看起来像这样:

foo() 的功能不是问题,它运行良好。但是,该脚本在加载文件 77 后抛出了一个UnboundLocalError: local variable referenced before assignment错误(这将是该脚本中第 67 次调用该函数)。

excel 文件具有相同的布局,并且被提取的数据仅因值而异。除了任何脚本错误(我几乎可以肯定已经避免),是否有任何逻辑或溢出原因导致这样的错误只有在重复调用相同的函数后才会出现?

我目前正在重新运行脚本以查看错误是否重复,但需要几个小时才能到达同一点。如果结果不同,将更新。

在 WinXP 上使用 Python3.3 和 openpyxl-1.6.2 和 .xlsx 文件。(对我自己来说:脚本 v1.6.00)


编辑

再次查看源excel文件,发现由于导出原始数据出现问题,引发错误的文件被人为缩短。(备注显示数据采集计算机在写入数据时崩溃。)

foo() 逻辑的一部分包括存储特定单元格的行号以供以后操作。但是,在这个缩短的文件中,该行不存在,因此UnboundLocalError在稍后调用存储的行号时创建了一个。

出于我的目的,可以丢弃数据,从而解决问题。


概括

如果您确定您的代码没问题,请查看您的源文件是否存在任何潜在问题。

0 投票
12 回答
87067 浏览

python - 在 Python 中使用 openpyxl 将行插入 Excel 电子表格

我正在寻找使用 openpyxl 将行插入电子表格的最佳方法。

实际上,我有一个电子表格(Excel 2007),它有一个标题行,后面是(最多)几千行数据。我希望将该行作为实际数据的第一行插入,所以在标题之后。我的理解是 append 函数适用于在文件末尾添加内容。

阅读 openpyxl 和 xlrd(和 xlwt)的文档,除了手动循环内容并插入新工作表(在插入所需的行之后)之外,我找不到任何明确的方法来做到这一点。

鉴于我迄今为止对 Python 的有限经验,我试图了解这是否确实是最好的选择(最 Pythonic!),如果是这样,有人可以提供一个明确的例子。具体来说,我可以使用 openpyxl 读写行还是必须访问单元格?另外我可以(过)写相同的文件(名称)吗?

0 投票
14 回答
123832 浏览

python - 有没有办法使用 pandas.ExcelWriter 自动调整 Excel 列宽?

我被要求生成一些 Excel 报告。我目前大量使用 pandas 来处理我的数据,所以我很自然地想使用 pandas.ExcelWriter 方法来生成这些报告。然而,固定的列宽是一个问题。

到目前为止我的代码很简单。假设我有一个名为“df”的数据框:

我正在查看 pandas 代码,但我并没有看到任何设置列宽的选项。宇宙中是否有一个技巧可以使列自动调整到数据?或者,事后我可以对 xlsx 文件做些什么来调整列宽?

(我正在使用 OpenPyXL 库,并生成 .xlsx 文件——如果这有什么不同的话。)

谢谢你。

0 投票
0 回答
5009 浏览

python - 在 openpyxl 中获取格式化数据

我在使用 openpyxl 从 excel 工作表中提取样式时遇到问题,在下面的情况下,我正在创建一个电子表格,我可以看到格式正确,但我不知道如何取回该数据。

在我的真实用例中,我只是在读取一个文件——我不是创建它的人,所以我希望能够以编程方式检索格式。