2014-04-28 23 views
6

tôi in một số công thức trong một trong những tờ Excel:Openpyxl 1.8.5: Đọc kết quả của một công thức gõ vào một tế bào sử dụng openpyxl

wsOld.cell(row = 1, column = 1).value = "=B3=B4" 

Nhưng tôi không thể sử dụng kết quả của nó trong việc thực hiện một số logic khác , như:

if((wsOld.cell(row=1, column=1).value)='true'): 
    # copy the 1st row to another sheet 

Ngay cả khi tôi đang cố gắng để in kết quả trong dòng lệnh, tôi kết thúc in công thức:

>>> print(wsOld.cell(row=1, column=1)) 
>>> =B3=B4 

Làm thế nào tôi có thể nhận được kết quả của công thức trong một ô chứ không phải chính công thức?

Trả lời

12

hỗ trợ openpyxl hoặc công thức hoặc giá trị của công thức. Bạn có thể chọn sử dụng cờ data_only khi mở sổ làm việc. Tuy nhiên, openpyxl không và sẽ không tính kết quả của một công thức. Có những thư viện như pycel có ý định làm điều này.

+4

FWIW, như tài liệu trong 'openpyxl.load_workbook()', giá trị mà bạn nhận được khi mở một Workbook với 'data_only = True 'là" giá trị được lưu trữ trong lần cuối Excel đọc trang tính "#:. Điều này dựa trên một tính năng bộ nhớ đệm của .xls [x/m/...] tập tin (về mà tôi tìm thấy tài liệu ở khắp mọi nơi ngoại trừ tại Microsoft). – Tibo

1

Openpyxl không hỗ trợ excel 100% để tính công thức. Nó chỉ hỗ trợ các công thức rất cơ bản. Nếu bạn muốn tính toán tất cả công thức trong sổ làm việc, bạn nên sử dụng thư viện xlwings.

1

tôi đã giải quyết được vấn đề sử dụng một sự kết hợp của openpyxl và gấu trúc:

import pandas as pd 
import openpyxl 
from openpyxl import Workbook , load_workbook 


source_file = "Test.xlsx" 
# write to file 
wb = load_workbook (source_file) 
ws = wb.active 
ws.title = "hello world" 
ws.append ([10,10]) 
wb.save(source_file) 

# read from file 
df = pd.read_excel(source_file) 
sum_jan = df ["Jan"].sum() 
print (sum_jan) 
Các vấn đề liên quan