我正在使用openpyxl来读取单元格值(excel addin-webservice更新此列.)
我已经使用data_only = True但它没有显示当前单元格值,而是它是上次Excel读取工作表时存储的值.
wbFile = openpyxl.load_workbook(filename = xxxx,data_only=True)
wsFile = wbFile[c_sSheet]
Run Code Online (Sandbox Code Playgroud)
我如何读取单元格的实际值?
Vitals:python 3.4.3 | openpyxl 2.2.3 | Excel 2013
就像每个人都知道你可以使用Excel的填充句柄快速设置列[1,2,3,4,5,6等]中的数字系列,这也适用于公式[= sum(B1,C1), = sum(B2,C2),= sum(B3,C3)等.但是,当我尝试使用openpyxl来使用Excel中的填充句柄添加公式时,报告这些单元格为空.
它不适用于我的原始代码,因此我创建了一个包含以下内容的简单脚本:
for row in ws.rows:
for cell in row:
print('my value is:',cell.value)
Run Code Online (Sandbox Code Playgroud)
并针对这个微小的(aww)Excel文件运行它.我使用A1上的填充手柄用公式填充A2-A5.(我只是为了清晰显示公式,我在A栏中实际看到的是结果.)
# A B C
1 =SUM(B1:C1) 1 2
2 =SUM(B2:C2) 10 20
3 =SUM(B3:C3) 20 25
4 =SUM(B4:C4) 90 42
5 =SUM(B5:C5) 64 4
Run Code Online (Sandbox Code Playgroud)
这是控制台中的输出:
my value is: =SUM(B1:C1)
my value is: 1
my value is: 2
my value is: =SUM(B2:C2)
my value is: 10
my value is: 20
my value is: =
my …Run Code Online (Sandbox Code Playgroud) 因为我需要解析然后使用单元格中的实际数据,所以我openpyxl用data_only = True.
事实证明,这非常有用。但是,现在同样需要在单元格中包含公式的 xlsm,当我保存更改时,保存的版本中缺少公式。
是data_only = True和公式相互排斥?如果没有,如何在保存时访问单元格中的实际值而不会丢失公式?
当我说我丢失了公式时,似乎公式的结果(总和、串联等)得到了保留。但是当单击单元格时不再显示实际的公式本身。
更新:
为了确认公式是否被保留,我重新打开了保存的 xlsm,这次data_only左为False. 我检查了value使用公式构建的单元格的 。如果保留了公式,打开将 data_only 设置为 False 的 xlsm 应该会返回公式。但它返回实际的文本值(这不是我想要的)。
我正在使用 openPyXl 库,我想存储单元格值,而不是其公式。在我想阅读的单元格中有公式
=COUNTIF(C4:C21,"M")
Run Code Online (Sandbox Code Playgroud)
它返回 0,但是当我从 python 读取它时
read=sheet['C28'].value
Run Code Online (Sandbox Code Playgroud)
它再次返回我 =COUNTIF(C4:C21,"M")。如果我尝试简单地
read=sheet['C28']
Run Code Online (Sandbox Code Playgroud)
它返回我
<Cell 'Sheet1'.C28>
Run Code Online (Sandbox Code Playgroud)
我怎么能得到0呢?
谢谢