Coverage for /var/srv/projects/api.amasfac.comuna18.com/tmp/venv/lib/python3.9/site-packages/xlwt/ExcelFormula.py: 43%
24 statements
« prev ^ index » next coverage.py v6.4.4, created at 2023-07-17 14:22 -0600
« prev ^ index » next coverage.py v6.4.4, created at 2023-07-17 14:22 -0600
1# -*- coding: windows-1252 -*-
3from . import ExcelFormulaParser, ExcelFormulaLexer
4import struct
5from .antlr import ANTLRException
8class Formula(object):
9 __slots__ = ["__s", "__parser", "__sheet_refs", "__xcall_refs"]
12 def __init__(self, s):
13 try:
14 self.__s = s
15 lexer = ExcelFormulaLexer.Lexer(s)
16 self.__parser = ExcelFormulaParser.Parser(lexer)
17 self.__parser.formula()
18 self.__sheet_refs = self.__parser.sheet_references
19 self.__xcall_refs = self.__parser.xcall_references
20 except ANTLRException as e:
21 # print e
22 raise ExcelFormulaParser.FormulaParseException("can't parse formula " + s)
24 def get_references(self):
25 return self.__sheet_refs, self.__xcall_refs
27 def patch_references(self, patches):
28 for offset, idx in patches:
29 self.__parser.rpn = self.__parser.rpn[:offset] + struct.pack('<H', idx) + self.__parser.rpn[offset+2:]
31 def text(self):
32 return self.__s
34 def rpn(self):
35 '''
36 Offset Size Contents
37 0 2 Size of the following formula data (sz)
38 2 sz Formula data (RPN token array)
39 [2+sz] var. (optional) Additional data for specific tokens
41 '''
42 return struct.pack("<H", len(self.__parser.rpn)) + self.__parser.rpn