2017-10-20 10 views
0

Ceci est un programme pour lire les différences de fichier et d'écriture dans chaque cellule d'Excel.
Je suis confronté à un problème où la sortie dans la console affiche la valeur incrémentée de i, mais n'écrit pas la valeur de tous les index, à la place, seul le dernier index est écrit.
Je suis nouveau à Java et j'ai essayé de faire des changements au code mais rien n'a fonctionné.Impossible d'imprimer dans les cellules d'Excel. JAVA

Ci-dessous mon code:

FileInputStream fstream = new FileInputStream("C:\\Users\\Vishal\\workspace\\timestampAutomation\\bin\\com\\time\\output\\myoutput1.txt"); 
    DataInputStream in = new DataInputStream(fstream); 
    BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
    String strLine; 
    String timestamp=""; 
    String value=""; 
    int count = 0; 
    int i = 0; 
    ArrayList words=new ArrayList<String>(); 
    Pattern p = Pattern.compile("\\bSYSTEM:TIMESTAMP\\b", Pattern.CASE_INSENSITIVE); 
    while ((strLine = br.readLine()) != null) 
    { 
     String[] words1=strLine.split(","); 
     words.addAll(Arrays.asList(words1)); 
    } 

    System.out.println("WORDS LENGTH:"+words.size()); 
    for (String word : (ArrayList<String>)words) 
    { 

     Matcher m=p.matcher(word); 
     count++; 

     if (m.find()) 
     { 

      if(count<words.size()-1) 
      { 
       String tmp=(String)words.get(count); 
       String[] tmpArr=tmp.split("="); 
       timestamp=tmpArr[1]; 
       String val=(String)words.get(count+1); 
       String[] valArr=val.split("="); 
       value=valArr[1]; 
      } 

       System.out.println("Timestamp:"+timestamp+"\tValue:"+value); 
       //Splitting output into data format given 
       //Splitting output into data format given 
       String year=value.substring(0, 4); 

       String mnt=value.substring(4, 6); 

       String day=value.substring(6, 8); 

       String hr=value.substring(8, 10); 

       int hours=Integer.parseInt(hr)-2; 

       String min=value.substring(10, 12); 

       String sec=value.substring(12, 14); 

       String valueCon=year+"/"+mnt+"/"+day+" "+String.valueOf(hours)+":"+min+":"+sec; 

       long newtime= Long.parseLong(timestamp); 
       Date currentDate = new Date(newtime - TimeUnit.MINUTES.toMillis(330)); 

       String timeStamp = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(currentDate); 

       String dateStart = timeStamp; 
       String dateStop = valueCon; 

       SimpleDateFormat format = new SimpleDateFormat("yy/MM/dd HH:mm:ss"); 

       Date d1 = null; 
       Date d2 = null; 

       d1 = format.parse(dateStart); 
       d2 = format.parse(dateStop); 

       long duration = d1.getTime() - d2.getTime(); 

       long diffInSeconds = TimeUnit.MILLISECONDS.toSeconds(duration); 
       System.out.println("hbase Timestamp "+timeStamp); 
       System.out.println("Value: "+valueCon); 
       System.out.println("Difference of Timestamp in Seconds:"+diffInSeconds); 

       //printing values in excel 
       Workbook wb = new HSSFWorkbook(); 
       Sheet sheet = wb.createSheet("sheet"); 
       Row row = sheet.createRow((short) 0); 



       row.createCell(i).setCellValue(diffInSeconds); 

       FileOutputStream fileOut = new FileOutputStream("C:\\Users\\Vishal\\workspace\\timestampAutomation\\bin\\com\\time\\output\\helloworl.xls"); 
       wb.write(fileOut); 
       fileOut.close(); 
       i++; 
     } 


    } 
    } 

sortie sur la console:

WORDS LENGTH:123 
Timestamp:1504767614024 Value:20170907090000 
hbase Timestamp 2017/09/07 07:00:14 
Value: 2017/09/07 7:00:00 
Difference of Timestamp in Seconds:14 
current value of i 0 Timestamp:1504767614025 Value:20170907090000 
hbase Timestamp 2017/09/07 07:00:14 
Value: 2017/09/07 7:00:00 
Difference of Timestamp in Seconds:14 
current value of i 1 Timestamp:1504767614029 Value:20170907090000 
hbase Timestamp 2017/09/07 07:00:14 
Value: 2017/09/07 7:00:00 
Difference of Timestamp in Seconds:14 
current value of i 2 Timestamp:1504767614030 Value:20170907090000 
hbase Timestamp 2017/09/07 07:00:14 
Value: 2017/09/07 7:00:00 
Difference of Timestamp in Seconds:14 
current value of i 3 

Mais il n'imprime pas sur les quatre index (cellules) dans Excel.
Suis-je manque quelque chose, s'il vous plaît me aider:

output in excel

Répondre

1

Il y a un problème dans votre logique

//printing values in excel 
    Workbook wb = new HSSFWorkbook(); 
    Sheet sheet = wb.createSheet("sheet"); 
    Row row = sheet.createRow((short) 0); 
    row.createCell(i).setCellValue(diffInSeconds); 

Ainsi, vous créez un classeur en boucle, cela signifie que vous créez n nombre de classeurs puis dans chacun de ces classeurs vous créez une feuille puis dans chaque feuille une ligne à 0e index puis dans cette ligne vous créez une cellule à l'index ith, de sorte que dans chacun de ces classeurs la cellule est créée au préalable classeurs -> feuille -> cellule (i) plus 1. Cela n'a aucun sens. Une feuille Excel standard doit ressembler à 1 classeur, 1 ou plusieurs feuilles, puis chaque feuille contenant 1 ou plusieurs lignes et chaque ligne contenant une ou plusieurs cellules.

Déplacer cette avant votre boucle for

Workbook wb = new HSSFWorkbook(); 
    Sheet sheet = wb.createSheet("sheet"); 

Créer ligne dans la boucle selon vos besoins, à partir du code donné, il semble que vous voulez seulement 1 rang. Ensuite, pour cette ligne, créez autant de cellules que vous le souhaitez, à partir des cellules du code 4 données. Créez ces cellules dans une boucle for, puis, lorsque vous avez terminé, écrivez la sortie dans un fichier.

Déplacer cette

FileOutputStream fileOut = new FileOutputStream("C:\\Users\\Vishal\\workspace\\timestampAutomation\\bin\\com\\time\\output\\helloworl.xls"); 
       wb.write(fileOut); 
       fileOut.close(); 

Après sont fermés tous les boucles for.

+0

ohh c'était sacrément bête erreur dans la logique, Merci @ Timothy pour signaler la faute. – Neha