2016-03-25 7 views
2

JavaでのApache POIを使用してexcelReadデータの追加、私は私はそれが私の以前のデータ</p> <p>ファイルを削除し、その上に書くとき、Excelが.Butファイルの既存のデータを追加しようとしています

 package Excel; 
     import java.io.File; 
     import java.io.FileInputStream; 
     import java.io.IOException; 
     import org.apache.poi.hssf.usermodel.HSSFWorkbook; 
     import org.apache.poi.ss.usermodel.Row; 
     import org.apache.poi.ss.usermodel.Sheet; 
     import org.apache.poi.ss.usermodel.Workbook; 
     import org.apache.poi.xssf.usermodel.XSSFWorkbook; 

     public class ExcelRead { 
      static int passRowCount; 
      int rowCount; 

     Sheet guru99Sheet; 
     Workbook guru99Workbook = null; 

      public void readExcel(String filePath, String fileName, String sheetName) throws IOException, InterruptedException { 

       // Create a object of File class to open xlsx file 
       System.out.println(filePath + "\\" + fileName); 

       File file = new File(filePath + "\\" + fileName); 

       // Create an object of FileInputStream class to read excel file 

       FileInputStream inputStream = new FileInputStream(file); 



       // Find the file extension by spliting file name in substring and 
       // getting only extension name 

       String fileExtensionName = fileName.substring(fileName.indexOf(".")); 

       // Check condition if the file is xlsx file 

       if (fileExtensionName.equals(".xlsx")) { 
        System.out.println("in xlsx"); 
        // If it is xlsx file then create object of XSSFWorkbook class 

        guru99Workbook = new XSSFWorkbook(inputStream); 

       } 

       // Check condition if the file is xls file 

       else if (fileExtensionName.equals(".xls")) { 

        // If it is xls file then create object of XSSFWorkbook class 

        guru99Workbook = new HSSFWorkbook(inputStream); 

       } 

       // Read sheet inside the workbook by its name 

       guru99Sheet = guru99Workbook.getSheet(sheetName); 
       System.out.println("getFirstRowNum: " + guru99Sheet.getFirstRowNum()); 

       Thread.sleep(1000); 

       // Find number of rows in excel file 

       rowCount = (guru99Sheet.getLastRowNum()) - (guru99Sheet.getFirstRowNum()); 
       System.out.println("rowcount: " + rowCount); 

       setRowCount(rowCount); 

      // Create a loop over all the rows of excel file to read it 

      for(

      int i = 1;i<rowCount;i++) 

      { 
       Thread.sleep(1000); 
       // System.out.println("i: " + i); 
       Row row = guru99Sheet.getRow(i); 

       // System.out.println("getLastCellNum : " + row.getLastCellNum()); 
       // Create a loop to print cell values in a row 

       for (int j = 1; j < row.getLastCellNum(); j++) { 
        Thread.sleep(1000); 
        // System.out.println("j: " + j); 
        // Print excel data in console 

        System.out.print(row.getCell(j).getStringCellValue() + " "); 
        // System.out.println("\n"); 
     } 

       System.out.println(); 
     } 

    } 
    public void setRowCount(int rc){ 
        passRowCount =rc; 
       } 
       public int getRowCount(){ 
        return passRowCount; 
       } 
      } 

ファイルをExcelファイルを既存の内MainFile

package Excel; 

    import java.io.IOException; 

    public class MainFile { 

     public static void main(String[] args) throws IOException, InterruptedException { 

     ExcelRead objExcelFile = new ExcelRead(); 

     // Prepare the path of excel file 

     String filePath = System.getProperty("user.dir") + "\\src\\Excel\\"; 

     // Call read file method of the class to read data 

     objExcelFile.readExcel(filePath, "TestCase2.xlsx", "Java Books"); 
AppendDataInExcel appendData = new AppendDataInExcel(); 
     appendData.append(); 
     } 
    } 

AppendDataInExcel

package Excel; 

import java.io.File; 
import java.io.FileOutputStream; 

import org.apache.poi.ss.usermodel.Cell; 
import org.apache.poi.ss.usermodel.Row; 
import org.apache.poi.ss.usermodel.Sheet; 
import org.apache.poi.xssf.usermodel.XSSFSheet; 
import org.apache.poi.xssf.usermodel.XSSFWorkbook; 

