2017-05-08 3 views
1

내부 셀을 참조하는 방정식에서 데이터를 읽으려고합니다 (참조가 동일한 워크 시트의 셀과 다른 워크 시트의 셀 모두에 있음). openpyxl을 사용하지만 방정식에서 값을 읽으려고하면 값은 '없음'입니다. 먼저 통합 문서를 열면 링크 업데이트에 대한 메시지 상자가 나타납니다. 취소를 누르고 통합 문서를 저장하면 방정식으로 값을 읽을 수 있습니다. 수동으로 모든 통합 문서를 열고 저장하고 싶지 않습니다. openpyxl이 통합 문서를로드 할 때 내부 참조에 대한 방정식을 올바르게 평가할 수있는 방법이 있습니까? 여기openpyxl을 사용하여 방정식 링크를 업데이트하는 방법은 무엇입니까?

내가 통합 문서를로드하는 방법입니다

 import openpyxl 
    wbPath = [workbookpath] 
    workbook = openpyxl.load_workbook(wbPath, data_only=True) 

* 편집 :

import xlwings as xw 
import openpyxl 

#Open and save workbook with openpyxl 
wbPath = [WorkbookPath] 

wb = openpyxl.load_workbook(wbPath) 
wb.save(wbPath) 

#Use xlwings to open and compute equations 
wb = xw.Book(wbPath) 
app = xw.apps.active  
wb.save(wbPath)  
app.quit() 

이를 : 그냥 내가 openpyxl과 xlwings 패키지를 업데이트하기 위해 방정식을 얻기 위해 사용하는 코드를 추가하고 싶었 모든 방정식이 다시 생성되지만 나머지 통합 문서 조작에는 openpyxl을 사용할 수 있습니다.

+0

openpyxl은 공식을 평가하지 않습니다. http://openpyxl.readthedocs.io/en/latest/usage.html#using-formulae 필요한 경우 Excel 또는 머리가없는 LibreOffice를 통해 파일을 펌핑 할 수 있습니다. –

+0

실제로 xlwings을 사용하여 열기 및 닫기 프로세스에 한 단계 더 추가했습니다. 이제 openpyxl을 사용하여 내 통합 문서를 저장 한 다음 xlwings을 사용하여 통합 문서를 다시 열고 저장 한 다음 통합 문서를 닫습니다. – EliSquared

답변

1

불행히도 아니요, openpyxl으로는이 작업을 수행 할 방법이 없습니다. 모든 openpyxl은 Excel 파일에서 원시 데이터를 읽습니다. 따라서 파일을 열거 나 저장할 때 Excel에서 "캐시 된"버전의 계산을 저장합니다. openpyxl은 이것을 이용하여 마지막으로 계산 된 데이터를 반환 할 수 있지만 수식을 다시 계산하거나 다시 계산하지 않는 방식으로 "멍청한"상태를 유지합니다.

평가하려는 경우 기본 파서를 찾거나 써야하는 공식이나 런타임에 Excel과 상호 작용할 수있는 xlwings과 같은 것을 볼 수 있습니다.

+0

흠. 그래서 열려있는 파일은 다른 통합 문서에서 워크 시트, 값 및 수식을 복사 한 다음 통합 문서를 새 위치에 저장하여 openpyxl에서 실제로 만들었습니다. 저장시 방정식을 계산할 여지가 있습니까? 아니면 같은 문제입니까? 또는 파일을 반복하여 Excel 매크로를 작성한 다음 저장하면이 방정식을 올바르게 다시 평가할 수 있습니까? – EliSquared

+1

네, 절대적으로 이것이 바로 당신 문제입니다. 엑셀이 파일을 열어 본 적이 없어요. 프로그래밍 방식으로 Excel을 열고 닫는 것은 해결책 일 것입니다. 같은 문제입니다. openpyxl은 Excel의 수식을 구문 분석하고 계산하는 데 필요한 모든 논리를 갖추고 있지 않습니다. –

+1

감사합니다. xlwings을 사용하거나 별도의 매크로를 작성해야합니다. – EliSquared

관련 문제