访问Excel文件时出现exception

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

线程“main”中的exceptionjava.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); } } 

任何想法,我错了…

主要的方法是一个静态的方法。 你的实例variableswb不能用静态方法访问。

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

为了解决这个问题,将两个实例variables声明为static:

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

尽pipe这不是一个好的devise。 但至less会编译它。

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

}

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

更好的解决scheme是创build一个加载工作簿并打印出内容的实例方法。 目前主要方法的所有代码应该进入这个新的方法。

然后在主要的方法中,你只需要创build你的类的实例,并调用新的方法。

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

通常给予以大写字母开头的类名,并定义该类的目的。 所以,而不是xl你可以调用你的类WorkbookPrinter