Tag: apache poi

在POI中的工作表之间设置范围validation

我们的程序将一些数据库数据导出为Excel。 用户可以select:1)一个工作簿和多个选项卡,每个原始表格一个。 2)多个工作簿(文件),每个只有一个选项卡。 我完全按照标准POI文档( https://poi.apache.org/spreadsheet/quick-guide.html#Validation )中的说明为外键/主键引用添加validation码。 神奇的公式与'pkTable'类似!$ A $ 3:$ A $ 6。 我正在尝试在许多工作簿中重现此行为 – 即在另一个工作簿中validation一个单元格的值。 我们使用HSSF和XSSF,但是XSSF是首选。 如果将string* file:/ t:/Excel/pkTable.xlsx#'pkTable'!$ A $ 3:$ A $ * 6传递给XSSFDataValidationHelper.createCustomConstraint(),则POI不会引发exception。 但在Excel中打开时,我们看到“ 我们发现某些内容存在问题… ” 我也尝试通过创build命名范围间接解决问题。 那么我们需要做的就是指出一个命名的范围在不同的工作簿中。 我已经尝试了两种方法: 如果我传入file:/ t:/Excel/pkTable.xlsx#'pkTable'!$ A $ 3:$ A $ 6而不是' A $ 6 ',则尝试直接限定命名范围 (即在名为Range.setRefersToFormula pkTable'!$ A $ 3:$ A $ 6我们得到一个POI预期'org.apache.poi.ss.formula.FormulaParseException: 指定的命名范围'文件'在当前工作簿中不存在。 第二种方法是使用namedRange.setRefersToFormula(“pkTable'!$ […]

生成2个Excel文件Java POI

我有两个excel文件。 excel12.xls和excel_user.xls。 我正在比较那两个excel文件中的单元格,发现我已经做过的重复单元格。 我想要做的是, 把所有来自excel_user的重复项放在excel_1中 把所有没有重复的excel_2。 但是,我在这行有java.lang.NullPointerException 。 cell3 = sh4.getRow(z).getCell(0,Row.CREATE_NULL_AS_BLANK); 这是我的代码: HSSFRow row = null; HSSFRow row2 = null; HSSFRow row3 = null; String filename = "C:/Excel/excel12.xls"; String filename2 = "C:/Excel/excel_user.xls"; String filename3 = "C:/Excel/excel_output1.xls"; FileInputStream fis = null; FileInputStream fis2 = null; FileInputStream fis3 = null; FileInputStream fis4 = null; try{ fis = […]

如何在apache POI中自动调整excel中的列

我正在用apache创build一个excel文件poi excel是生成的,但是我不能根据单元格的值调整列我在发布代码我到目前为止所做的 这是我如何在Excel中创build标题 HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet(); sheet.protectSheet("password"); sheet.autoSizeColumn(15); HSSFFont hSSFFont = wb.createFont(); hSSFFont.setFontName(HSSFFont.FONT_ARIAL); hSSFFont.setFontHeightInPoints((short) 8); CellStyle style = wb.createCellStyle(); /* cell style for locking */ CellStyle lockedCellStyle = wb.createCellStyle(); lockedCellStyle.setLocked(true); HSSFRow row = null; HSSFCell cell = null; row = sheet.createRow(0); int headercolumnNo = 0; //1st Column Header for […]

如何将单元格合并到poi中的最后一行

我正在创build一个工作簿使用Apache poi,我想合并一个特定的单元格到输出的结尾。我正在使用mergeRegion函数和单元格正在合并,但该单元格不合并到行的末尾,它总是结束一行之前, 我在这里附加屏幕合并单元格 我想单元格被合并,我在这里张贴我的代码 for(MarshActiveUser marshActiveUser : listOfMarshUser){ /***/ sheet.addMergedRegion(new CellRangeAddress( j, //first row (0-based) j, //last row (0-based) 18, //first column (0-based) 20 //last column (0-based) )); /***/ int columnNo = 0; row = sheet.createRow(j+1); cell = row.createCell(columnNo); cell.setCellValue(new HSSFRichTextString(String.valueOf(row.getRowNum()))); lockedCellStyle.setFont(hSSFFont); sheet.autoSizeColumn(0); cell.setCellStyle(lockedCellStyle); columnNo = 1; cell = row.createCell(columnNo); if(null != marshActiveUser.getFistName()){ cell.setCellValue(new HSSFRichTextString(marshActiveUser.getFistName())); […]

使用java在excel表中的列之间交换

我是新的Java。 其实我想交换使用Java的Excel表中的两列。 我使用的代码,但我没有得到正确的输出。 我添加了我的Excel表的截图。 我想交换系统名称和date列。 我还添加了我的不正确输出的屏幕截图。 我于1900年1月24日和29日,而不是2016年9月30日。 CellStyle cellStyle1 = workbook11.createCellStyle(); CreationHelper createHelper1 = workbook11.getCreationHelper(); cellStyle1.setDataFormat(createHelper1.createDataFormat().getFormat("d-mmm")); try { if (file11.exists()) { String dt = sh1.getRow(0).getCell(1).getStringCellValue(); if (!dt.equalsIgnoreCase("Date")) { Iterator<Row> rowIterator1 = sh1.iterator(); while (rowIterator1.hasNext()) { Row row = rowIterator1.next(); if (row.getCell(1).getStringCellValue().equalsIgnoreCase("Date")) { Cell cl1 = row.getCell(0); Cell cl2 = row.getCell(1); Cell temp = row.getCell(0); Cell […]

如何检查是否有使用java的Excel文件中的更新

程序每隔1小时运行一次,并检查是否有任何更新的Excel文件。 如果有,更新DB中的相应条目

使用java从e​​xcel中获取图像

我正在使用Apache POI 。 我能够从Excel中读取数据,但无法从Excel中读取图像。 如何从Excel中读取图像。

SXSSF与Excel表

我正在尝试在stream式工作簿(SXSSFWorkbook)中创build一个Excel表。 它不直接支持API,但是通过访问底层的XSSFWorkbook(workbook.getXSSFWorkbook)已经取得了一些成功。 当我在Excel(2007)中打开文件时,它会显示“Excel在”test.xlsx“中发现了不可读的内容。是否要恢复此工作簿的内容?” 点击是成功修复工作簿,我得到正确的结果。 日志说:“修复logging:从/xl/tables/table1.xml部分(表)”表。 任何人都有我如何可以避免Excel错误的想法? 下面是一个例子: public class SXSSFTest { private static final int NB_ROWS = 5; private static final int NB_COLS = 5; public static void main(String[] args) throws Exception { try (SXSSFWorkbook workbook = new SXSSFWorkbook(); FileOutputStream outputStream = new FileOutputStream("C:\\test.xlsx")) { SXSSFSheet sheet = workbook.createSheet(); fillSheet(sheet); String dataRange = new AreaReference( […]

在Apache POI中为生成的Excel文件设置默认缩放比例

我通过Apache POI成功生成了一个Excel文件。 问题是,当我尝试打印它时,最后3列不在可打印区域内。 例如,工作表包含A到L列,但只适合打印时的A列。 打印前,用户总是将打印比例从“无缩放”更改为“将所有列放在一个页面上”。 我如何修改Excel文件,使所有的列都适合可打印的区域,用户在每次打印时都不需要改变缩放比例。

用java poiparsing一个公式是行不通的

我需要用一些数据来完成一个excel。 但是工作表中的一个单元格是一个公式,所以我正在使用由poi库提供的parseformula,但是我有一些我想要使用的公式的问题: =((E9 * 1,5 + F9 + G9 * 2/3)= 0;“”; E9 * 1,5 + F9 + G9 * 2/3) PS:所有单元格都在不同的列表中 代码如下: "IF(("+cellule_cm.get(ligne_excel)+"*1,5+"+cellule_td.get(ligne_excel)+"+"+ cellule_tp.get(ligne_excel)+"*2/3)=0;\"\";"+cellule_cm.get(ligne_excel)+"*1,5+"+cellule_td.get(ligne_excel)+"+"+cellule_tp.get(ligne_excel)+"*2/3)"; ligne_excel是我想要修改的行的索引cellule_cm , cellule_td , cellule_tp是我的单元格列表 当我跑它抛出exception: 在字符23附近parsing错误; ((E9 * 1,5 + F9 + G9 * 2/3)= 0;“”; E9 * 1,5 + F9 + G9 * 2/3)'。 预期的','或')' 我不明白为什么我不能parsing你能帮我吗?