我正在使用 Apache POI 来阅读 excel 表格。Excel 工作表将有大约 50 列。但我只需要阅读前 20 列。
如何在 Apache POI 中执行此操作,以免读取额外的列?
我正在使用 Apache POI 来阅读 excel 表格。Excel 工作表将有大约 50 列。但我只需要阅读前 20 列。
如何在 Apache POI 中执行此操作,以免读取额外的列?
您可以迭代给定行的每个单元格,并忽略超过 20 的所有额外列:
Sheet sheet = wb.getSheetAt(0);
for (Row row : sheet) {
for (int i = 0; i < 20; i++) {
Cell cell = row.getCell(i);
}
}
使用这个迭代器类
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;
}
}
只需遍历行和列,请参阅使用HSSFSheet.getPhysicalNumberOfRows()和HSSFRow.getPhysicalNumberOfCells()方法的HSSFReadWrite.java示例。
还可以查看Event API,它将允许您使用电子表格的“事件”样式。