使用“ SpreadsheetGear 7.1.1.120”创建testfile.xlsx.使用可以处理ZIP归档文件的软件打开XLSX文件,并查看/xl/workbook.xml进行查看.在worksheets / sheet?.xml文件中要注意,所有行元素都没有行号.如果我在第一个行标记中添加行号,例如< row r =“ 1”>然后apache POI可以读取此行.
如果是这个问题,谁来负责,那么答案肯定是Apache Poi和SpreadsheetGear ;-). Apache POI,因为row元素中的属性r是可选的.但是SpreadsheetGear还因为如果Excel本身曾经这样做,没有理由不使用r属性.
如果无法以可以直接读取Apache POI的格式获取testfile.xlsx,则必须使用基础对象.以下适用于您的testfile.xlsx:
import org.apache.poi.xssf.usermodel.*;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.*;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.FileInputStream;
import java.io.InputStream;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorksheet;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetData;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRow;
import java.util.List;
class Testfile {
public static void main(String[] args) {
try {
InputStream inp = new FileInputStream("testfile.xlsx");
Workbook wb = WorkbookFactory.create(inp);
Sheet sheet = wb.getSheetAt(0);
System.out.println(sheet.getFirstRowNum());
CTWorksheet ctWorksheet = ((XSSFSheet)sheet).getCTWorksheet();
CTSheetData ctSheetData = ctWorksheet.getSheetData();
List ctRowList = ctSheetData.getRowList();
Row row = null;
Cell[] cell = new Cell[2];
for (CTRow ctRow : ctRowList) {
row = new MyRow(ctRow, (XSSFSheet)sheet);
cell[0] = row.getCell(0);
cell[1] = row.getCell(1);
if (cell[0] != null && cell[1] != null && cell[0].toString() != "" && cell[1].toString() != "")
System.out.println(cell[0].toString()+""+cell[1].toString());
}
} catch (InvalidFormatException ifex) {
} catch (FileNotFoundException fnfex) {
} catch (IOException ioex) {
}
}
}
class MyRow extends XSSFRow {
MyRow(org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRow row, XSSFSheet sheet) {
super(row, sheet);
}
}
我用过
org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorksheet,
org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetData,
org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRow.
这是Apache POI Binary Distribution poi-bin-3.10.1-20140818的一部分,并且在poi-ooxml-schemas-3.10.1-20140818.jar中
我已经扩展了XSSFRow,因为我们不能直接使用XSSFRow构造函数,因为它具有受保护的访问.