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

时间:2013-04-10 04:55:51

标签: java excel apache-poi 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|
+-------+-------------+---------------+--------+

我的问题是我要创建一个 PDF文件,其输出如下: -

 Hello <name>,

此处名称可以是Emp.xls记录中的任何名称,由用户指定。 如何使用 iText Apache 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 任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:7)

根据您对原始问题的一条评论,您

  

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

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()))

(由于某种原因,如果NullPointerExceptionscell.getStringCellValue(),我也会切换操作数以阻止null。)

一般情况下,使用==只对原始数据类型和您知道在其所代表的内容中唯一的对象有意义,例如enum个对象。

相关问题