如何使用iText获取单元格值

这是Emp.xls表:

+-------+-------------+---------------+--------+ | EmpId | Name | Designation | Salary| +-------+-------------+---------------+--------+ | 1.0 | Akon Roy | project led | 12000.0| | 2.0 | Brey Deo | manager | 13000.0| | 3.0 | Dean | delivery head | 14000.0| | 4.0 | Clark | team led |155555.0| +-------+-------------+---------------+--------+ 

我的问题是,我想创build一个PDF文件 ,其中的输出将是这样的: –

  Hello <name>, 

这里的名字可以是用户给出的Emp.xlslogging中的任何名字。 如何使用iTextApache poi来解决这个问题。

我的代码是:

  public static void main(String[] args) { try { FileInputStream inputFile = new FileInputStream("E:\\Emp.xls"); HSSFWorkbook workbook = new HSSFWorkbook(inputFile); HSSFSheet sheet = workbook.getSheetAt(0); //adding row iterator Iterator<Row> rowitr = sheet.iterator(); OutputStream file = new FileOutputStream(new File("E:\\Test.pdf")); Document document = new Document(); PdfWriter.getInstance(document, file); document.open(); document.add(new Paragraph("Hello World, iText")); //document.add(new Paragraph("Dear ")); while(rowitr.hasNext()){ Row row = rowitr.next(); //adding cell iterator Iterator<Cell> cellitr = row.iterator(); while(cellitr.hasNext()){ Cell cell = cellitr.next(); switch(cell.getCellType()){ case Cell.CELL_TYPE_STRING: if(cell.getStringCellValue == "Dean") document.add(new Chunk("Dear " cell.getStringCellValue()+ ",")); } } } document.close(); file.close(); } catch (Exception e) { e.printStackTrace(); } } 

如果iText不可能,那么请向我推荐任何其他开源API。

根据你对原始问题的意见之一,你

尝试获取单元格值并与excel名称字段进行比较,如:

 switch(cell.getCellType()) { case Cell.CELL_TYPE_STRING: if (cell.getStringCellValue() == "Dean") document.add(new Chunk(cell.getStringCellValue())); 

即你使用==比较String

这是几乎不可行的,因为在应用于对象的Java中,检查是否在两侧引用了相同的对象实例。 另一方面,您只需要检查两侧的String实例是否表示相同的字符序列。 对于这个任务,你应该使用equals方法:

  if ("Dean".equals(cell.getStringCellValue())) 

(我也切换操作数,以防止NullPointerExceptions如果cell.getStringCellValue()由于某种原因为null )。

一般来说, ==对于原始数据types和对于你所知道的对象是唯一的,例如enum对象。