2017-10-27 5 views
0

5 개의 json 데이터를 가져 와서 Excel 시트에 쓰려고합니다. 데이터를 jsonarray로 변환 한 다음 POI를 사용하여 Excel에 쓰려고합니다. 어떤 이유로 프로그램은 현재 첫 번째 행에 다섯 번째 데이터 조각 만 쓰고 다른 행은 수행하지 않습니다. 그것은 모두 5를 반복하고 각각에 해당하는 행에 넣어야합니다. 어떤 아이디어?json 배열의 Apache POI를 사용하여 Excel 시트 작성

private void sendPost() { 
    int rowNumber = 1; 

     while (rowNumber < 5) { 
try { 
String id = censusIdValue(rowNumber); 
    String url = "https://www.broadbandmap.gov/broadbandmap/analyze/jun2014/summary/population/censusplace/ids/" + URLEncoder.encode(id, "UTF-8") + "?format=json"; 
    HttpClient client = HttpClientBuilder.create().build(); 
    HttpGet httpGet = new HttpGet(url); 
    HttpResponse response = client.execute(httpGet); 
    InputStream is = response.getEntity().getContent(); 
    String result = getStringFromInputStream(is); 
    JSONObject jsonObj = new JSONObject(result.toString()); 
    JSONArray data = jsonObj.getJSONArray("Results"); 
     int rowCount = 0; 
     XSSFWorkbook workbook = new XSSFWorkbook(); 
     XSSFSheet sheet = workbook.createSheet("wow"); 

      JSONObject rec = data.getJSONObject(0); 
      String geographyId = rec.getString("geographyId"); 
      String strStatusType = rec.getString("geographyName"); 
      int numberOfWirelineProvidersEquals0 = rec.getInt("numberOfWirelineProvidersEquals0"); 

      XSSFRow row = sheet.createRow(rowCount++); 
      XSSFCell cell1 = row.createCell(1); 
      cell1.setCellValue(geographyId); 
      XSSFCell cell2 = row.createCell(2); 
      cell2.setCellValue(strStatusType); 
      XSSFCell cell3 = row.createCell(3); 
      cell3.setCellValue(numberOfWirelineProvidersEquals0); 

     try (FileOutputStream outputStream = new FileOutputStream("data.xlsx")) { 
      workbook.write(outputStream); 
     } 


} catch (ClientProtocolException e) { 
    e.printStackTrace(); 
} catch (UnsupportedOperationException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

    rowNumber++; 

     } 
} 
+0

시트의 모든 줄을 쓰려면 jsonarray를 반복해야합니다. –

답변

2

파일을 각 행으로 덮어 쓰는 것 같습니다. 루프 외부에 쓰기를 시도하십시오.

또한 rowCount 변수를 제거하십시오. 거기에 rowNumber 변수를 사용하고 싶습니다.

마지막으로 네 번만 반복한다고 생각합니다. (당신이 질문에 5를 원한다는 것을 나타냅니다.)

+0

rowNumber는 프로그램의 다른 부분이지만 내 관심을 가져 주셔서 감사합니다! 문제는 "int rowCount = 0"을 루프 바깥으로 옮길 필요가 있었기 때문에 새로운 행을 만들지 않도록 재설정 만했기 때문입니다. – arsenal11