Browse Source

公式校验

9.0
richie 5 years ago
parent
commit
9fcb4fe619
  1. 5
      plugin.xml
  2. 17
      src/main/java/com/fr/solution/plugin/design/formula/ui/type/BaseFormulaPane.java

5
plugin.xml

@ -4,12 +4,13 @@
<id>com.fr.solution.plugin.design.formula.script</id>
<name><![CDATA[增强公式编辑器]]></name>
<active>yes</active>
<version>4.4</version>
<env-version>9.0</env-version>
<version>4.5</version>
<env-version>9.0~10.0</env-version>
<jartime>2017-10-20</jartime>
<vendor>richie</vendor>
<description><![CDATA[可以在公式中直接使用JavaScript脚本,进行更灵活的计算。]]></description>
<change-notes><![CDATA[
[2019-05-23]脚本公式可以正确的校验公式的合法性。<br/>
[2019-03-21]一个国际化问题。<br/>
[2019-03-19]修复在9.0中无法打开的问题。<br/>
[2018-12-19]适配10.0和增加繁体中文的支持。<br/>

17
src/main/java/com/fr/solution/plugin/design/formula/ui/type/BaseFormulaPane.java

@ -6,12 +6,15 @@ import com.fr.design.gui.icontainer.UIScrollPane;
import com.fr.design.gui.syntax.ui.rsyntaxtextarea.RSyntaxTextArea;
import com.fr.general.FRLogger;
import com.fr.general.Inter;
import com.fr.log.FineLoggerFactory;
import com.fr.parser.FRLexer;
import com.fr.parser.FRParser;
import com.fr.script.Calculator;
import com.fr.solution.plugin.design.formula.ui.evt.OperateListener;
import com.fr.stable.ProductConstants;
import com.fr.stable.StringUtils;
import com.fr.stable.script.Expression;
import com.fr.third.antlr.ANTLRException;
import javax.swing.*;
import java.awt.*;
@ -304,20 +307,14 @@ public abstract class BaseFormulaPane<T extends BaseFormula> extends FurtherBasi
public void checkContentValid() {
// Execute Formula default cell element.
String formulaText = formulaTextArea.getText().trim();
if (formulaText != null && formulaText.length() > 0) {
StringReader in = new StringReader(formulaText);
FRLexer lexer = new FRLexer(in);
FRParser parser = new FRParser(lexer);
if (StringUtils.isNotEmpty(formulaText)) {
Calculator calculator = Calculator.createCalculator();
Expression expression = null;
try {
expression = parser.parse();
} catch (Exception e) {
expression = calculator.parse(formulaText);
} catch (ANTLRException e) {
FRLogger.getLogger().error(e.getMessage(), e);
}
JOptionPane.showMessageDialog(
BaseFormulaPane.this,
(expression != null ? Inter.getLocText("Plugin-Design_Basic_FormulaD_Valid_Formula") : Inter.getLocText("Plugin-Design_Basic_FormulaD_Invalid_Formula")) + ".", ProductConstants.PRODUCT_NAME,

Loading…
Cancel
Save