ArrayList para imprimir e exportar para exel

Gostaria de imprimir os dados e exportar para planilha exel, porem consigo esportar, mas ele me tras somente o ultimo registro do banco hsqldb.

 try {

            VDN_SKILDAO dao = new VDN_SKILDAO();

            //Passando o ID a ser consultado, eu ainda não consegui pegar pelo console..vem um némero nada a ver  
            HSSFWorkbook workbook = new HSSFWorkbook();
            HSSFSheet firstSheet = workbook.createSheet("Planilha_criação_de_serviço_GMUD");

            FileOutputStream fos;
            String nomeArquivo = "d://Planilha_criação_de_serviço_GMUD.csv";
            fos = new FileOutputStream(new File(nomeArquivo));

            int cont = 0;

            ArrayList<Skil_vdn> list = new ArrayList<>();

            list.add(dao.selectAllSkilVDN(skil_vdn));
            for (int i = 0; i < list.size(); i++) {

                cont++;
                HSSFRow row = firstSheet.createRow((short) 0);
                row.createCell(0).setCellValue(skil_vdn.getTipoacao());
                row.createCell(cont).setCellValue(skil_vdn.getObjeto());

            }
            // fim do for

            workbook.write(fos);

Essa e minha DAO:

 public Skil_vdn selectAllSkilVDN(Skil_vdn sk) throws SQLException {
ArrayList<Skil_vdn> list = new ArrayList<>();
        String selectMedic = "select * from PUBLIC.SKIL_VDN";
        PreparedStatement ps = connectionFactory.getConnection().prepareStatement(selectMedic);
        ResultSet rs = ps.executeQuery();

        while (rs.next()) {
            
            sk.setTipoacao(rs.getString("TIPOACAO"));
            sk.setObjeto(rs.getString("OBJETO"));
            sk.setSkill(rs.getInt("SKILL"));
            System.out.println(sk.getTipoacao());
            System.out.println(sk.getObjeto());
            
list.add(sk);
        }
        return sk;
    }

Porque é que passas um objeto aqui? Não precisas de passar nada e um novo objecto deve ser criado em cada ciclo do while.