Java 访问Excel文件时发生异常
我是java新手,试图编写一个程序来访问excel文件中的数据。但是得到信息 线程“main”java.lang中出现异常。错误:未解决的编译问题: 无法对非静态字段进行静态引用 编码: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
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)
)。您需要使这些变量成为静态的,或者在静态方法中声明它们。很高兴知道这一点。祝你好运,很高兴知道。祝你好运