这是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 任何帮助表示赞赏。
答案 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()))
(由于某种原因,如果NullPointerExceptions
为cell.getStringCellValue()
,我也会切换操作数以阻止null
。)
一般情况下,使用==
只对原始数据类型和您知道在其所代表的内容中唯一的对象有意义,例如enum
个对象。