使用Java程序从Excel文件中获取列X.

我有一个Excel工作表,我有近150列。 我正在写一个实用程序,在它将获取一列的列名称是说X.在另一个线程中,我看到如何读取XL工作簿和工作表..写下面的代码..

HSSFSheet sheet = workbook.getSheetAt(0); Iterator rows = sheet.rowIterator(); while (rows.hasNext()) { HSSFRow row = (HSSFRow) rows.next(); Iterator cells = row.cellIterator(); List data = new ArrayList(); while (cells.hasNext()) { HSSFCell cell = (HSSFCell) cells.next(); data.add(cell); } sheetData.add(data); } } 

所以如何从列表中提取确切的列从列名.. ..?

Apache POI API HSSFSheet是基于行的,你需要通过迭代来提取列数据,下面的链接可能会回答你的问题:

在Apache POI API中提取电子表格列中的数据

修改代码以在第一个工作表的第1行中searchstring

 package projectTest.test; import java.io.FileInputStream; import java.util.ArrayList; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; public class Poi { public static void main(String[] args) throws Exception { //test file is located in your project path FileInputStream fileIn = new FileInputStream("test.xls"); //read file POIFSFileSystem fs = new POIFSFileSystem(fileIn); HSSFWorkbook filename = new HSSFWorkbook(fs); //open sheet 0 which is first sheet of your worksheet HSSFSheet sheet = filename.getSheetAt(0); //we will search for column index containing string "Your Column Name" in the row 0 (which is first row of a worksheet String columnWanted = "Your Column Name"; Integer columnNo = null; //output all not null values to the list List<Cell> cells = new ArrayList<Cell>(); Row firstRow = sheet.getRow(0); for(Cell cell:firstRow){ if (cell.getStringCellValue().equals(columnWanted)){ columnNo = cell.getColumnIndex(); } } if (columnNo != null){ for (Row row : sheet) { Cell c = row.getCell(columnNo); if (c == null || c.getCellType() == Cell.CELL_TYPE_BLANK) { // Nothing in the cell in this row, skip it } else { cells.add(c); } } }else{ System.out.println("could not find column " + columnWanted + " in first row of " + fileIn.toString()); } } } 

这是非常简单和高效的代码,并按预期工作

 import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; public class TestExcelFile { public static void main(String[] args) { String envFilePath = System.getenv("AZURE_FILE_PATH"); // upload list of files/directory to blob storage File folder = new File(envFilePath); File[] listOfFiles = folder.listFiles(); for (int i = 0; i < listOfFiles.length; i++) { if (listOfFiles[i].isFile()) { System.out.println("File " + listOfFiles[i].getName()); Workbook workbook; //int masterSheetColumnIndex = 0; try { workbook = WorkbookFactory.create(new FileInputStream(envFilePath + "\\"+ listOfFiles[i].getName())); // Get the first sheet. Sheet sheet = workbook.getSheetAt(0); // Get the first cell. Row row = sheet.getRow(0); //Cell cell = row.getCell(0); for (Cell cell1 : row) { // Show what is being read. System.out.println(cell1.toString()); //masterSheetColumnIndex++; } //we will search for column index containing string "Your Column Name" in the row 0 (which is first row of a worksheet String columnWanted = "Modality Name"; Integer columnNo = null; //output all not null values to the list List<Cell> cells = new ArrayList<Cell>(); Row firstRow = sheet.getRow(0); for(Cell cell1:firstRow){ if (cell1.getStringCellValue().equals(columnWanted)){ columnNo = cell1.getColumnIndex(); } } if (columnNo != null){ for (Row row1 : sheet) { Cell c = row1.getCell(columnNo); if (c == null || c.getCellType() == Cell.CELL_TYPE_BLANK) { // Nothing in the cell in this row, skip it } else { cells.add(c); } } System.out.println(""); }else{ System.out.println("could not find column " + columnWanted + " in first row of " + listOfFiles[i].getName()); } } catch (InvalidFormatException | IOException e) { e.printStackTrace(); } } } } }