Tag: xssf

开始读取指定行的Excel工作表

我正在阅读使用POI的XSSF和SAX(事件API)的Excel文件。 Excel工作表有成千上万行,所以这是我发现有良好性能的唯一方法。 现在我想从一个特别的行读取Excel文件,例如第6行,因为这些Excel文件每天都会更新,而且我存储了最后一行,因此我只能读取新行。 我如何从一行开始? private void getExcelField(AcquisitionForm acquisitionForm) throws ExcelReadException, IOException{ InputStream stream=null; OPCPackage p=null; try{ p = OPCPackage.open(acquisitionForm.getDatatablePath(), PackageAccess.READ); ReadOnlySharedStringsTable strings = new ReadOnlySharedStringsTable(p); XSSFReader xssfReader = new XSSFReader(p); StylesTable styles = xssfReader.getStylesTable(); XSSFReader.SheetIterator iter = (XSSFReader.SheetIterator) xssfReader.getSheetsData(); int index = 0; //Test with one sheet iter.hasNext(); //(iter.hasNext()) { stream = iter.next(); String sheetName […]

在excel中使用xssf库绘制带有箭头的行

我想以编程方式在excel表格中用箭头绘制一条线,我可以创build线条而不是箭头。 这里是我的代码,我需要改变我想要的东西; XSSFSimpleShape shape = drawing.createSimpleShape(a); shape.setShapeType(ShapeTypes.LINE); shape.setLineWidth(1.5); shape.setLineStyle(3); 我尝试使用shape.setShapeType(ShapeTypes.LEFT_ARROW); shape.setShapeType(ShapeTypes.RIGHT_ARROW); 和shape.setShapeType(ShapeTypes.UP_ARROW); 也是,但这并没有帮助我。 这是我的: 这就是我要的:

Apache POI – 在Excel中迭代列(XSSF)

我想让我的程序从顶部到底部阅读一个excel列,而不是从左到右,就像现在正在做的那样。 不幸的是,在文档中找不到任何让我这样做的东西。 我有一个excel文件,看起来像这样: col1 col2 col3 col4 —————————– row1 | 2,3,1 _ 1 w row2 | 3,2,7 _ 2 x row3 | _ _ 3 y row4 | 4,9 _ 4 z 我在第2列写了一些值(使用XLWT),如下所示: col1 col2 col3 col4 —————————– row1 | 2,3,1 x,y,w 1 w row2 | 3,2,7 y,x 2 x row3 | _ _ 3 […]

如何将XSSF颜色转换为Java.awt.color格式。 因为XSSF颜色无法比较

我明确地发布了代码。 我想在excel中获得单元格的颜色,我发布了我的excel文件,并且只有两种颜色,绿色和黄色。 如果我使用XSSFColor,打印输出是XSSFColor @ 8b21b8fa和XSSFColor @ dfcdb1。 因此,我无法比较它是绿色还是黄色。 如果是黄色,我希望打印出1;如果是绿色,我希望打印出0。 谢谢你的帮助!!! for(Row row : sheet) { for(Cell cell : row) { switch(formulaEvaluator.evaluateInCell(cell).getCellType()) { case Cell.CELL_TYPE_BLANK: Color cellColor= cell.getCellStyle().getFillForegroundColorColor(); if(cellColor==Color.GREEN) { System.out.print(0+","); } else if(cellColor==Color.YELLOW) { System.out.print(1+","); } } } System.out.println(); } 这是我的excel文件显示一个madarin字符

如何在读取excel文件时识别单元格为空白或空或空

我读了一个excel文件来传递一些数据字段的input。 但是当我运行程序时,一些单元格值返回为空,有些是空白的。实际上,当我打开Excel文件时,单元格中没有可用的值。 我怎样才能手动确定一个Excel单元格为空或空白。 对于一些场景,我需要将空白值传递给字段。 如果单元格为空,则无法将值传递给字段。 引导我伸出手。 码: public static void readAllData() throws IOException{ Object result = null; String sheetName = "Testsheet"; String filePathxlsx = "C:/Users/MSTEMP/Documents/Files/Testxssf.xlsx"; try { FileInputStream in = new FileInputStream(filePathxlsx); File file = new File(filePathxlsx); if(file.isFile() && file.exists()){ XSSFWorkbook xworkbook = new XSSFWorkbook(in); XSSFSheet xsheet=xworkbook.getSheet(sheetName); int totalRows = xsheet.getLastRowNum(); for(int row =1; row<totalRows;row++){ […]

XSSFSheet:图表索引超出范围

我正在写POI的xlsx文件的内容,但得到了一个IllegalArgumentException 。 以下是我的代码: public static void ConvertToCSVOrgtoOrg(String Scenario) throws Exception { String IntermediateXLSXPath=GetFileDetailsSIF(Scenario,"ExcelPath"); String IntermediateCSVPath=GetFileDetailsSIF(Scenario,"CSVPathOrgtoOrg"); File inputFile = new File(IntermediateXLSXPath); File outputFile = new File(IntermediateCSVPath); // For storing data into CSV files StringBuffer data = new StringBuffer(); try { FileOutputStream fos = new FileOutputStream(outputFile); // Get the workbook object for XLSX file XSSFWorkbook wBook = […]

如何使用列名迭代在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 […]

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

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

Apache POI复制具有n次公式的行

我有一个6列和50k行的表。 我想复制一行n次。 现在我正在这样做: for (int i=0; i<=excel_max_row; i++) { row = sheet3.createRow((short) i); cell = row.createCell(0); cell.setCellFormula("IFERROR(LOOKUP(Template!A"+(i+2)+",'Dropdown-Values'!A:A,'Dropdown-Values'!B:B),\"\")"); cell = row.createCell(1); cell.setCellFormula("IF(Template!B"+(i+2)+"=0,\"\",Template!B"+(i+2)+")"); cell = row.createCell(2); cell.setCellFormula("IFERROR(LOOKUP(Template!C"+(i+2)+",'Dropdown-Values'!C:C,'Dropdown-Values'!D:D),\"\")"); cell = row.createCell(3); cell.setCellFormula("IFERROR(LOOKUP(Template!D"+(i+2)+",'Dropdown-Values'!E:E,'Dropdown-Values'!F:F),\"\")"); cell = row.createCell(4); cell.setCellFormula("IFERROR(LOOKUP(Template!E"+(i+2)+",'Dropdown-Values'!E:E,'Dropdown-Values'!F:F),\"\")"); cell = row.createCell(5); cell.setCellFormula("IF(Template!F"+(i+2)+"=0,\"\",Template!F"+(i+2)+")"); } XSSFFormulaEvaluator.evaluateAllFormulaCells(wb); 它的工作原理很慢,因为excel_max_row可以达到50k。 有没有办法快速复制连续n次所有的Forumals? 非常感谢

Poi Excel无法应用背景颜色

我正在使用POI来生成excel。 我有一个场景就像我想应用背景到表中的单元格行,但我无法做到这一点,我给了代码below.Please告诉什么是我的代码中的错误,或者是我所做的代码是正确的.. 码 System.out.println("Called"); try { XSSFWorkbook xb = new XSSFWorkbook(); XSSFSheet sheet = xb.createSheet(sheetName); XSSFCellStyle cellStyle = xb.createCellStyle(); XSSFFont font = xb.createFont(); int rowIdx = 10; short cellIdx = 1; CommonUtils.getGlobalVariable("GLOBAL.M_COMP_CODE")); int rowNo = 0; // Row 1 XSSFCellStyle boldCellStyle = xb.createCellStyle(); XSSFFont boldFont = xb.createFont(); XSSFRow row1 = sheet.createRow(rowNo); XSSFCell cell1 = row1.createCell(1); […]