使用Apache POI从Excel文件中获取列?
为了做一些统计分析,我需要在Excel工作表的一列中提取值。 我一直在使用Apache POI包来从Excel文件中读取数据,并且当需要遍历行时它可以正常工作。 不过,我找不到任何有关在API(链接文本)和谷歌搜索中都无法获取列的问题。
由于我需要获取不同列的最大值和最小值并使用这些值生成随机数,因此,如果不拾取单个列,唯一的选择是遍历行和列以获取值并逐一比较,时间一直很有效。
关于如何解决这个问题的任何想法?
谢谢,
Excel文件是基于行而不是基于列的,所以获得列中所有值的唯一方法是依次查看每行。 有没有更快的方法来获取列,因为列中的单元格不存储在一起。
你的代码可能想成为像这样的东西:
List<Double> values = new ArrayList<Double>();
for(Row r : sheet) {
Cell c = r.getCell(columnNumber);
if(c != null) {
if(c.getCellType() == Cell.CELL_TYPE_NUMERIC) {
valuesadd(c.getNumericCellValue());
} else if(c.getCellType() == Cell.CELL_TYPE_FORMULA && c.getCachedFormulaResultType() == Cell.CELL_TYPE_NUMERIC) {
valuesadd(c.getNumericCellValue());
}
}
}
这会给你所有的数字单元格值在该列。
我知道这是一个古老的问题,但我遇到了同样的问题,必须以不同的方式解决问题。
我的代码不易调整,并且会增加许多不必要的复杂性。 所以我决定改变excel工作表,而不是像这里解释的那样反转列和行:(http://www.howtogeek.com/howto/12366/)
你也可以用VBA反转它,如下所示:
在Excel 2007中将包含数据列的行转换为包含多行的列
希望它能帮助那里的人
只是想补充一下,如果你的文件中有标题,但你不确定列索引,但想为特定的标题(列名)选择列,例如,你可以尝试这样的事情
for(Row r : datatypeSheet)
{
Iterator<Cell> headerIterator = r.cellIterator();
Cell header = null;
// table header row
if(r.getRowNum() == 0)
{
// getting specific column's index
while(headerIterator.hasNext())
{
header = headerIterator.next();
if(header.getStringCellValue().equalsIgnoreCase("column1Index"))
{
column1Index = header.getColumnIndex();
}
}
}
else
{
Cell column1Cells = r.getCell(column1);
if(column1Cells != null)
{
if(column1Cells.getCellType() == Cell.CELL_TYPE_NUMERIC)
{
// adding to a list
column1Data.add(column1Cells.getNumericCellValue());
}
else if(column1Cells.getCellType() == Cell.CELL_TYPE_FORMULA && column1Cells.getCachedFormulaResultType() == Cell.CELL_TYPE_NUMERIC)
{
// adding to a list
column1Data.add(column1Cells.getNumericCellValue());
}
}
}
}
链接地址: http://www.djcxy.com/p/37973.html
上一篇: to get columns from Excel files using Apache POI?
下一篇: Why two compiler flags needs to be passed for code coverage in GCC