Java 从excel文件读取数据

Java 从excel文件读取数据,java,excel,xls,Java,Excel,Xls,我已经搜索了StackOverflow,但没有找到我问题的明确答案 我有一个简单的2列24行xlsx(excel)文件(稍后这个文件将有更多的列和行,最终它将有不同的工作表) 第一行是标题行:year=x和population=y,对于每个标题,我想阅读下面的行。稍后,我希望能够使用此信息创建动态绘图(x,y) 所以我想我需要将x和y信息保存在变量中。下面是我的伪代码 //Sheet Pop final String POP = "Pop"; int startRowHeader = 1

我已经搜索了StackOverflow,但没有找到我问题的明确答案

我有一个简单的2列24行xlsx(excel)文件(稍后这个文件将有更多的列和行,最终它将有不同的工作表)

第一行是标题行:year=x和population=y,对于每个标题,我想阅读下面的行。稍后,我希望能够使用此信息创建动态绘图(x,y)

所以我想我需要将x和y信息保存在变量中。下面是我的伪代码

//Sheet Pop

final String POP = "Pop";   
int startRowHeader = 1,      
    startRowNumeric = 2,     
    startColNumeric = 1, 
    nrOfCols = 0,
    nrOfRows  = 0;

int nrOfSheets = excelFile.getWorkbook().getNumberOfSheets(); 
org.apache.poi.ss.usermodel.Sheet sheet1 = excelFile.getWorkbook().getSheetAt(0);  
String[] sheets = {POP};
boolean sheetExists;
String activeSheet = "";   

nrOfCols = sheet1.getRow(0).getLastCellNum();
 nrOfRows = excelFile.getLastRowNum(POP);

try {

    for (String sheet : sheets) {
        sheetExists = false;
        for (int sheetIndex = 0; sheetIndex < nrOfSheets; sheetIndex++) {
        if (sheet.equalsIgnoreCase( excelFile.getWorkbook().getSheetName(sheetIndex))) { 
                SheetExists = true; 
            }
        }
        if (!sheetExists) {
            throw new Exception("Sheet " + sheet + " is missing!");
        }
    } 


    //Take off!

    // Sheet Pop
    activeSheet = sheets[0];

    for(int j=0; j < nrOfCols; j++) {
        for(int i=0; i<nrofRows; i++) {
            column[i] = (int)excelFile.getCellNumericValue(POP, startRowNumeric, startColNumeric);  
        }
    } 

}  catch (Exception e) {
    traceln(" ..... ");
    traceln("Error in sheet: " + activeSheet);
    traceln("Message: " + e.getMessage());  //Write out in console
} 
//工作表弹出
最后一个字符串POP=“POP”;
int startRowHeader=1,
startRowNumeric=2,
startColumeric=1,
nrOfCols=0,
nrof=0;
int nrOfSheets=excelFile.get工作簿().getNumberOfSheets();
org.apache.poi.ss.usermodel.sheet1=excelFile.getWorkbook().getSheetAt(0);
String[]sheets={POP};
布尔值存在;
字符串activeSheet=“”;
nrocols=sheet1.getRow(0.getLastCellNum();
nrOfRows=excelFile.getLastRowNum(POP);
试一试{
用于(字符串工作表:工作表){
是否存在=错误;
对于(int sheetIndex=0;sheetIndex
public class Point {
        int x;
        int y;

}
在主函数中创建一个

List<Point> allPoints = new List<Point>();

还考虑将构造函数和吸收器/设置器添加到Point类。

另外,您可能希望直接使用java.awt中提供的Point类。

编辑:关于从excel获取值 这是我从你的问题中了解到的 您有24行2列 第一列有x,第二列有y值

所以你可以在循环中做类似的事情

Point p = new Point();
p.x = xCoordinateFromExcel;
p.y = yCoordinateFromExcel;

allPoints.add(p);
for(int i=0;i<24;i++){
    Row row = sheet.getRow(i);    
    Cell cellX = row.getCell(1);
    Cell cellY = row.getCell(2);

//assign to point class
...
}

for(inti=0;i您可以使用
java.awt.geom.Point2D.Double的
java.util.ArrayList

宣布名单:

ArrayList<Point2D.Double> points = new ArrayList<>();

你到底有什么问题?你有什么异常吗?@gaurav5430。我不确定在绘制动态图表时,我应该将excel文件中的数据保存到哪里作为变量使用。另外,我如何获得每列的单元格值?即标题年份的所有年份以及标题填充中每一年的填充量?如何ut使用2d数组或点类数组(成员为int x annd int y的自定义类)?我不确定我是否理解你的意思。我对Java相当陌生。我该如何实现这一点?我不能使用“getcellnumeric value”之类的东西吗?
java.util.List
是一个接口,您不能实例化它…行应为
List allPoints=new ArrayList();
@Samy如何将数据读入此ArrayList?也就是说,如何获取每个单元格值(标题下方)对于每一列?您的问题有两个:解析Excel文件并将值存储在程序中。这回答了存储部分。关于Excel解析,您可以尝试
Apache POI HSSF
(它代表可怕的电子表格格式!我喜欢它)Point2D.double为我提供了一个double数组列表。我可以将列表中的数字更改为整数吗?可以将值强制转换为整数,或者编写一个自定义整数类(最好是子类
java.awt.Point
以继承所有功能)
// Read x
// Read y
Point2D.Double p = new Point2D.Double(x, y);
/// And add to the list: 
points.add(p);