第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

在不使用 excel 的情況下在 java 中評(píng)估 excel/其他語言表達(dá)式評(píng)估的庫

在不使用 excel 的情況下在 java 中評(píng)估 excel/其他語言表達(dá)式評(píng)估的庫

胡說叔叔 2023-05-10 15:12:00
我一直在互聯(lián)網(wǎng)上搜索可以在 java 中評(píng)估類似 excel 公式的表達(dá)式的庫 該公式未嵌入 excel 中。比方說,這些值也不在 excel 中 比方說 3 個(gè)變量,,a我想要一個(gè) java 中的求值器,它給定一個(gè)像用 excel 表達(dá)式或其他語言寫的字符串,可以給我輸出。bcCONCAT(a,b,c)我在網(wǎng)上找到了一些java的表達(dá)式計(jì)算器庫,但是我需要定義自己的表達(dá)式語言,有沒有直接使用excel語言或其他語言的東西?我查看了 apache POI,jxls也查看了jsp.el我所了解的poi,并jxls根據(jù)已經(jīng)嵌入到 excel 文件中的公式進(jìn)行了評(píng)估,或者我們需要?jiǎng)?chuàng)建一個(gè)電子表格來實(shí)際運(yùn)行該公式,這imo將比在 java 中運(yùn)行該公式更重。因?yàn)閖sp.el我必須定義我自己的表達(dá)語言,它不夠健壯。
查看完整描述

2 回答

?
千巷貓影

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊

apache poi需要工作簿是正確的WorkbookEvaluator。并且由于您正在談?wù)撛u(píng)估“類似 excel 公式的表達(dá)式”,這是必要的,因?yàn)榇祟惞街械乃凶兞慷急仨毷窃摴ぷ鞑局械膯卧褚没蛎Q。您給出的示例CONCATENATE(a,b,c)只能Excela,bcExcelnames 時(shí)用作公式。否則會(huì)#Name?導(dǎo)致Excel.?順便說一句:Excel函數(shù)是CONCATENATE而不是CONCAT

但是這個(gè)工作簿不一定存儲(chǔ)在某個(gè)地方。它也只能在隨機(jī)存取存儲(chǔ)器中。

公式本身不需要在工作表中的某個(gè)地方。該公式也可以作為字符串給出,因?yàn)橛蠾orkbookEvaluator.evaluate(java.lang.String formula, CellReference ref)。

例子:

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;


import org.apache.poi.ss.usermodel.Workbook;

import org.apache.poi.ss.usermodel.CreationHelper;

import org.apache.poi.ss.usermodel.FormulaEvaluator;

import org.apache.poi.ss.usermodel.Name;


import org.apache.poi.ss.formula.BaseFormulaEvaluator;

import org.apache.poi.ss.formula.WorkbookEvaluator;


import org.apache.poi.ss.formula.eval.*;


import org.apache.poi.ss.util.CellReference;


public class EvaluateExcelFunctions {


?static Object evaluateExcelFormula(String formula, Workbook workbookWithVariables) {

? if (workbookWithVariables.getNumberOfSheets() < 1) workbookWithVariables.createSheet();

? CellReference reference = new CellReference(workbookWithVariables.getSheetName(0), 0 , 0, false, false);

? CreationHelper helper = workbookWithVariables.getCreationHelper();

? FormulaEvaluator formulaevaluator = helper.createFormulaEvaluator();

? WorkbookEvaluator workbookevaluator = ((BaseFormulaEvaluator)formulaevaluator)._getWorkbookEvaluator();

? ValueEval valueeval = null;

? try {

? ?valueeval = workbookevaluator.evaluate(formula, reference);

? } catch (Exception ex) {

? ?return ex.toString();

? }

? if (valueeval instanceof StringValueEval) {

? ?String result = ((StringValueEval)valueeval).getStringValue();

? ?return result;

? } else if (valueeval instanceof NumericValueEval) {

? ?double result = ((NumericValueEval)valueeval).getNumberValue();

? ?return result;

? } else if (valueeval instanceof ErrorEval) {

? ?String result = ((ErrorEval)valueeval).getErrorString();

? ?return result;

? }

? return null;??

?}


?public static void main(String[] args) throws Exception {


? Workbook workbook =?

? ?//new XSSFWorkbook();

? ?new HSSFWorkbook();


? Name name;

? String formula;

? Object result;


? // example 1 concatenating strings - your example

? name = workbook.createName();

? name.setNameName("_a");

? name.setRefersToFormula("\"Text A \"");

? name = workbook.createName();

? name.setNameName("_b");

? name.setRefersToFormula("\"Text B \"");

? name = workbook.createName();

? name.setNameName("_c");

? name.setRefersToFormula("\"Text C \"");


? formula = "CONCATENATE(_a, _b, _c)";

? result = evaluateExcelFormula(formula, workbook);

? System.out.println(result);


? // example 2 Pythagorean theorem

? name = workbook.getName("_a");?

? name.setRefersToFormula("12.34");

? name = workbook.getName("_b");

? name.setRefersToFormula("56.78");


? formula = "SQRT(_a^2 + _b^2)";

? result = evaluateExcelFormula(formula, workbook);

? System.out.println(result);


? // example 3 complex math formula

? name = workbook.getName("_a");?

? name.setRefersToFormula("12.34");

? name = workbook.getName("_b");

? name.setRefersToFormula("56.78");

? name = workbook.getName("_c");

? name.setRefersToFormula("90.12");


? formula = "((_a+_b+_c)*_c/_b-_a)/2";

? result = evaluateExcelFormula(formula, workbook);

? System.out.println(result);


? // example 4 faulty formulas

? name = workbook.getName("_a");?

? name.setRefersToFormula("56.78");

? name = workbook.getName("_b");

? name.setRefersToFormula("190.12");

? name = workbook.getName("_c");

? name.setRefersToFormula("\"text\"");


? formula = "_a + _c";

? result = evaluateExcelFormula(formula, workbook);

? System.out.println(result);


? formula = "((_a + _b";

? result = evaluateExcelFormula(formula, workbook);

? System.out.println(result);


? formula = "_a \\ 2";

? result = evaluateExcelFormula(formula, workbook);

? System.out.println(result);


? formula = "_a^_b";

? result = evaluateExcelFormula(formula, workbook);

? System.out.println(result);


? formula = "_a/(_b-_b)";

? result = evaluateExcelFormula(formula, workbook);

? System.out.println(result);


? formula = "CONCAT(_a, _b)";

? result = evaluateExcelFormula(formula, workbook);

? System.out.println(result);


? workbook.close();

?}??

}

此代碼使用apache poi 4.1.0.


注意,Excel名稱不能是所有可能的變量名。例如,Excel名稱不能是c或,因?yàn)檫@會(huì)與可能的單元格引用C發(fā)生沖突。R1C1這就是為什么我命名我的名字_a,_b和_c。


查看完整回答
反對(duì) 回復(fù) 2023-05-10
?
翻過高山走不出你

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超3個(gè)贊

要使用 IF 函數(shù),我必須創(chuàng)建一個(gè) Cell 實(shí)例以防止出現(xiàn) NullPointerException:


Cell cell = workbookWithVariables.getSheet(workbookWithVariables.getSheetName(0)).createRow(0).createCell(0);

CellReference reference = new CellReference(cell);


查看完整回答
反對(duì) 回復(fù) 2023-05-10
  • 2 回答
  • 0 關(guān)注
  • 277 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)