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>,

ここで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

元の質問に対するあなたのコメントの1つによると、あなたは

セルの値を取得して、次のような Excel の名前フィールドと比較してみてください。

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

つまり、比較==のために使用します。String

オブジェクトに適用される Java では、同一のオブジェクト インスタンスが両側で参照されている==かどうかがチェックされるため、これはほとんど機能しません。一方、両側のインスタンスが同じ文字シーケンスを表しているかどうかのみを確認したい場合。このタスクでは、次のメソッドを使用する必要があります。Stringequals

    if ("Dean".equals(cell.getStringCellValue()))

(何らかの理由でNullPointerExceptionsifcell.getStringCellValue()を防ぐためにオペランドも切り替えました。)null

一般に、使用==は、プリミティブ データ型と、それらが表すものが一意であることがわかっているオブジェクト (オブジェクトなど) に対してのみ意味がありenumます。

于 2013-04-10T10:09:54.630 に答える