【问题标题】:How fetch cell value using iText fetch如何使用 iText fetch 获取单元格值
【发布时间】:2013-04-10 04:55:51
【问题描述】:

这是一个 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>,

这里 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 任何帮助表示赞赏。

【问题讨论】:

  • 各位大侠请帮帮我或者给我一个提示来解决这个问题。
  • 你试过什么?你被困在哪里了?按照你的说法,一切都很简单。您的问题是从表格中提取信息吗?还是创建结果 PDF?还是完全不同的东西?顺便说一句,没有什么比 iText fetch...
  • 我尝试获取单元格值并与 ​​excel 名称字段进行比较,例如:switch(cell.getCellType()) caseCell.CELL_TYPE_STRING: if(cell.getStringCellValue() == "Dean") document.add (new Chunk(cell.getStringCellValue()));
  • 你检查过if 是否是真的吗?不是通过查看表格,而是通过使用调试器或其他方式进行日志记录?显然,您首先应该尝试找出是您使用 POI 失败还是使用了 iText。然后提供一些简短的、独立的示例代码供其他人重现您的问题。
  • 没有一些代码,我们将很难找出你做错了什么......

标签: java excel apache-poi itext


【解决方案1】:

根据您对原始问题的一位 cmets,您

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

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

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

【讨论】:

  • 很遗憾没有。我生成的 Pdfs 通常看起来很有技术性,但并不美观......
猜你喜欢
  • 2010-09-27
  • 2017-11-25
  • 1970-01-01
  • 1970-01-01
  • 2011-08-02
  • 1970-01-01
  • 1970-01-01
  • 2013-10-30
  • 1970-01-01
相关资源
最近更新 更多