访问Excel文件时出现异常

时间:2013-08-23 14:21:00

标签: java excel jxl

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

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

编码:

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);
    }
}

任何想法,我错了......

3 个答案:

答案 0 :(得分:2)

主要方法是静态方法。您的实例变量wb无法在静态方法中访问。

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

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

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

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

答案 1 :(得分:2)

 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);
   }

}

答案 2 :(得分:1)

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

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

然后在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接受路径的String参数,然后从main方法传入。然后,您将创建File对象wb作为此方法的局部变量。然后,您可以通过从命令行中读取路径作为参数,轻松地概括主要方法以打印出任何文件。

通常给出以大写字母开头的类名并定义类的用途。因此,您可以拨打xl来代替WorkbookPrinter