[英]Excel VBA function to Java poi
我是Java的新手,所以请多多包涵。 我知道java apache poi具有以下内置函数,但是我对如何使用它有些迷惑:
1)code_col = WorksheetFunction.Match(“ Code”,sheet.Range(“ 1:1”),0)
2)count = WorksheetFunction.CountIf(ref_sheet.Range(“ A:A”),收款人)
3)lr = sheet.Cells(1,1).CurrentRegion.Rows.count
如果您可以提供有关VBA代码如何转换为其等效的Java apache poi的示例,那将是一个很大的帮助。
因此,我基本上将VBA模块转换为Java。 我使用apache poi库。 但是,我上面的那三行代码很难转换为它的java等效代码
正如我在评论中已经说过的那样,这个问题无法得到一般性的回答。
Apache poi
用于创建Microsoft Office
文件。 因此, apache poi
能够创建具有功能MATCH
和COUNTIF
Excel
文件,该文件存储在单元格的公式中。 如果它可以访问这些公式中引用的所有单元格,则还可以评估这些公式。
因此,对于一个具体示例,具有如下所示的MSExcelWithVBA.xlsm
:
和这样的VBA
代码:
Sub test()
Set this_sheet = ThisWorkbook.Worksheets("Sheet1")
code_col = WorksheetFunction.Match("Code", this_sheet.Range("1:1"), 0)
Debug.Print "code_col: " & code_col
payee = "b"
payee_count = WorksheetFunction.CountIf(this_sheet.Range("A:A"), payee)
Debug.Print "payee_count: " & payee_count
count_rows_in_region = this_sheet.Cells(1, 1).CurrentRegion.Rows.Count
Debug.Print "count_rows_in_region: " & count_rows_in_region
End Sub
然后,此VBA
代码将打印到立即窗口:
code_col: 4
payee_count: 3
count_rows_in_region: 9
使用相同的MSExcelWithVBA.xlsm
,像这样的Java
代码:
import java.io.FileInputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*;
import org.apache.poi.ss.formula.WorkbookEvaluator;
import org.apache.poi.ss.formula.eval.*;
public class ExcelEvaluateSomeFunctions{
public static void main(String[] args) throws Exception {
Workbook workbook = WorkbookFactory.create(new FileInputStream("MSExcelWithVBA.xlsm"));
Sheet this_sheet = workbook.getSheet("Sheet1");
CreationHelper helper = workbook.getCreationHelper();
XSSFFormulaEvaluator formulaevaluator = (XSSFFormulaEvaluator)helper.createFormulaEvaluator();
WorkbookEvaluator workbookevaluator = formulaevaluator._getWorkbookEvaluator();
ValueEval valueeval = null;
//code_col = WorksheetFunction.Match("Code", this_sheet.Range("1:1"), 0)
double code_col = Double.NaN;
valueeval = workbookevaluator.evaluate("MATCH(\"Code\", " + this_sheet.getSheetName() + "!1:1, 0)", null);
if (valueeval instanceof NumberEval) {
code_col = ((NumberEval)valueeval).getNumberValue();
}
System.out.println("code_col: " + code_col);
//payee_count = WorksheetFunction.CountIf(this_sheet.Range("A:A"), payee)
String payee = "b";
double payee_count = Double.NaN;
valueeval = workbookevaluator.evaluate("COUNTIF(" + this_sheet.getSheetName() + "!A:A, \"" + payee + "\")", null);
if (valueeval instanceof NumberEval) {
payee_count = ((NumberEval)valueeval).getNumberValue();
}
System.out.println("payee_count: " + payee_count);
//count_rows_in_region = this_sheet.Cells(1, 1).CurrentRegion.Rows.Count
//this is not possible since apache poi does not know the concept of CurrentRegion
//best you could do:
int count_rows_in_sheet = this_sheet.getLastRowNum()+1;
System.out.println("count_rows_in_sheet: " + count_rows_in_sheet);
workbook.close();
}
}
打印到System.out
:
code_col: 4.0
payee_count: 3.0
count_rows_in_sheet: 9
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.