使用Apache POI时,我可以使用索引遍历excel文件吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Apache POI时,我可以使用索引遍历excel文件吗?相关的知识,希望对你有一定的参考价值。
如果我不清楚,请原谅。英语不是我的第一语言。
我正在尝试编写一个代码,我可以遍历excel文件的第一行,直到找到标记为“Comments”的列。我想对该列中的文本运行一些操作,然后将结果保存在文件末尾的新列中。我可以以类似于索引的方式遍历xlsx文件吗?如果是这样,我怎样才能使用该单元格的坐标直接跳到单元格?
public static void main(String[] args) throws IOException {
File myFile = new File("temp.xlsx");
FileInputStream fis = null;
try {
fis = new FileInputStream(myFile);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
@SuppressWarnings("resource")
XSSFWorkbook myWorkBook = new XSSFWorkbook (fis);
XSSFSheet mySheet = myWorkBook.getSheetAt(0);
Iterator<Row> rowIterator = mySheet.iterator();
Row row = rowIterator.next();
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
String comment = cell.toString();
if (comment.equals("Comments"))
{
System.out.println("Hello");
}
}
}
}
答案
对于“想要进入第二列第3行的问题,我可以使用像(3,2)这样的坐标?”:
是的,这可以使用CellUtil。 Sheet
和Row
方法的优点是CellUtil
方法能够获得细胞(如果它已经存在)或创建细胞(如果它尚不存在)。因此,现有的单元格将被尊重而不是简单地创建它们,因此会覆盖它们。
例:
import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*;
import org.apache.poi.ss.util.CellUtil;
import java.util.concurrent.ThreadLocalRandom;
public class CreateExcelCellsByIndex {
public static void main(String[] args) throws Exception {
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet();
//put content in R3C2:
Cell cell = CellUtil.getCell(CellUtil.getRow(3-1, sheet), 2-1); //-1 because apache poi's row and cell indexes are 0 based
cell.setCellValue("R3C2");
//put content in 10 random cells:
for (int i = 1; i < 11; i++) {
int r = ThreadLocalRandom.current().nextInt(4, 11);
int c = ThreadLocalRandom.current().nextInt(1, 6);
cell = CellUtil.getCell(CellUtil.getRow(r-1, sheet), c-1);
String cellcontent = "";
if (cell.getCellTypeEnum() == CellType.STRING) {
cellcontent = cell.getStringCellValue() + " ";
}
cell.setCellValue(cellcontent + i + ":R"+r+"C"+c);
}
workbook.write(new FileOutputStream("CreateExcelCellsByIndex.xlsx"));
workbook.close();
}
}
另一答案
我不确定你的2D索引是什么意思,但Cell知道它属于哪个列,所以这样的东西应该工作:
...
Cell cell = cellIterator.next();
String comment = cell.toString();
int sourceColumnIndex = -1;
if (comment.equals("Comments")) {
System.out.println("Hello");
sourceColumnIndex = cell.getColumnIndex();
}
....
类似地,定义类似int targetColumnIndex
的东西来表示将处理来自sourceColumnIndex
列的所有单元格的结果的列。
以上是关于使用Apache POI时,我可以使用索引遍历excel文件吗?的主要内容,如果未能解决你的问题,请参考以下文章