Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不知道什么';我的代码(ApachePOI)有问题_Java_Selenium_Apache Poi - Fatal编程技术网

Java 不知道什么';我的代码(ApachePOI)有问题

Java 不知道什么';我的代码(ApachePOI)有问题,java,selenium,apache-poi,Java,Selenium,Apache Poi,使用TestNG Framework和Apache POI——程序运行成功,但当我打开excel工作表时,只有最后一个值(在本例中为“xyz”)保存在文件中。我不明白(1,0)位置的“abc”值发生了什么问题问题在于: package apachePOIFrameWork.ObjectRepository; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; i

使用TestNG Framework和Apache POI——程序运行成功,但当我打开excel工作表时,只有最后一个值(在本例中为“xyz”)保存在文件中。我不明白(1,0)位置的“abc”值发生了什么问题

问题在于:

package apachePOIFrameWork.ObjectRepository;

import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class excelDataDrivenProcess {

    XSSFWorkbook mWorkbook;
    XSSFSheet mDataSheet;
    XSSFRow mRowPointer;
    XSSFCell mColPointer;
    FileInputStream mFis;
    FileOutputStream mFos;
    String mLocation;

    public excelDataDrivenProcess(String workBook){
        mLocation = workBook;
    }

    private void openFile(){
        try {
            mFis = new FileInputStream(mLocation);
            mWorkbook = new XSSFWorkbook(mFis);
        }catch (IOException ioe){
            ioe.printStackTrace();
            System.out.println("File Not Found");
        }
    }

    private void saveFile(){
        try {
            mFos = new FileOutputStream(mLocation);
            mWorkbook.write(mFos);
            mFos.close();
        }catch (IOException ioe){
            ioe.printStackTrace();
            System.out.println("Cannot Write");
        }
    }

    public void showDataAt(String sheetName, int rowNum, int colNum){

        openFile();
        mDataSheet = mWorkbook.getSheet(sheetName);
        mRowPointer = mDataSheet.getRow(rowNum);
        mColPointer = mRowPointer.getCell(colNum);

        System.out.println(mColPointer.getStringCellValue());
    }

    public void setDataAt(String value, String sheetName, int rowNum, int colNum){

        openFile();
        mDataSheet = mWorkbook.getSheet(sheetName);
        mRowPointer = mDataSheet.createRow(rowNum);
        mColPointer = mRowPointer.createCell(colNum);

        mColPointer.setCellValue(value);
        saveFile();
        System.out.println("Your Value: " + value + " is set to your desired Location");

    }

}

package apachePOIFrameWork.testCases;

import apachePOIFrameWork.ObjectRepository.excelDataDrivenProcess;
import org.testng.annotations.Test;

public class valuePrinter {

    @Test
    public void valueExtractor(){
        excelDataDrivenProcess eddp = new excelDataDrivenProcess("C:\\SeleniumWorks\\excelDataCollector.xlsx");
        eddp.showDataAt("Sheet1", 0, 0);
        eddp.showDataAt("Sheet1", 0, 1);
        eddp.setDataAt("abc", "Sheet1", 1, 0);
        eddp.setDataAt("xyz", "Sheet1", 1, 1);

        /*When I open excel file only xyz is printed on location (1,1) whereas abc is never saved in the file*/

    }
}
每次重新创建整行时,重复先前的值。 您可以使用类似于:

 mRowPointer = mDataSheet.createRow(rowNum);
问题在于:

package apachePOIFrameWork.ObjectRepository;

import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class excelDataDrivenProcess {

    XSSFWorkbook mWorkbook;
    XSSFSheet mDataSheet;
    XSSFRow mRowPointer;
    XSSFCell mColPointer;
    FileInputStream mFis;
    FileOutputStream mFos;
    String mLocation;

    public excelDataDrivenProcess(String workBook){
        mLocation = workBook;
    }

    private void openFile(){
        try {
            mFis = new FileInputStream(mLocation);
            mWorkbook = new XSSFWorkbook(mFis);
        }catch (IOException ioe){
            ioe.printStackTrace();
            System.out.println("File Not Found");
        }
    }

    private void saveFile(){
        try {
            mFos = new FileOutputStream(mLocation);
            mWorkbook.write(mFos);
            mFos.close();
        }catch (IOException ioe){
            ioe.printStackTrace();
            System.out.println("Cannot Write");
        }
    }

    public void showDataAt(String sheetName, int rowNum, int colNum){

        openFile();
        mDataSheet = mWorkbook.getSheet(sheetName);
        mRowPointer = mDataSheet.getRow(rowNum);
        mColPointer = mRowPointer.getCell(colNum);

        System.out.println(mColPointer.getStringCellValue());
    }

    public void setDataAt(String value, String sheetName, int rowNum, int colNum){

        openFile();
        mDataSheet = mWorkbook.getSheet(sheetName);
        mRowPointer = mDataSheet.createRow(rowNum);
        mColPointer = mRowPointer.createCell(colNum);

        mColPointer.setCellValue(value);
        saveFile();
        System.out.println("Your Value: " + value + " is set to your desired Location");

    }

}

package apachePOIFrameWork.testCases;

import apachePOIFrameWork.ObjectRepository.excelDataDrivenProcess;
import org.testng.annotations.Test;

public class valuePrinter {

    @Test
    public void valueExtractor(){
        excelDataDrivenProcess eddp = new excelDataDrivenProcess("C:\\SeleniumWorks\\excelDataCollector.xlsx");
        eddp.showDataAt("Sheet1", 0, 0);
        eddp.showDataAt("Sheet1", 0, 1);
        eddp.setDataAt("abc", "Sheet1", 1, 0);
        eddp.setDataAt("xyz", "Sheet1", 1, 1);

        /*When I open excel file only xyz is printed on location (1,1) whereas abc is never saved in the file*/

    }
}
每次重新创建整行时,重复先前的值。 您可以使用类似于:

 mRowPointer = mDataSheet.createRow(rowNum);