如何使用iText获取获取单元格值

new*_*ain 2 java excel itext apache-poi

这是一个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|
+-------+-------------+---------------+--------+
Run Code Online (Sandbox Code Playgroud)

我的问题是我想创建一个PDF文件,输出结果如下: -

 Hello <name>,
Run Code Online (Sandbox Code Playgroud)

这里的名称可以是用户给出的Emp.xls记录中的任何名称.如何使用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();
        }
    }
Run Code Online (Sandbox Code Playgroud)

如果用iText不可能,那么请求建议我任何其他开源API任何帮助表示赞赏.

mkl*_*mkl 7

根据你对原始问题的一个评论,你

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

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

即你==用来String比较.

这几乎不可行,因为在==应用于对象的Java中检查是否在两侧引用了相同的对象实例.另一方面,您只想检查String双方的实例是否代表相同的字符序列.对于此任务,您应该使用以下equals方法:

    if ("Dean".equals(cell.getStringCellValue()))
Run Code Online (Sandbox Code Playgroud)

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

通常,==仅对原始数据类型和您知道在它们所代表的内容中唯一的enum对象(例如对象)有意义.