2

这是一个 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 记录中的任何名称。如何使用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 任何帮助,我们将不胜感激。

4

1 回答 1

7

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

尝试获取单元格值并与 ​​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()))

(我还切换了操作数以防止NullPointerExceptionsif cell.getStringCellValue()isnull出于某种原因。)

一般来说,使用==只对原始数据类型和您知道它们所代表的唯一对象(例如enum对象)有意义。

于 2013-04-10T10:09:54.630 回答