public class AppendDataInExcel { 
    ExcelRead excelRead = new ExcelRead(); 
    public void append() { 

     int rowc = excelRead.getRowCount(); 
     System.out.println("rowCountIn Append: " + rowc); 
     appendWrite(rowc); 
    } 



    public void appendWrite(int rowc) { 

     Object[][] bookData = { { "geography", "ali", "e" }, { "chemistry", "Joeloch", "f" }, { "Code", "rahul", "g" }, 
       { "phyysics", "banl", "h" }, }; 


     for (Object[] aBook : bookData) { 
      Row row = s.createRow(++rowc); 
      System.out.println("Row: " + row.getRowNum()); 
      int columnCount = 0; 

      for (Object field : aBook) { 
       Cell cell = row.createCell(++columnCount); 
       if (field instanceof String) { 
        cell.setCellValue((String) field); 
       } else if (field instanceof Integer) { 
        cell.setCellValue((Integer) field); 
       } 
      } 

     } 

     try { 
      FileOutputStream outputStream = new FileOutputStream(
        new File(System.getProperty("user.dir") + "\\src\\Excel\\TestCase2.xlsx")); 
      workbook.write(outputStream); 
      System.out.println("Wrote in Excel"); 
     } catch (Exception e) { 
      System.out.println("Exception: " + e); 
     } 
    } 
} 

いつか以前のExcelデータが削除されました。既存の行の末尾にデータを追加するだけの解決策がありました。このコンセプトは、タイムスタンプ付きのテストスクリプトのログを記録するために使用されます。スクリプトを実行するたびに、私は実行のすべての履歴を見ることができます

答えて

0

値がオブジェクトではなくクラスに関連付けられているので、静的フィールドpassRowCountをこのように使用しないでください。このループにあなたはそれを変更することができます。

for (Object[] aBook : bookData) { 
    Row row = s.createRow(s.getLastRowNum()+1); 
    System.out.println("Row: " + row.getRowNum()); 

    for (Object field : aBook) { 
     Cell cell = row.createCell(row.getLastCellNum()); 
     if (field instanceof String) { 
      cell.setCellValue((String) field); 
     } else if (field instanceof Integer) { 
      cell.setCellValue((Integer) field); 
     } 
    } 

} 

私はAppendDataInExcel使用ワークブックは以前に作成されたことがないので、あなただけのコードスニペットを提供すると信じています。

WorkbookインターフェイスをreadExcelメソッドから戻し、コンストラクタまたはメソッドを使用してAppendDataInExcelに渡す必要があります。あなたはまた、FileOutputStreamに追加フラグを追加することができます

FileOutputStream outputStream = new FileOutputStream(
        new File(System.getProperty("user.dir") + "\\src\\Excel\\TestCase2.xlsx"), true); 
+0

こんにちは、実際に何が起きているのですか?sheetName = "Java Books"、XSSFWorkbookブック=新しいXSSFWorkbook(); XSSFSheet sheet =ブック.getSheet(sheetName);メソッドappendWrite()にあります。私はExcelで書くことができますが、それは新しいExcelを開きます。しかし、ExcelReadクラスからXSSFSheetとXSSFWorkbookのインスタンスを渡そうとするとExcelが空になります。だから、私は自分のコードで何を修正すべきですか? – DoubtClear

2

コードは次のとおりです。

package poiwriteexcelfile; 
import java.io.File; 
import org.apache.poi.ss.usermodel.Cell; 
import org.apache.poi.ss.usermodel.Row; 
import org.apache.poi.ss.usermodel.Sheet; 
import org.apache.poi.ss.usermodel.Workbook; 
import org.apache.poi.xssf.usermodel.XSSFWorkbook; 

import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.Iterator; 
import java.util.List; 

import org.apache.poi.ss.usermodel.Row; 
import org.apache.poi.ss.usermodel.Sheet; 
import org.apache.poi.ss.usermodel.Workbook; 
import org.apache.poi.xssf.usermodel.XSSFWorkbook; 

