Tag: apache poi

损坏的文件处理

我想知道是否有人有任何build议处理与Apache POI损坏的文件 我试图打开一个文件,并收到此消息: Exception in thread "main" org.apache.poi.hssf.record.RecordInputStream$LeftoverDataException: Initialisation of record 0x1C left 2 bytes remaining still to be read. at org.apache.poi.hssf.record.RecordInputStream.hasNextRecord(RecordInputStream.java:156) at org.apache.poi.hssf.record.RecordFactoryInputStream.nextRecord(RecordFactoryInputStream.java:231) at org.apache.poi.hssf.record.RecordFactory.createRecords(RecordFactory.java:480) at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:301) at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:95) at ExcelImporter.EditFileImportDialog.main(EditFileImportDialog.java:409) 这是一个SSCCE import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; public class EditFileImportDialog { /* Omitted irrelevent code */ public static void main(String[] args) { File […]

如何在Apache POI中获取Excel空白单元格值?

我有一个巨大的excel文件,其中列的吨像这样: Column1 Column2 Column3 Column4 Column5 abc def ghi mno pqr …… 这是我写的打印这些值的代码: try { FileInputStream inputStr = new FileInputStream(fileName); XSSFWorkbook xssfWork = new XSSFWorkbook(inputStr) ; XSSFSheet sheet1 = xssfWork.getSheetAt(0); Iterator rowItr = sheet1.rowIterator(); while ( rowItr.hasNext() ) { XSSFRow row = (XSSFRow) rowItr.next(); System.out.println("ROW:–>"); Iterator cellItr = row.cellIterator(); while ( cellItr.hasNext() ) { XSSFCell […]

在Apache POI中设置列宽

我正在用Java编写一个工具,使用Apache POI API将XML转换为MS Excel。 在我的XMLinput中,我收到了点宽的列宽。 但是,Apache POI API有一个基于字体大小等设置列宽的逻辑稍微不同(参考API文档 ) 是否有一个公式将点转换为Excel所预期的宽度? 有没有人做过这个? 有一个setRowHeightInPoints()方法虽然:(但没有列。 PS:inputXML是ExcelML格式,我必须转换为MS Excel。

使用Apache POI在Excel中合并单元格

有没有其他的方式来使用Apache POI库在Excel中合并单元格? 我正在尝试使用以下,但它不工作 // selecting the region in Worksheet for merging data CellRangeAddress region = CellRangeAddress.valueOf("A" + rowNo + ":D" + rowNo); // merging the region sheet1.addMergedRegion(region);

设置HSSFCellStyle的前景色总是黑色的

我正在使用POI来创build一个Java电子表格。 我有以下用于创build标题行的代码: HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("Report"); // some more code HSSFRow row = sheet.createRow(0); HSSFCell cell = row.createCell(cellNumber); HSSFCellStyle cellStyle = wb.createCellStyle(); cellStyle.setFillBackgroundColor(HSSFColor.GREY_25_PERCENT.index); cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); HSSFFont font = wb.createFont(); font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); font.setColor(HSSFColor.WHITE.index); cellStyle.setFont(font); cell.setCellStyle(cellStyle); 我遇到的问题是,无论select什么颜色,在单元格上设置填充背景颜色总是显示为黑色。 我究竟做错了什么? 如果我不使用“setFillPattern”行,则根本不显示任何颜色。

Java POI:如何读取Excel单元格的值而不是计算公式呢?

我正在使用Apache POI API从Excel文件中获取值。 除了包含公式的单元之外,一切都很好。 事实上, cell.getStringCellValue()返回单元格中使用的公式,而不是单元格的值。 我试图使用evaluateFormulaCell()方法,但它不工作,因为我正在使用GETPIVOTDATA Excel公式,并没有在API中实现此公式: Exception in thread "main" org.apache.poi.ss.formula.eval.NotImplementedException: Error evaluating cell Landscape!K11 at org.apache.poi.ss.formula.WorkbookEvaluator.addExceptionInfo(WorkbookEvaluator.java:321) at org.apache.poi.ss.formula.WorkbookEvaluator.evaluateAny(WorkbookEvaluator.java:288) at org.apache.poi.ss.formula.WorkbookEvaluator.evaluate(WorkbookEvaluator.java:221) at org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator.evaluateFormulaCellValue(HSSFFormulaEvaluator.java:320) at org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator.evaluateFormulaCell(HSSFFormulaEvaluator.java:213) at fromExcelToJava.ExcelSheetReader.unAutreTest(ExcelSheetReader.java:193) at fromExcelToJava.ExcelSheetReader.main(ExcelSheetReader.java:224) Caused by: org.apache.poi.ss.formula.eval.NotImplementedException: GETPIVOTDATA at org.apache.poi.hssf.record.formula.functions.NotImplementedFunction.evaluate(NotImplementedFunction.java:42)

如何在HSSF(Apache POI)的现有Excel中的两行之间插入一行

不知何故,我设法在现有的Excel文件中的两行之间创build新的行。 问题是,一些格式不包括在行的移动。 其中一个,就是在转移过程中隐藏的行并不是相对的。 我的意思是(例如),从20到30的行是隐藏的,但是当创build新行时仍然在那里形成。 在插入/创build新行时,隐藏行也必须移动,它应该是21到31。 另一件事是,工作表中另一个不在单元格中的对象。 像文本框不会在创build新行之后移动。 它像这些对象的位置是固定的。 但是我希望它移动,就像我在Excel中插入新行或粘贴行一样。 如果有插入新行的function,请告诉我。 这是我现在所拥有的,只是我的代码片段。 HSSFWorkbook wb = new HSSFWorkbook(template); //template is the source of file HSSFSheet sheet = wb.getSheet("SAMPLE"); HSSFRow newRow; HSSFCell cellData; int createNewRowAt = 9; //Add the new row between row 9 and 10 sheet.shiftRows(createNewRowAt, sheet.getLastRowNum(), 1, true, false); newRow = sheet.createRow(createNewRowAt); newRow = sheet.getRow(createNewRowAt); 如果复制和粘贴行是可能的,这将是很大的帮助。 […]

如何阅读具有Apache POIdate的Excel单元格?

我使用的是Apache POI 3.6,我想阅读一个有这样的date的Excel文件,这是8/23/1991 。 switch (cell.getCellType()) { … … case HSSFCell.CELL_TYPE_NUMERIC: value = "NUMERIC value=" + cell.getNumericCellValue(); break; … } 但是它需要数字值types并返回像这样的值33473.0 。 我试过使用数字单元格types,但没有运气。 dbltemp=row.getCell(c, Row.CREATE_NULL_AS_BLANK).getNumericCellValue(); if (c == 6 || c == 9) { strTemp= new String(dbltemp.toString().trim()); long tempDate = Long.parseLong(strTemp); Date date = new Date(tempDate); strVal = date.toString(); } 我该如何解决我的问题?

Apache POI锁头行

有没有人熟悉一种方法来locking在使用Apache POI 3.7创build的电子表格中的一行? 通过locking我的意思是我希望列的标题行保持可见,当用户滚动通过行。 我创build的电子表格将有500行,如果列的名称始终可见,这将是有益的。

POI – 如何将单元格值设置为“date”并应用默认的Exceldate格式?

我一直在使用Apache POI一段时间以编程方式读取现有的Excel 2003文件。 现在我有了一个新的需求,即在内存中创build完整的.xls文件(仍然使用Apache POI),最后将它们写入文件。 站在我面前的唯一问题是处理有date的细胞。 考虑下面的代码: Date myDate = new Date(); HSSFCell myCell; // code that assigns a cell from an HSSFSheet to 'myCell' would go here… myCell.setCellValue(myDate); 当我将包含此单元格的工作簿写入文件并使用Excel打开时,单元格将显示为一个数字。 是的,我意识到Excel会将自己的“date”存储为1900年1月1日以来的天数,这就是单元格中的数字。 问题:可以在POI中使用哪些API调用来告诉它,我希望将缺省date格式应用于我的date单元格? 理想情况下,如果用户在Excel中手动打开电子表格并键入Excel识别为date的单元格值,则希望电子表格单元格以与Excel分配的相同默认date格式显示。