我想使用apachi poi从某个xlsx文件中读取数据(单元格值).下面的代码SXSSFWorkBook成功创建了实例并分配了db.xlsx(我的虚拟xlsx).我尝试更改工作表编号并使用该getSheetNumber方法仔细检查它以确保正确分配工作簿.
接下来我想为实例分配一个特定工作表(0带名称的索引main)SXSSFSheet,但目前它返回null.(我有尝试getSheetAt和getSheet方法).
SXSSFRow DummyRow;
SXSSFCell DummyCell;
int RowCount;
OPCPackage pkg = OPCPackage.open(blabla string adress);
XSSFWorkbook wb = new XSSFWorkbook(pkg);
Workbook MainBook = new SXSSFWorkbook(wb,100);
int a = MainBook.getNumberOfSheets();
SXSSFSheet MainSheet = (SXSSFSheet) MainBook.getSheetAt(0);
RowCount = MainSheet.getLastRowNum();
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
编辑:
我尝试过getSheetName方法并得到了积极的结果.所以问题是在工作表中到达行.所以,最后一行getLastRowNum()不起作用.
所以我正在尝试编写一个程序来扫描excel文件的一行中的特定模式.即,对于N后跟任何字母,则为S或T(每个字母占据单个单元格).
问题是,我使用的excel文件非常庞大,大约有3000行和近1000列.我试图仅在前60行中搜索此模式,以减少Java堆空间.我怎样才能适合我的算法呢?我仍然没有内存异常.
我的代码如下:
import java.awt.List;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import org.apache.poi.EncryptedDocumentException;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ExcelReader {
public int Reader(File file) throws IOException, EncryptedDocumentException, InvalidFormatException {
FileInputStream fis = new FileInputStream(file);
String filepath = file.getPath();
Workbook wb = WorkbookFactory.create(new File(filepath));
XSSFSheet sheet = (XSSFSheet) wb.getSheetAt(0);
XSSFRow row;
XSSFCell cell;
ArrayList<Integer> list = new ArrayList<Integer>();
int rows;
int cols = 0;
int temp = 0; …Run Code Online (Sandbox Code Playgroud)