2015-08-24 11 views
5

Ho un file di Excel di grandi dimensioni. Voglio filtrare una colonna "Utilizzata principalmente per" per i valori "utilizzati principalmente per i dispositivi mobili". Quindi ho bisogno di memorizzare i valori corrispondenti nella colonna "Serie numerica" ​​in un elenco. Ho un codice per iniziare. Tuttavia, non sono in grado di eseguire la parte di filtraggio e di memorizzarla in un elenco di array. Potresti per favore aiutarmi qui.Filtraggio colonna in excel utilizzando java poi

Ho fatto un po 'di scavo e ho modificato il codice. Tuttavia non sono stato in grado di soddisfare il mio requisito. Ho problemi seguenti -

* Il codice seleziona solo due colonne e ne visualizza il contenuto. Non in grado di filtrare :(

* L'Excel ha nomi di colonna con spazi, quindi ho ricevuto l'errore Poiché l'Excel è generato dall'utente, non abbiamo alcun controllo sui nomi delle colonne. nome con spazi ??

* Excel ha valori alfanumerici, come trattare con loro?

la prego di darmi una mano qui.

package com.excel; 
import java.io.File; 
import java.io.FileInputStream; 
import java.math.BigDecimal; 
import java.io.FileOutputStream; 
import org.apache.poi.hssf.usermodel.HSSFWorkbook; 
import org.apache.poi.hssf.usermodel.HSSFWorkbook;*/ 
import org.apache.poi.hssf.usermodel.HSSFWorkbook; 
import org.apache.poi.hssf.usermodel.HSSFSheet; 


public class Test { 

    public static void main(String[] args) throws Exception { 

     File excel = new File("D:\\FileDownload\\example.xls"); 
     //File excel = new File("D:\\FileDownload\\Sample_Filtered.xls"); 
     FileInputStream fis = new FileInputStream(excel); 

     //XSSFWorkbook wb = new XSSFWorkbook(fis); 
     HSSFWorkbook wb = new HSSFWorkbook(fis); 
     //org.apache.poi.ss.usermodel.Workbook wb = WorkbookFactory.create(fis); 
     HSSFSheet ws = wb.getSheetAt(0); 
     // org.apache.poi.ss.usermodel.Sheet ws = wb.getSheetAt(0); 
     ws.setForceFormulaRecalculation(true); 

     int rowNum = ws.getLastRowNum() + 1; 
     int colNum = ws.getRow(0).getLastCellNum(); 
     int mainlyUsedForHeaderIndex = -1, mobileSeriesHeaderIndex = -1; 

     //Read the headers first. Locate the ones you need 
     HSSFRow rowHeader = ws.getRow(0); 
     for (int j = 0; j < colNum; j++) { 
      HSSFCell cell = rowHeader.getCell(j); 
      String cellValue = cellToString(cell); 
      if("Mainly used for".equalsIgnoreCase(cellValue)) { 
      //if("MainlyFor".equalsIgnoreCase(cellValue)) { 
       mainlyUsedForHeaderIndex = j; 
      } else if("Number Series".equalsIgnoreCase(cellValue)) { 
       //else if("MobileSeries".equalsIgnoreCase(cellValue)) { 
       mobileSeriesHeaderIndex = j; 
      } 
      } 

     if(mainlyUsedForHeaderIndex == -1 || mobileSeriesHeaderIndex == -1) { 
      throw new Exception("Could not find header indexes\n Mainly used for : " + mainlyUsedForHeaderIndex + " | Number Series: " + mobileSeriesHeaderIndex); 
     }else{ 
      System.out.println("Indexes are found!!!"); 
     } 


     //createnew workbook 
     XSSFWorkbook workbook = new XSSFWorkbook();   
     //Create a blank sheet 
     XSSFSheet sheet = workbook.createSheet("data"); 

     for (int i = 1; i < rowNum; i++) { 
      HSSFRow row = ws.getRow(i); 
      //row = sheet.createRow(rowNum++); 
      String MainlyUsed = cellToString(row.getCell(mainlyUsedForHeaderIndex)); 
      String ForMobile = cellToString(row.getCell(mobileSeriesHeaderIndex)); 
      int cellIndex = 0; 
      XSSFRow newRow = sheet.createRow(i-1); 
      newRow.createCell(cellIndex++).setCellValue(MainlyUsed); 
      newRow.createCell(cellIndex++).setCellValue(ForMobile); 



     } 
     FileOutputStream fos = new FileOutputStream(new File("D:\\FileDownload\\test1.xlsx")); 
     System.out.println("File generated"); 
     workbook.write(fos); 
     fos.close(); 
    } 

    public static String cellToString(HSSFCell cell) { 

     int type; 
     Object result = null; 
     type = cell.getCellType(); 

     switch (type) {/* 

     case HSSFCell.CELL_TYPE_NUMERIC: 
      result = BigDecimal.valueOf(cell.getNumericCellValue()) 
        .toPlainString(); 

      break; 
     case HSSFCell.CELL_TYPE_STRING: 
      result = cell.getStringCellValue(); 
      break; 
     case HSSFCell.CELL_TYPE_BLANK: 
      result = ""; 
      break; 
     case HSSFCell.CELL_TYPE_FORMULA: 
      result = cell.getCellFormula();*/ 

     case HSSFCell.CELL_TYPE_BLANK: 
       result=""; 
       break; 
     case HSSFCell.CELL_TYPE_BOOLEAN: 
       // 
       result = cell.getBooleanCellValue(); 
       break; 
     case HSSFCell.CELL_TYPE_ERROR: 
       // 
       break; 

     case HSSFCell.CELL_TYPE_FORMULA: 
       result = cell.getCellFormula(); 
       break; 
     case HSSFCell.CELL_TYPE_NUMERIC: 
       // 
       result = cell.getNumericCellValue(); 
       break; 
     case HSSFCell.CELL_TYPE_STRING: 
       result= cell.getRichStringCellValue(); 
       // result = cell.getStringCellValue(); 
       break; 
    } 


     return result.toString(); 
    } 
} 

risposta

2

sono in grado di soddisfare la mia richiesta utilizzando seguendo un approccio completamente diverso

package com.excel; 

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


import org.apache.poi.hssf.usermodel.HSSFCell; 
import org.apache.poi.hssf.usermodel.HSSFRow; 
import org.apache.poi.hssf.usermodel.HSSFSheet; 
import org.apache.poi.hssf.usermodel.HSSFWorkbook; 
import org.apache.poi.ss.usermodel.Cell; 
import org.apache.poi.ss.usermodel.Row; 

public class ExcelRead { 

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

      String fileName = "D:\\FileDownload\\example.xls"; 
      String cellContent = "Mainly used for mobile"; 
      int rownr=0; 
      int colnr = 0; //column from which you need data to store in array list 

      InputStream input = new FileInputStream(fileName); 

      HSSFWorkbook wb = new HSSFWorkbook(input); 
      HSSFSheet sheet = wb.getSheetAt(0); 
      List MobileSeries=new ArrayList(); 
      MobileSeries = findRow(sheet, cellContent); 

      if(MobileSeries !=null){ 
       for(Iterator iter=MobileSeries.iterator();iter.hasNext();){ 
        System.out.println(iter.next()); 


      } 
      } 
      //output(sheet, rownr, colnr); 

      finish(); 
     } 

     private static void output(HSSFSheet sheet, int rownr, int colnr) { 
      /* 
      * This method displays the total value of the month 
      */ 

      HSSFRow row = sheet.getRow(rownr); 
      HSSFCell cell = row.getCell(colnr); 

        System.out.println("Your total is: " + cell);   
     } 

     private static List findRow(HSSFSheet sheet, String cellContent) { 
      List MobileSeries=new ArrayList(); 
      for (Row row : sheet) { 
       for (Cell cell : row) { 
        if (cell.getCellType() == Cell.CELL_TYPE_STRING) { 
         if (cell.getRichStringCellValue().getString().trim().equals(cellContent)) { 
          //System.out.println("Row numbers are"+row.getRowNum()); 
          int rownumber=row.getRowNum(); 
          //return row.getRowNum(); 
          HSSFRow row1 = sheet.getRow(rownumber); 
          HSSFCell cell1 = row1.getCell(0); 
          MobileSeries.add(cell1); 
         } 
        } 
       } 
      }  
      return MobileSeries; 


     } 

     private static void finish() { 

      System.exit(0); 
     } 
    } 
Problemi correlati