如果我不清楚,请原谅。英语不是我的第一语言。
我试图编写一个代码,我可以遍历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");
}
}
}
}
答案 0 :(得分:1)
对于“想要进入第二列第3行的问题,我可以使用像(3,2)这样的坐标吗?”:
是的,可以使用CellUtil。 QVarLengthArray<struct coords_t>
和Sheet
中的方法的优点是Row
方法能够获取单元格(如果已存在或),如果单元格尚不存在则创建单元格。因此,现有的单元格将被尊重,而不是简单地创建它们,因此会覆盖它们。
示例:
CellUtil
答案 1 :(得分:0)
我不确定你的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
列的所有单元格的结果的列。
答案 2 :(得分:0)
FileInputStream file = new FileInputStream(new File(fileLocation));
Workbook workbook = new XSSFWorkbook(file);
Sheet sheet = workbook.getSheetAt(0);
Map<Integer, List<String>> data = new HashMap<>();
int i = 0;
for (Row row : sheet) {
data.put(i, new ArrayList<String>());
for (Cell cell : row) {
switch (cell.getCellTypeEnum()) {
case STRING: ... break;
case NUMERIC: ... break;
case BOOLEAN: ... break;
case FORMULA: ... break;
default: data.get(new Integer(i)).add(" ");
}
}
i++;
}