programing

Excel 시트를 열지 않고 계산(openpyxl 또는 xlwt)

lastcode 2023. 8. 15. 11:09
반응형

Excel 시트를 열지 않고 계산(openpyxl 또는 xlwt)

.xls 파일을 열고 새 값을 몇 개 쓴 다음 파일을 저장하는 스크립트를 만들었습니다.

나중에 스크립트가 다시 열리며 수식이 포함된 일부 셀에서 답을 찾습니다.

가 그 즉, 내그셀가만 openpyxl부른나, 공얻게됩니다을식면는다로약을▁(▁if됩니다▁formula,얻, ie▁with공을게식나는▁the,▁i▁open▁that▁getpypy▁cellx면▁i)."=A1*B1") 그리고 내가 활성화되면,data_only난 아무것도 얻지 못합니다.

Python이 .xls 파일을 계산할 수 있는 방법이 있습니까?(또는 PyXll을 사용해 봐야 합니까?)

실제로 Excel 공식을 가져와서 Python을 사용하여 평가하는 프로젝트가 있습니다.파이셀 Pycel은 (COM을 통해) Excel 자체를 사용하여 공식을 추출하므로, 당신의 경우에는 그 부분을 건너뛸 수 있습니다. 그 프로젝트는 아마도 당신이 사용할 수 있는 유용한 것을 가지고 있을 것이지만, 나는 그것의 성숙도나 완성도를 장담할 수 없습니다.그것은 일반 대중을 위해 개발된 것이 아닙니다.

또한 Pycel과 OpenPyXL을 기반으로 하는 코알라라는 새로운 프로젝트가 있습니다.

Excel을 사용할 수 없지만 공식의 결과를 직접 계산할 수 있다면(파이썬 코드에서) 셀에 값과 공식을 모두 쓰는 것입니다(파일을 읽을 때 값을 풀하기만 하면 공식에 전혀 걱정할 필요가 없습니다).이 글을 쓰는 현재, 저는 OpenPyXL에서 그것을 하는 방법을 찾지 못했지만, XlsxWriter는 그것을 할 수 있습니다.설명서에서 다음을 참조하십시오.

XlsxWriter는 공식의 값을 계산하지 않고 값 0을 공식 결과로 저장합니다.그런 다음 파일을 열 때 모든 공식과 함수를 다시 계산해야 한다는 내용의 글로벌 플래그를 XLSX 파일에 설정합니다.이 방법은 Excel 설명서에서 권장하는 방법이며 일반적으로 스프레드시트 응용 프로그램에서 잘 작동합니다.그러나 Excel Viewer와 같이 공식을 계산할 수 있는 기능이 없는 응용 프로그램이나 일부 모바일 응용 프로그램은 0 결과만 표시합니다.

필요한 경우 옵션 값 매개 변수를 사용하여 공식의 계산된 결과를 지정할 수도 있습니다.수식의 값을 계산하지 않는 비 Excel 응용 프로그램을 사용할 때 이 기능이 필요한 경우가 있습니다.계산된 값은 인수 목록의 끝에 추가됩니다.

파일 형식.write_formula('A1', '=2+2', num_format, 4)

이때 이접방사값을면때읽을용하 OpenPyXL을 할 수 .data_only.읽는 : (할 수 xlrd를 사용할 수 있습니다.)

마지막으로 Excel을 사용하는 경우 가장 간단하고 신뢰할 수 있는 방법은 Excel에서 파일 열기 및 재저장을 자동화하는 것입니다. 그러면 공식의 값을 계산하고 기록할 수 있습니다.xlwings는 Windows 또는 Mac에서 쉽게 이 작업을 수행할 수 있는 방법입니다.

저는 이 질문이 오래된 것이라는 것을 알지만, 저는 같은 문제에 부딪혔고 광범위한 검색을 해도 답이 나오지 않았습니다.

그 해결책은 사실 매우 간단하기 때문에 저는 이것을 후세를 위해 여기에 게시할 것입니다.