import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 
import org.apache.poi.hssf.usermodel.HSSFSheet; 
import org.apache.poi.hssf.usermodel.HSSFWorkbook; 


public class PoiWriteExcelFile { 
    private static final PoiWriteExcelFile INSTANCE = new 
     PoiWriteExcelFile(); 
    private static int a; 
    public static PoiWriteExcelFile getInstance() 
    { 
     return INSTANCE; 
    } 

    private PoiWriteExcelFile() {} 

    public static void main(String args[]) 
    { 
     write(); 
    } 

    public static void write(){ 
     try 
     { 
      FileInputStream myxls = new FileInputStream("poi-testt.xls"); 
      HSSFWorkbook studentsSheet = new HSSFWorkbook(myxls); 
      HSSFSheet worksheet = studentsSheet.getSheetAt(0); 
      a=worksheet.getLastRowNum(); 
      System.out.println(a); 
      Row row = worksheet.createRow(++a); 
      row.createCell(1).setCellValue("Dr.Hola"); 
      myxls.close(); 
      FileOutputStream output_file =new FileOutputStream(new File("poi- 
                   testt.xls")); 
      //write changes 
      studentsSheet.write(output_file); 
      output_file.close(); 
      System.out.println(" is successfully written"); 
     } 
catch(Exception e){ 
     } 
    } 

}

0

あなたは、既存のExcelシートに新しい行にデータを追加することができます次のJavaコードを使用して前のデータを上書きするのではなく

File myFile_ED = new File("your_file_path"); 
         FileInputStream inputStream_ED = new FileInputStream(myFile_ED); 

XSSFWorkbook workbook_ED = new XSSFWorkbook(inputStream_ED); 
         XSSFSheet sheet_ED = workbook_ED.getSheetAt(0); 
         Iterator<Row> riterator_ED = sheet_ED.iterator(); 
         Row row_ED = sheet_ED.createRow(sheet_ED.getLastRowNum()+1); 
         if(sheet_ED.getLastRowNum()==0){ 

         } 

         Cell StartTime_ED = row_ED.createCell(0); 
         StartTime_ED.setCellValue("your data"); 

         Cell NoofDevice_ED = row_ED.createCell(1); 
         NoofDevice_ED.setCellValue("your data"); 

         Cell Device_ID_ED = row_ED.createCell(2); 
         Device_ID_ED.setCellValue("your data"); 


         FileOutputStream os_ED = new FileOutputStream(myFile_ED); 
          workbook_ED.write(os_ED); 

          os_ED.close(); 
          workbook_ED.close(); 
          inputStream_ED.close(); 
0

あなたはそれがプロセスを繰り返すことになり、データが新しい行に追加取得されるように、あなたのロジックに応じて、いくつかのループでは、このコードを配置する必要が新しい行に提供したデータを追加することができます

File myFile = new File("your_file_path"); 
        FileInputStream inputStream = new FileInputStream(myFile); 
        XSSFWorkbook workbook = new XSSFWorkbook(inputStream); 
        System.out.println(" wb: " + workbook); 
        XSSFSheet sheet = workbook.getSheet("your_sheet"); 
        System.out.println("sheet: " + sheet + " wb: " + workbook); 
        Object[][] bookData = { 

            {"data","data", "data","data", "data", "data"},  
           }; 

           int rowCount = 0; 

           Iterator<Row> riterator = sheet.iterator(); 

           while (riterator.hasNext()) { 
            Row nextRow = riterator.next(); 

            if (isColumnEmpty(sheet, 0, 0)) 
            break; 
               rowCount++; 

           } 

           for (Object[] aBook : bookData) { 
            Row row = sheet.createRow(rowCount++); 

            int columnCount = 0; 

            for (Object field : aBook) { 
             Cell cell = row.createCell(columnCount++); 
             if (field instanceof String) { 
              cell.setCellValue((String) field); 
              System.out.print(cell.getStringCellValue()); 
             } else if (field instanceof Integer) { 
              cell.setCellValue((Integer) field); 
             } 
            } 

           } 
//        
//        
           FileOutputStream os = new FileOutputStream(myFile); 
           workbook.write(os); 

           os.close(); 
           workbook.close(); 
           inputStream.close(); 
関連する問題