如何用Fillo API读取同工作表中重名列的指定列数据?
解决Fillo API读取同工作表中同名列数据的问题
我明白你遇到的困扰了——当工作表里存在多个同名的Column2列时,Fillo的getField("Column2")只会返回第一个匹配列的数据,没法获取第二个。这是因为Fillo按列名查找的逻辑是返回第一个匹配项,针对这种情况,我们可以通过列索引的方式来区分同名列,下面是具体的解决方案:
方法一:硬编码列索引获取指定列
如果你已经明确知道第二个Column2所在的列索引(索引从0开始计数),可以直接用getField(int index)方法来获取数据。假设你的工作表结构是6列,表头依次为Column1|Column2|Column3|Column1|Column2|Column3,那么第二个Column2的索引是4,修改代码如下:
Fillo fillo = new Fillo(); Connection connection = fillo.getConnection("TNK.xlsx"); String strQuery = "Select * from TNK "; Recordset recordset = connection.executeQuery(strQuery); while (recordset.next()) { // 获取第一个Column2(索引1) String firstColumn2 = recordset.getField(1); // 获取第二个Column2(索引4) String secondColumn2 = recordset.getField(4); System.out.println("第一个Column2数据:" + firstColumn2); System.out.println("第二个Column2数据:" + secondColumn2); } recordset.close(); connection.close();
方法二:动态遍历列名,自动匹配所有同名列
如果不确定同名列的数量或索引位置,可以先遍历所有列,收集所有名为Column2的列索引,再逐个获取对应的数据,这种方式更灵活:
import java.util.ArrayList; import java.util.List; Fillo fillo = new Fillo(); Connection connection = fillo.getConnection("TNK.xlsx"); String strQuery = "Select * from TNK "; Recordset recordset = connection.executeQuery(strQuery); // 收集所有名为Column2的列索引 List<Integer> column2Indices = new ArrayList<>(); int totalColumns = recordset.getFieldCount(); for (int i = 0; i < totalColumns; i++) { String columnName = recordset.getFieldName(i); if ("Column2".equals(columnName)) { column2Indices.add(i); } } // 遍历每一行,获取所有Column2列的数据 while (recordset.next()) { System.out.println("当前行的所有Column2数据:"); for (int index : column2Indices) { String columnValue = recordset.getField(index); System.out.println("- " + columnValue); } } recordset.close(); connection.close();
补充说明
Fillo的官方文档确实比较匮乏,不过它的Recordset类提供了几个关键方法来处理这类场景:
getFieldCount():返回当前结果集的总列数getFieldName(int index):返回指定索引位置的列名getField(int index):返回指定索引位置的字段值
通过组合这些方法,就能轻松处理同名列的读取需求。
内容的提问来源于stack exchange,提问作者ThienNguyen
相关产品推荐
相关产品推荐

