我是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);
}
}
任何想法,我错了......
答案 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
。