0

我正在使用 Apache POI 来阅读 excel 表格。Excel 工作表将有大约 50 列。但我只需要阅读前 20 列。

如何在 Apache POI 中执行此操作,以免读取额外的列?

4

3 回答 3

3

您可以迭代给定行的每个单元格,并忽略超过 20 的所有额外列:

Sheet sheet = wb.getSheetAt(0);
for (Row row : sheet) {
    for (int i = 0; i < 20; i++) {
        Cell cell = row.getCell(i);
    }
}
于 2012-08-14T12:33:22.367 回答
3

使用这个迭代器类

public boolean test()
{
 if ( m_excel_workbook != null )
  {
          int zaehler = 0;
          Range r_a = new Range( getSelectedSheet(), 1,  20, 20, 30 );

          Cell c = r_a.first();

          while (( c != null ) && (zaehler < 2000)) {
            c.setCellValue( "A" );

            c=  r_a.next();
            zaehler++;
          }
        }
        return false;
}


private static class Range 
      {
        private int m_start_zeile = 0;
        private int m_end_zeile = 0;
        private int m_start_spalte = 0;
        private int m_end_spalte = 0;

        private Sheet m_sheet = null;

        public Range( Sheet pSheet, int pStartZeile, int pStartSpalte, int pEndZeile, int pEndSpalte )
        {
          m_sheet = pSheet;
          m_start_zeile = pStartZeile;
          m_end_zeile = pEndZeile;
          m_start_spalte = pStartSpalte;
          m_end_spalte = pEndSpalte;

          m_it_zeile = m_start_zeile;
          m_it_spalte = m_start_spalte;
        }

        private int m_it_zeile = 0;
        private int m_it_spalte = 0;

        public Cell first()
        {
          m_it_zeile = m_start_zeile;
          m_it_spalte = m_start_spalte;

          return getCell( m_it_zeile, m_it_spalte );
        }

        public Cell next()
        {
          m_it_spalte++;

          if ( m_it_spalte > m_end_spalte )
          {
            m_it_zeile++;
            m_it_spalte = m_start_spalte;
          }

          return getCell( m_it_zeile, m_it_spalte );
        }


        private Cell getCell( int pZeile , int pSpalte )
        {
          /*
           * Prüfung: Iteratorzeile gültig?
           */
          if (( m_it_zeile>= m_start_zeile ) && ( m_it_zeile <= m_end_zeile ))
          {
            if (( m_it_spalte>= m_start_spalte ) && ( m_it_spalte <= m_end_spalte ))
            {
               Row row  = m_sheet.getRow( m_it_zeile );

               if ( row == null )
               {
                 row = m_sheet.createRow( m_it_zeile );
               }

               if ( row != null )
               {
                 Cell cell = row.getCell( m_it_spalte );

                 if ( cell == null )
                 {
                   cell = row.createCell( m_it_spalte );
                 }

                 return cell;
               }
            }
          }
          return null;
        }


    //  Sheet sheet = wb.getSheetAt(0);
    //  for (Row row : sheet) {
    //      for (int i = 0; i < 20; i++) {
    //          Cell cell = row.getCell(i);
    //      }
    //  }


        /**
         * Liefert den Wert der Variablen "m_end_spalte".
         * 
         * @return m_end_spalte
         */
        public int getEndSpalte()
        {
          return m_end_spalte;
        }


        /**
         * Liefert den Wert der Variablen "m_end_zeile".
         * 
         * @return m_end_zeile
         */
        public int getEndZeile()
        {
          return m_end_zeile;
        }


        /**
         * Liefert den Wert der Variablen "m_sheet".
         * 
         * @return m_sheet
         */
        public Sheet getSheet()
        {
          return m_sheet;
        }


        /**
         * Liefert den Wert der Variablen "m_start_spalte".
         * 
         * @return m_start_spalte
         */
        public int getStartSpalte()
        {
          return m_start_spalte;
        }


        /**
         * Liefert den Wert der Variablen "m_start_zeile".
         * 
         * @return m_start_zeile
         */
        public int getStartZeile()
        {
          return m_start_zeile;
        }


        /**
         * Setzt den Wert der Variablen "m_end_spalte".
         * 
         * @param pEndSpalte der zu setzende Wert
         */
        public void setEndSpalte( int pEndSpalte )
        {
          m_end_spalte = pEndSpalte;
        }


        /**
         * Setzt den Wert der Variablen "m_end_zeile".
         * 
         * @param pEndZeile der zu setzende Wert
         */
        public void setEndZeile( int pEndZeile )
        {
          m_end_zeile = pEndZeile;
        }


        /**
         * Setzt den Wert der Variablen "m_sheet".
         * 
         * @param pSheet der zu setzende Wert
         */
        public void setSheet( Sheet pSheet )
        {
          m_sheet = pSheet;
        }


        /**
         * Setzt den Wert der Variablen "m_start_spalte".
         * 
         * @param pStartSpalte der zu setzende Wert
         */
        public void setStartSpalte( int pStartSpalte )
        {
          m_start_spalte = pStartSpalte;
        }


        /**
         * Setzt den Wert der Variablen "m_start_zeile".
         * 
         * @param pStartZeile der zu setzende Wert
         */
        public void setStartZeile( int pStartZeile )
        {
          m_start_zeile = pStartZeile;
        }

      // ########################################################################################################################
    //                                                           toString                                                        
      // ########################################################################################################################

        /**
         * Erstellt die String-Repräsentation dieser Klasse
         * 
         * @return pProperties eine Auflistung der Variablen und deren Inhalte
         */
        public String toString()
        {
          String log_string = "";

          /*
           * Ausgabe aller Werte aus der Ini-Datei
           */
          log_string += "\n + END_SPALTE    >" + m_end_spalte    + "<";
          log_string += "\n + END_ZEILE     >" + m_end_zeile     + "<";
          log_string += "\n + SHEET         >" + m_sheet         + "<";
          log_string += "\n + START_SPALTE  >" + m_start_spalte  + "<";
          log_string += "\n + START_ZEILE   >" + m_start_zeile   + "<";

          return log_string;
        }
}
于 2012-11-21T13:11:41.880 回答
1

只需遍历行和列,请参阅使用HSSFSheet.getPhysicalNumberOfRows()HSSFRow.getPhysicalNumberOfCells()方法的HSSFReadWrite.java示例。

还可以查看Event API,它将允许您使用电子表格的“事件”样式。

于 2012-08-14T12:37:08.437 回答