2015-06-07 2 views
1

У меня есть файл excel с именем abc.xls в моем диске c: (локальный компьютер), теперь в этом файле excel на первом листе есть таблица, как показано ниже и эта ниже таблица может лежать в любом диапазоне с листом, поэтому я разработал нижеследующую программу java, которая будет сканировать весь лист сначала по строкам, а затем по столбцу и найдет ячейку, где TradeRef естьИтерирование по столбцам строки через poi в java

TradeRef TMS Deal  Date   
    12  45 DRT 23/97/2014  
    23  36 QWE 21/07/2015 

Теперь проблема в моей программе ниже - захватить ячейку, где находится TradeRef, а затем она итерации по столбцам, а затем аналогичным образом захватывает следующую строку и выполняет итерацию по столбцам

, но логика, которую я хочу применить, заключается в том, что когда он захватывает ячейку TradeRef и выполняет итерацию по столбцам и достигает последнего столбца таблицы, который является Date в приведенной выше таблице, тогда он должен дополнительно сканировать следующие 20 столбцов в пределах одной и той же строки, и если в течение следующих 20 столбцов нет ячейки, имеющей какое-либо значение, тогда она должна перейти к следующей строке, и если в пределах 20 столбцов это будет означать, что любая ячейка может иметь значение, тогда в этом случае она должна прочитать эту ячейку значение

так что было бы, как

TradeRef TMS Deal  Date   <----- scan next 20 columns is there is no value in next 20 cells then move to next row else include that cell value also-------> 
    12  45 DRT 23/97/2014   
    23  36 QWE 21/07/2015 

поэтому, пожалуйста, посоветуйте, как реализовать вышеупомянутую логику сканирования следующего 20 столбцы в строке ниже моего ранее реализация, которая является

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


     FileInputStream file = null ; 
     try { 

       file = new FileInputStream(new File("C:\\abc.xls")); 
       HSSFWorkbook workbook = new HSSFWorkbook(file); 
       HSSFSheet firstSheet = workbook.getSheetAt(0); 
       Iterator<Row> iterator = firstSheet.iterator(); 

       Cell c = findFirstRow(firstSheet); 
      } 




      catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } finally{ 
       file.close(); 
      } 

    } 

    public static Cell findFirstRow(HSSFSheet firstSheet) { 
      for (Row row : firstSheet) { 
      for (Cell cell : row) { 
        cell.setCellType(cell.CELL_TYPE_STRING); 
       if ("TradeRef".equals(cell.getStringCellValue())) { 
       int row1 = cell.getRowIndex() + 1; 
       int col = cell.getColumnIndex(); 
       if (firstSheet.getRow(row1) == null) 
        throw new RuntimeException("Row " + row1 + 1 + " is empty!"); 
       Cell startOfFirstDataRow = firstSheet.getRow(row1).getCell(col); 
       if (startOfFirstDataRow == null) { 
        CellReference ref = new CellReference(row1, col); 
        throw new RuntimeException("Data not found at " + ref.formatAsString()); 
       } 
       return startOfFirstDataRow; 
       } 
      } 
      } 
      throw new RuntimeException("TradingRef header cell not found!"); 
     } 


} 

поэтому, пожалуйста, посоветуйте, как я могу реализовать описанную выше логику сканирования следующих 20 столбцов

+0

row.cellIterator знает число клеток очень хорошо, сканирование в дальнейшем возможно (row.getCell), но совершенно бессмысленно –

+0

возможно дубликат [Читать файл excel 2010 apache poi, игнорируя пустые ячейки] (http://stackoverflow.com/questions/13048981/read-excel-file-2010-apache-poi-ignoring-empty-cells) – TheCodingFrog

+0

@ammoQ Спасибо за консультацию попросите вас показать, как мы можем сканировать следующие 20 столбцов, пожалуйста, –

ответ

0

Во-первых, вы, вероятно, следует использовать org.apache.poi.ss.usermodel API, которые работают с все файлы Excel, а классы HSSF* работают только с .xls файлами.

У класса org.apache.poi.ss.usermodel.Sheet есть метод getFirstRow(), который вы можете использовать, чтобы начать поиск. Далее вы хотите найти последовательность ячеек, содержащих заданную строку, например:

// This is an array containing the headers 
final String[] headers = { "TradeRef", "TMS", "Deal", "Date" }; 

// now we take row from above to be the Row object where we seek our headers 
int last = row.getLastCellNum(); 
for (int c = row.getFirstCellNum(); c < last; c++) { 
    int h = 0; 
    // check if the cell at (c + h) has the required value 
    for (; h < headers.length && c + h < last; h++) { 
     if (!headers[h].equals(row.getCell(c + h).getStringCellValue())) { 
      break; // if the cell value differs from our header 
     } 
    } 
    if (h == headers.length) // this means the break was never invoked 
     return c; // found it 
} 
return -1; // not found 
+0

@IIogiq Большое спасибо за решение. Пожалуйста, сообщите подробно, что делает этот фрагмент кода, пожалуйста, попросите вас, если вы можете заполнить этот код, как я показанный выше, который поможет понять многое благодаря большому количеству –

+0

@llogoq re квест вам понравится, если вы можете интегрировать свой фрагмент кода в мой, показанный выше, пожалуйста, заранее заблаговременно –

+0

@erertgghg просто хедз-ап: http://meta.stackoverflow.com/questions/267490/thanks-in-a- комментарий - также это место, где можно задавать вопросы и отвечать на них, а не заставлять кого-то делать свой код бесплатно. – llogiq

Смежные вопросы