JXL库调用

时间:2011-10-18 14:45:55

标签: java jxl

我对java几乎不熟悉(以前总是在c#上)并且需要创建一个swing应用程序,我需要从xls文件中读取数据。所以我使用jXL。

我有一个类,它返回excel文件中第一张表的名称,在jFileChooser中选择。这是代码:

import java.io.File;
import jxl.Sheet;
import jxl.Workbook;

public class ExcelObject
{
    private String filename = null;
    private Workbook wb = null;
    private Sheet sheet = null;

    public ExcelObject(String f) 
    {
        filename = f;
    }

    public String getSheetName()
    {
        String sheet_name = null;

        try
        {
            wb = Workbook.getWorkbook(new File(filename));
            sheet = wb.getSheet(0);
            sheet_name = sheet.getName();
        }
        catch (Exception e) 
        {
            e.printStackTrace();
        }
        finally
        {
            wb.close();
        }

        return sheet_name;
    }

}   
程序调用中的

看起来像:

ExcelObject ex = new ExcelObject(filename);
String s = ex.getSheetName();
lblReport.setText(s);

所以问题是:当在eclipse(3.4.2)中运行时,我得到一个正确的值,当编译jar时,没有返回值!我的意思是lblReport是空的,没有例外和警告。

请记住:所有其他外部罐子都可以正常工作。

我尝试了很多东西,但没有一个在起作用。

另外,如果我这样做

                            ExcelObject ex = new ExcelObject(filename);
                            String s = ex.getSheetName();
//                          lblReportRun.setText(s);

                            lblReportRun.setText("Test");
                            lblAnyOtherLabel.setText("Test");

标签中没有文字显示,在编译的jar中,在eclipse中也没有。

1 个答案:

答案 0 :(得分:0)

这可能是因为如果在打开工作簿时发生某些异常,则会捕获它,打印堆栈跟踪,然后在finally块中关闭工作簿。但是,由于调用Workbook.getWorkbook时发生异常,wb变量仍然为空,并且您尝试在其上调用close。所以在finally块中发生NullPointerException

注意你的控制台,你必须弹出一些异常。

另外,请注意fileName应该是类的唯一实例变量,Java变量通常不包含下划线并使用camelCase,而fileName变量应该是File类型,而不是String:你得到一个文件从文件选择器中,将其转换为字符串,然后将其转换回文件。

另一种可能性,因为它在Eclipse中运行而不是在外部运行时,您忘记将jXL jar放在类路径中,这会在尝试使用ExcelObject类时导致一些ClassNotFoundException。