Я пытаюсь прочитать файл XLS в Java, который выглядит примерно такApache POI получает чтение NPE XLS файл
Column A|Product ID|Number Sold
.................|105029 ....|15
.................|102930 ....|9
.................|203911 ....|29
.................|105029 ....|4
где мне нужно, чтобы сложить общее количество продаваемого продукта для каждого продукта ID а затем создайте новый файл с отсортированными данными. Эта программа должна быть гибкой, так как в ней может быть 1000 различных идентификаторов продукта или 400. Код ниже - это то, что у меня есть до сих пор ... но есть немало проблем с этим, и моя нехватка знаний Java делает это действительно разочаровывает.
Первый цикл цикла не продолжается, он застревает при r = 1, хотя второй цикл продолжается.
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class Read {
public static void readXLSFile() throws IOException{
InputStream ExcelFile = new FileInputStream("C:/Sales Data.xls");
HSSFWorkbook wb = new HSSFWorkbook(ExcelFile);
HSSFSheet sheet=wb.getSheetAt(0);
int numRows = sheet.getPhysicalNumberOfRows();
//to intialize an array
int[]idAccum = new int[numRows];
//holds the product id
int[]saleAccum = new int[numRows];
//holds the total sales per product ID
for(int r=1;r<=numRows;r++){
//iterates through the product ID and matching sales
for(int j=r+1;j<numRows+1; j++){
HSSFCell rows = sheet.getRow(r).getCell(1);
HSSFCell cells = sheet.getRow(r).getCell(2);
HSSFCell rows1 = sheet.getRow(j).getCell(1);
HSSFCell cells1 = sheet.getRow(j).getCell(2);
if(rows==rows1){
//compares product ids
idAccum[r]=rows1.getNumericCellValue();
//places product id in element r if rows and rows1 match
saleAccum[r]+=cells.getNumericCellValue();
//adds number of items sold to corresponding product ID
}
}
System.out.println(idAccum[r]);
System.out.println(saleAccum[r]);
}
}
public static void main(String[] args) throws IOException {
readXLSFile();
}
}
Но я получаю nullpointExceptions.
Exception in thread "main" java.lang.NullPointerException
at Read.readXLSFile(Read.java:29)
at Read.main(Read.java:45)
Java Result: 1
Сообщения исключения вы получаете – Koby
исключения в потоке «главный» java.lang.NullPointerException \t в Read.readXLSFile (Read.java:29) \t at Read.main (Read.java:45) Java Результат: 1 – Jnewbie
Не знаю, в чем проблема, так как я не уверен, что в строке 29, если строки if == rows1statement недействительны, вы можете сравнивать объекты ячеек и не обязательно значения. Почему бы не получить значения с помощью getNumericCellValue, а затем сравнить их с помощью equals? – Koby