를 들어 xlsx 파일을 openpyxl 했듯이.openpyxl수식을 계산하지 않지만 파일을 excel로 열면 수식이 자동으로 계산됩니다.따라서 파일을 열고 Excel을 사용하여 저장하기만 하면 됩니다.

이를 위해 다음을 사용할 수 있습니다.win32com모듈.

import win32com.client as win32

excel = win32.gencache.EnsureDispatch('Excel.Application')
workbook = excel.Workbooks.Open(r'absolute/path/to/your/file')
# this must be the absolute path (r'C:/abc/def/ghi')
workbook.Save()
workbook.Close()
excel.Quit()

바로 그겁니다.저는 파이셀이나 코알라를 사용하자는 제안을 모두 보았습니다. 하지만 엑셀에게 열고 저장하라고만 하면 된다면 그건 좀 지나친 것 같습니다.

이 솔루션은 창에만 해당됩니다.

공식 모듈은 저에게 적합합니다.자세한 내용은 https://pypi.org/project/formulas/ 을 참조하십시오.

from openpyxl import load_workbook
import formulas

#The variable spreadsheet provides the full path with filename to the excel spreadsheet with unevaluated formulae
fpath = path.basename(spreadsheet) 
dirname = path.dirname(spreadsheet)
xl_model = formulas.ExcelModel().loads(fpath).finish()
xl_model.calculate()
xl_model.write(dirpath=dirname)
#Use openpyxl to open the updated excel spreadsheet now
wb = load_workbook(filename=spreadsheet,data_only=True)
ws = wb.active

저는 같은 문제에 부딪혔고, 얼마간의 조사 끝에 pyoo(https://pypi.org/project/pyoo/ )를 사용하게 되었는데, 이는 모든 플랫폼에서 사용할 수 있는 오픈오피스/libreoffice용이며, 기본적으로 통신할 수 있고 파일을 저장/닫을 필요가 없기 때문에 더 간단합니다. 다른 여러 라이브러리를 시도했지만 다음과 같은 문제를 발견했습니다.

  • xlswings:Excel과 Windows/MacOS가 설치되어 있어서 평가할 수 없는 경우에만 작동합니다.
  • 코알라: 네트워크 x 2.4 업데이트 후에 고장난 것 같습니다.
  • openpyxl:다른 사람들이 지적했듯이 공식을 계산할 수 없기 때문에 pycel과 결합하여 값을 구하는 것을 알아보고 있었습니다.pyoo를 발견해서 최종적으로 시도하지 않았습니다. pycel도 networkx 라이브러리에 의존하고 있기 때문에 Openpyxl+pycel은 현재 작동하지 않을 수 있습니다.

아니요, 그리고.openpyxl절대 없을 겁니다저는 당신이 사용할 수 있는 공식 설명서의 엔진을 구현하는 파이썬 라이브러리가 있다고 생각합니다.

xlcalculator는 이 작업을 할 수 있습니다.https://github.com/bradbase/xlcalculator

from xlcalculator import ModelCompiler
from xlcalculator import Model
from xlcalculator import Evaluator

filename = r'use_case_01.xlsm'
compiler = ModelCompiler()
new_model = compiler.read_and_parse_archive(filename)
evaluator = Evaluator(new_model)

# First!A2
# value is 0.1
#
# Fourth!A2
# formula is =SUM(First!A2+1)

val1 = evaluator.evaluate('Fourth!A2')
print("value 'evaluated' for Fourth!A2:", val1)

evaluator.set_cell_value('First!A2', 88)
# now First!A2 value is 88
val2 = evaluator.evaluate('Fourth!A2')
print("New value for Fourth!A2 is", val2)

그 결과 다음과 같은 출력이 발생합니다.

file_name use_case_01.xlsm ignore_sheets []
value 'evaluated' for Fourth!A2: 1.1
New value for Fourth!A2 is 89

언급URL : https://stackoverflow.com/questions/22451973/calculating-excel-sheets-without-opening-them-openpyxl-or-xlwt

반응형