Java 访问Excel文件时发生异常

Java 访问Excel文件时发生异常,java,excel,jxl,Java,Excel,Jxl,我是java新手,试图编写一个程序来访问excel文件中的数据。但是得到信息 线程“main”java.lang中出现异常。错误:未解决的编译问题: 无法对非静态字段进行静态引用 编码: package xl; import java.io.File; import java.io.IOException; import java.util.Date; import jxl.*; import jxl.Workbook.*; import jxl.read.biff.BiffException

我是java新手,试图编写一个程序来访问excel文件中的数据。但是得到信息

线程“main”java.lang中出现异常。错误:未解决的编译问题: 无法对非静态字段进行静态引用

编码:

package xl;

import java.io.File;
import java.io.IOException;
import java.util.Date;
import jxl.*;
import jxl.Workbook.*;
import jxl.read.biff.BiffException;

public class xl {

    public String path = "C:/Workbook.xls";
    public File wb = new File(path);

    public static void main(String[] args) throws IOException, BiffException {
        Workbook work;
        work = Workbook.getWorkbook(new java.io.File(wb));

        Sheet sheet1 = work.getSheet(0);
        Cell c1 = sheet1.getCell(0,0);

        String xreader = c1.getContents();
        System.out.println(xreader);
    }
}

任何想法,我错了…

主要方法是静态方法。不能在静态方法中访问实例变量wb

这是因为在创建类的对象之前,实例变量不存在,但在不创建对象的情况下,始终可以访问静态方法

若要修复,请将两个实例变量声明为静态:

private static String path = "C:/Workbook.xls";
private static File wb = new File(path);

尽管如此,这不是一个好的设计。但它至少会使它编译。

主要方法是静态方法。不能在静态方法中访问实例变量wb

 public class xl 
 {
     public static void main(String[] args) throws IOException, BiffException {
          String path = "C:/Workbook.xls";
          File wb = new File(path);
          Workbook work;
          work = Workbook.getWorkbook(new java.io.File(wb));

          Sheet sheet1 = work.getSheet(0);

          Cell c1 = sheet1.getCell(0,0);

          String xreader = c1.getContents();
          System.out.println(xreader);
   }
这是因为在创建类的对象之前,实例变量不存在,但在不创建对象的情况下,始终可以访问静态方法

若要修复,请将两个实例变量声明为静态:

private static String path = "C:/Workbook.xls";
private static File wb = new File(path);
尽管如此,这不是一个好的设计。但它至少会让它编译

 public class xl 
 {
     public static void main(String[] args) throws IOException, BiffException {
          String path = "C:/Workbook.xls";
          File wb = new File(path);
          Workbook work;
          work = Workbook.getWorkbook(new java.io.File(wb));

          Sheet sheet1 = work.getSheet(0);

          Cell c1 = sheet1.getCell(0,0);

          String xreader = c1.getContents();
          System.out.println(xreader);
   }
}


}

主方法必须是静态方法,但不能引用任何实例变量,因为它们不是静态的。您可以通过将实例变量声明为静态变量将其更改为类变量,但这不是一种好的做法,因为在本例中,变量对应于工作簿的特定实例

更好的解决方案是创建一个实例方法,加载工作簿并打印出内容。当前主方法中的所有代码都应该进入这个新方法

public void printWorkbook() throws IOException, BiffException {
    Workbook work;
    work = Workbook.getWorkbook(new java.io.File(wb));

    Sheet sheet1 = work.getSheet(0);
    Cell c1 = sheet1.getCell(0,0);
    String xreader = c1.getContents();
    System.out.println(xreader);    
}

public static void main(String[] args) throws IOException, BiffException {
    xl instance = new xl();
    instance.printWorkBook();
}
然后在main方法中,您只需要创建类的实例,并调用新方法

public void printWorkbook() throws IOException, BiffException {
    Workbook work;
    work = Workbook.getWorkbook(new java.io.File(wb));

    Sheet sheet1 = work.getSheet(0);
    Cell c1 = sheet1.getCell(0,0);
    String xreader = c1.getContents();
    System.out.println(xreader);    
}

public static void main(String[] args) throws IOException, BiffException {
    xl instance = new xl();
    instance.printWorkBook();
}
更好的做法是让
printWorkbook
接受路径的字符串参数,然后从main方法传入该参数。然后创建
文件
对象
wb
,作为此方法的局部变量。然后,您可以通过从命令行中读取作为参数的路径,轻松地概括出打印任何文件的主要方法


通常也会给类以大写字母开头的名称,并定义类的用途。因此,您可以调用您的类
WorkbookPrinter
,而不是
xl

主方法必须是静态方法,但不能引用任何实例变量,因为它们不是静态的。您可以通过将实例变量声明为静态变量将其更改为类变量,但这不是一种好的做法,因为在本例中,变量对应于工作簿的特定实例

更好的解决方案是创建一个实例方法,加载工作簿并打印出内容。当前主方法中的所有代码都应该进入这个新方法

public void printWorkbook() throws IOException, BiffException {
    Workbook work;
    work = Workbook.getWorkbook(new java.io.File(wb));

    Sheet sheet1 = work.getSheet(0);
    Cell c1 = sheet1.getCell(0,0);
    String xreader = c1.getContents();
    System.out.println(xreader);    
}

public static void main(String[] args) throws IOException, BiffException {
    xl instance = new xl();
    instance.printWorkBook();
}
然后在main方法中,您只需要创建类的实例,并调用新方法

public void printWorkbook() throws IOException, BiffException {
    Workbook work;
    work = Workbook.getWorkbook(new java.io.File(wb));

    Sheet sheet1 = work.getSheet(0);
    Cell c1 = sheet1.getCell(0,0);
    String xreader = c1.getContents();
    System.out.println(xreader);    
}

public static void main(String[] args) throws IOException, BiffException {
    xl instance = new xl();
    instance.printWorkBook();
}
更好的做法是让
printWorkbook
接受路径的字符串参数,然后从main方法传入该参数。然后创建
文件
对象
wb
,作为此方法的局部变量。然后,您可以通过从命令行中读取作为参数的路径,轻松地概括出打印任何文件的主要方法


通常也会给类以大写字母开头的名称,并定义类的用途。因此,您可以调用您的类
WorkbookPrinter
,而不是
xl

变量
path
wb
不是静态的,它们是从静态方法调用的(
publicstaticvoidmain(String[]args)
)。您需要将这些变量设置为静态或在静态方法中声明它们。变量
path
wb
不是静态的,它们是从静态方法调用的(
publicstaticvoidmain(String[]args)
)。您需要使这些变量成为静态的,或者在静态方法中声明它们。很高兴知道这一点。祝你好运,很高兴知道。祝你好运