javaexceljxl

reading specific column of excel into java program


I need to read specific column of an excel sheet and then declare the variables in java. The program that I have done reads the entire content of excel sheet. But I need to read a fixed column like C.

This is what I have done:

import java.io.File;
import java.io.IOException;
import jxl.Cell; 
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

public class JavaApplication4 
{

private String inputFile;
String[][] data = null;
public void setInputFile(String inputFile) 
{
    this.inputFile = inputFile;
}

public String[][] read() throws IOException  
{
    File inputWorkbook = new File(inputFile);
    Workbook w;

    try 
    {
        w = Workbook.getWorkbook(inputWorkbook);
        // Get the first sheet


        Sheet sheet = w.getSheet(0);
        data = new String[sheet.getColumns()][sheet.getRows()];
        // Loop over first 10 column and lines
   //     System.out.println(sheet.getColumns() +  " " +sheet.getRows());
        for (int j = 0; j <sheet.getColumns(); j++) 
        {
            for (int i = 0; i < sheet.getRows(); i++) 
            {
                Cell cell = sheet.getCell(j, i);
                data[j][i] = cell.getContents();
              //  System.out.println(cell.getContents());
            }
        }

       for (int j = 0; j < data.length; j++) 
        {
            for (int i = 0; i <data[j].length; i++) 
            {

                System.out.println(data[j][i]);
            }
        } 

    } 

    catch (BiffException e) 
    {
        e.printStackTrace();
    }
return data;
}

public static void main(String[] args) throws IOException 
{
    JavaApplication4 test = new JavaApplication4();
    test.setInputFile("C://users/admin/Desktop/Content.xls");
    test.read();
}

}

Here is my excel sheet,

From a bowl of chits numbered /@v1@/ to /@v2@/ , a single chit is randomly drawn. Find the probability that the chit drawn is a number that is a multiple of /@v3@/ or /@ v4@/?

I need to read this data and by matching the pattern /@v1@1, I need to declare the variables. How can I do this?


Solution

  • What you can do, you should first get all the columns from the sheet by using sheet.getColumns() and store all columns in a list . Then you can match get all values based on columns. or you can get for only column "C".try using below code. let me know if this works.

    int masterSheetColumnIndex = sheet.getColumns();
        List<String> ExpectedColumns = new ArrayList<String>();
        for (int x = 0; x < masterSheetColumnIndex; x++) {
            Cell celll = sheet.getCell(x, 0);
            String d = celll.getContents();
            ExpectedColumns.add(d);
        }
        LinkedHashMap<String, List<String>> columnDataValues = new LinkedHashMap<String, List<String>>();
    
        List<String> column1 = new ArrayList<String>();
        // read values from driver sheet for each column
        for (int j = 0; j < masterSheetColumnIndex; j++) {
            column1 = new ArrayList<String>();
            for (int i = 1; i < sheet.getRows(); i++) {
                Cell cell = sheet.getCell(j, i);
                column1.add(cell.getContents());
            }
            columnDataValues.put(ExpectedColumns.get(j), column1);
        }