Как использовать org.apache.poi.ss.formula.FormulaParser для анализа формулы?

Можете ли вы дать мне простой фрагмент кода, используя org.apache.poi.ss.formula.FormulaParser.

Класс FormulaParser имеет метод parse(). Но он возвращает ptg[]. Я не знаю, где находится класс ptg...
Пожалуйста, помогите мне использовать FormulaParse для анализа формулы листа Excel...

Сараванан


person Saravanan    schedule 25.11.2010    source источник


Ответы (1)


Ptg[] – это массив токенов, представляет формулу в ячейке.

Предположим, что на моем листе Excel у меня есть ячейка с формулой, как

=D4+D6+D8-D11+D23+D29+D46-D49

Выполнение этого через FormulaParser дает мне массив, который я распечатал, как показано ниже.

HSSFEvaluationWorkbook hssfew = HSSFEvaluationWorkbook.create(workBook);

Ptg[] ptg = FormulaParser.parse(cell1.getCellFormula(), hssfew, FormulaType.NAMEDRANGE, 0);

for (int i=0;i<ptg.length;i++){
    System.out.println (ptg[i]);
}

Результат

org.apache.poi.hssf.record.formula.RefPtg [D4] 
org.apache.poi.hssf.record.formula.RefPtg [D6] 
class org.apache.poi.hssf.record.formula.AddPtg 
org.apache.poi.hssf.record.formula.RefPtg [D8] 
class org.apache.poi.hssf.record.formula.AddPtg 
org.apache.poi.hssf.record.formula.RefPtg [D11] 
class org.apache.poi.hssf.record.formula.SubtractPtg
org.apache.poi.hssf.record.formula.RefPtg [D23]
class org.apache.poi.hssf.record.formula.AddPtg 
org.apache.poi.hssf.record.formula.RefPtg [D29] 
class org.apache.poi.hssf.record.formula.AddPtg 
org.apache.poi.hssf.record.formula.RefPtg [D46] 
class org.apache.poi.hssf.record.formula.AddPtg 
org.apache.poi.hssf.record.formula.RefPtg [D49] 
class org.apache.poi.hssf.record.formula.SubtractPtg

Как вы можете видеть, это разбивает каждый элемент в формуле на соответствующее местоположение ячейки или оператор AddPtg для + и SubtractPtg для оператора -.

Это простой пример, вы можете попробовать более сложные вещи

person JoseK    schedule 25.11.2010
comment
спасибо Хосе, но как получить оператор, который появляется в формуле... например, я хочу + + - что-то в этом роде... пожалуйста, помогите мне получить это... - person Saravanan; 25.11.2010
comment
как я объяснил в ответе, + представлен как AddPtg, так что вы знаете, что это означало +. Аналогично для - - person JoseK; 25.11.2010
comment
попробуйте мой пример кода с вашей собственной формулой ячейки и посмотрите результаты. - person JoseK; 25.11.2010
comment
и я объяснил, как poi использует обратную польскую нотацию в этом ответе poi-3-6/4274289#4274289" title="как узнать оператор формулы листа excel с помощью apache poi 3 6"> stackoverflow.com/questions/4265118/ - person JoseK; 25.11.2010