Tag: java

如何导出到使用Apache POI的树形结构?

我有一个class级: class Node{ private Node parent; private List<Node> children; … } 如何使用Apache POI导出它的项目树来获取这样的文档(我只需要移动表中的第一列): A B C D E F G

如何解决错误,同时阅读在Java中的Excel xls文件

我在名为E:/portfolio.xls的位置有一个Excel文件。 我想通过java代码读取这个文件。 我用java编写了一些代码,但是不能读取这个文件,并显示了一些错误。我是这类编码的新手。 有人请帮我解决这些问题。我的java代码是在下面: /SampleExcelReading.java package com.sampleexcelreading.core; import java.io.File; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Iterator; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.DateUtil; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.WorkbookFactory; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Multimap; public class SampleExcelReading { public static void main(String[] args) { try { Multimap<String, String> portfolioHoldingMap = ArrayListMultimap.create(); File f=new File("E:/portfolio.xls"); org.apache.poi.ss.usermodel.Workbook workbook = WorkbookFactory.create(f); int numberOfSheets = workbook.getNumberOfSheets(); […]

如何使用列名迭代在Excel表中的当前行?

我需要parsing一个Excel工作表,并从每一行检索值存储在数据库中。 目前,我正在根据每个单元格所具有的值的types来执行此操作。 在目前的情况下,这是可以的,因为我只需要处理两列。 但是我有一个新的需求来parsing一个超过12列的Excel表。 在这种情况下怎么做呢? 有没有一种方法,我可以迭代基于列的每一行,如果我使用表头的结构化表? 我目前的代码如下。 File file = new File(UPLOAD_LOCATION + fileUpload.getFile().getOriginalFilename()); FileInputStream excelFile = new FileInputStream(file); Workbook workbook = new XSSFWorkbook(excelFile); Sheet datatypeSheet = workbook.getSheetAt(0); Iterator<Row> iterator = datatypeSheet.iterator(); while (iterator.hasNext()) { Row currentRow = iterator.next(); Iterator<Cell> cellIterator = currentRow.iterator(); while (cellIterator.hasNext()) { Cell currentCell = cellIterator.next(); // getCellTypeEnum shown as deprecated […]

如何评估这个公式在Apache的poi?

在Microsoft Office Excel中,我将此公式设置在单元格中。 =YEAR("2017-01-01") 。结果是2017 。 在apache-poi中,我也是这样做的。 cell.setCellFormula("YEAR(\"2017-01-01\")"); 但是我得到一个错误的结果。 #VALUE! 如何得到正确的结果? 码 HSSFWorkbook hssfworkbook = new HSSFWorkbook(); HSSFSheet sheet = hssfworkbook.createSheet("Sheet1"); HSSFRow row = sheet.createRow(0); HSSFCell cell = row.createCell(0); cell.setCellFormula("YEAR(\"2017-01-01\")"); CreationHelper creationHelper = hssfworkbook.getCreationHelper(); FormulaEvaluator evaluator = creationHelper.createFormulaEvaluator(); System.out.println(evaluator.evaluate(cell)); 安慰 org.apache.poi.ss.usermodel.CellValue [#VALUE!] 使用apache-poi 3.16

Java – 追加excel

我需要追加excel。 我写代码: import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.sql.ResultSet; import java.sql.Statement; import org.apache.poi.EncryptedDocumentException; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; import javafx.collections.FXCollections; import javafx.collections.ObservableList; public class AppendExcel { public static void main(String[] args) throws Exception { String excelFilePath = "append.xlsx"; try { FileInputStream inputStream = new FileInputStream(new […]

指导如何通过Apache poi读取date单元格

我正在导入一个有很多行的excel文件。 有些列是date,我必须阅读它们,但单元格的格式没有被Apache poi正确读取。 实际上date必须是dd / MM / YYYY,但是当我有04/13/2017 Apache poi图书馆认为它是在MM / dd / YYYY格式,因此读取date。 我怎样才能告诉Apache poi阅读正确格式的date? 下面是我的代码的一个例子: case Cell.CELL_TYPE_NUMERIC: if (DateUtil.isCellDateFormatted(cell)) { Date d = cell.getDateCellValue()); System.out.println(myWorkBook.getSheetName(i) + " " + cell.getNumericCellValue() + "\t"); }

使用HSSFSheet将列格式types设置为date或时间

我想将我的列Mobile_Time设置为时间/date时间types列。 我努力了 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub DAO d0 = new DAO(); Map<String, String> AllUsermap = new HashMap<String, String>(); AllUsermap = d0.colleagueMap(Integer.parseInt(request.getParameter("lid")), request.getParameter("ltype")); String date = request.getParameter("date"); response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-Disposition", "attachment; filename=All Employees Tracking Report [Date]:" + date + ".xls"); Workbook workbook = new HSSFWorkbook(); Font […]

使用Apache POI Java从Excel中获取包含date公式的单元格的date值

我试图从Excel文件中读取一切正常的单元格值。 但是,当来到公式,特别是date字段,我无法获得任何date值。 我如何检查评估的CellValue中的datetypes? 以及如何获取date值? 我的代码如下。 Cell cell = nextRow.getCell(cellIndex, Row.CREATE_NULL_AS_BLANK); if (cell.getCellType() == Cell.CELL_TYPE_FORMULA) { FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator(); CellValue formulaValue = evaluator.evaluate(cell); switch (formulaValue.getCellType()) { case Cell.CELL_TYPE_NUMERIC: { int numbericValue = formulaValue.getNumericValue(); // 42909.0 if (isCellDate?) { //What should i check here? // DATE THINGS // how to convert numeric value 42909.0 to date?? […]

如何在不设置-Xmx标志的情况下限制堆的消耗

问题 我有一个包含许多公式的.xlsx文件。 我想把这个文件转换成一个新的.xlsx文件,所有的公式都用其绝对值replace。 为什么? 可能与这个问题没有关系。 我做了什么? 我的目标是在尽可能less的堆内存中执行此任务。 所以我使用了apache POI XSSF event API的组合来读取源文件和SXSSF API来写输出文件。 它运作良好。 意见 所有测量都使用JProfiler 10进行 当我运行我的代码来转换大约25K +行的文件(大约25K * 23的公式)时,它在峰值处使用大约250 MB的堆空间。 现在我用-Xmx24M运行相同的命令,代码被设置为在这个内存限制内运行,这个限制比第一次运行要低得多。 问题 如果我的代码已经可以在这个低内存限制下运行,为什么在第一次运行中需要250MB的内存呢? 是否可以限制这个特定的代码来限制它的内存消耗在一个下限内,即使Xmx没有被设置?

在Apache poi中的数组公式

我有一个Excel表格(xslx),我已经定义了一个数组公式( https://support.office.com/zh-cn/article/Guidelines-and-examples-of-array-formulas-7D94A64E-3FF3-4686- 9372-ECFD5CAA57C7 )。 这就像在excel itselt中的魅力一样。 我使用apache poi来编程该excel表单中的一些值。 操作后,我想重新计算该数组公式的结果,但我不知道该怎么做。 用“正常”的公式我做如下: FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator(); XSSFRow row = sheet.getRow(i); Cell cell = row.getCell(j); evaluator.evaluateCell(cell); double value = cell.getNumericValue(); 对于使用数组公式的方法 void setCellArrayFormula(String formula, CellRangeAddress range) 在类XSSFCell和 public CellRange<XSSFCell> setArrayFormula(String formula, CellRangeAddress range) 在类XSSFSheet中。 通过像cell.setCellArrayFormula("SUM(ABS(H2:H5))", new CellRangeAddress(2,5,7,7));调用设置公式后cell.setCellArrayFormula("SUM(ABS(H2:H5))", new CellRangeAddress(2,5,7,7)); 我不知道如何得到该公式的结果(但我也不知道这是否是在Apache poi中使用数组公式的正确方法。在Excel中,我必须这样做{=SUM(ABS(H2:H5))} ) 有谁知道如何在apache poi中使用数组公式? 谢谢!