无法使用JXL编写Excel文档(“工作表名称太长 - 截断”)

时间:2015-02-22 07:35:59

标签: java excel selenium-webdriver frameworks jxl

我想编写excel表,为此我编写了一个代码,但是当我的程序在对象WritableSheet中执行时,它会收到以下警告。 我可以知道我哪里错了吗?另外,我正在使用keydriven框架来编写工作表。

Warning:  Sheet name D:\eclipse-jee-kepler-SR1-win32\Workspace\AutomationFramework\configuration\GmailTestSuite.xls too long - truncating
Warning:  : is not a valid character within a sheet name - replacing
Warning:  \ is not a valid character within a sheet name - replacing

我用来写一张纸的代码:

public class WritableData {

    Workbook wbook;
    WritableWorkbook wwbCopy;
    String ExecutedTestCasesSheet;
    WritableSheet shSheet;

    public WritableData(String testSuitePath, String string) {
        // TODO Auto-generated constructor stub

        try {
            wbook = Workbook.getWorkbook(new File(testSuitePath));
            wwbCopy = Workbook.createWorkbook(new File(testSuitePath));
            // shSheet=wwbCopy.getSheet(1);
            shSheet = wwbCopy.createSheet(testSuitePath, 1);
        } catch (Exception e) {
            // TODO: handle exception
            System.out.println("Exception message" + e.getMessage());
            e.printStackTrace();
        }
    }

    public void shSheet(String strSheetName, int iColumnNumber, int iRowNumber,
            String strData) throws WriteException {
        // TODO Auto-generated method stub

        WritableSheet wshTemp = wwbCopy.getSheet(strSheetName);
        WritableFont cellFont = null;
        WritableCellFormat cellFormat = null;

        if (strData.equalsIgnoreCase("PASS")) {
            cellFont = new WritableFont(WritableFont.TIMES, 12);
            cellFont.setColour(Colour.GREEN);
            cellFont.setBoldStyle(WritableFont.BOLD);

            cellFormat = new WritableCellFormat(cellFont);
            cellFormat.setBorder(Border.ALL, BorderLineStyle.THIN);
        }

        else if (strData.equalsIgnoreCase("FAIL")) {
            cellFont = new WritableFont(WritableFont.TIMES, 12);
            cellFont.setColour(Colour.RED);
            cellFont.setBoldStyle(WritableFont.BOLD);

            cellFormat = new WritableCellFormat(cellFont);
            cellFormat.setBorder(Border.ALL, BorderLineStyle.THIN);
        }

        else {
            cellFont = new WritableFont(WritableFont.TIMES, 12);
            cellFont.setColour(Colour.BLACK);

            cellFormat = new WritableCellFormat(cellFont);
            cellFormat.setBorder(Border.ALL, BorderLineStyle.THIN);
            cellFormat.setWrap(true);
        }

        Label labTemp = new Label(iColumnNumber, iRowNumber, strData,
                cellFormat);
        try {
            wshTemp.addCell(labTemp);

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public void closeFile() {
        try {
            // write the value in work book
            wwbCopy.write();
            // wwbCopy.close();

            // Closing the original work book
            wbook.close();
        } catch (Exception e) {
            e.printStackTrace();

        }
    }
}

2 个答案:

答案 0 :(得分:1)

首先,您应该理解术语。

工作簿 =整个Excel文档,它是文件的全部内容。

Sheet =工作簿的一部分,一个Excel" page"。工作簿可以有多个工作表。

工作表名称位于Excel文件底部的小选项卡中。传递更短更有用的内容,例如Data

enter image description here


您的代码中存在多个问题。我将讨论一些与你的问题有关的问题。

在这里打开文件/工作簿:

wbook = Workbook.getWorkbook(new File(testSuitePath));

在下一行,您创建一个具有相同名称的新工作簿 - 通过此覆盖您以前的文件,使其现在为空:

wwbCopy = Workbook.createWorkbook(new File(testSuitePath));

最后,您在这里创建一个名称不正确的新工作表:

shSheet = wwbCopy.createSheet(testSuitePath, 1);

您不应该将您的工作表命名为与您的文件相同。


顺便说一句,在Java中,您应该在文件名中使用'/',而不是'\'。 Java将根据目标操作系统将所有斜杠转换为正确的字符。

关于您的异常处理,请阅读Is it really that bad to catch a general exception?In Java, what is the difference between catch a generic exception and a specific exception (eg. IOException?)。不要抓住一般的例外。

答案 1 :(得分:0)

看起来你正在将路径传递给你的" testSuitePath"变量。请调试并确保在testSuitePath中传递正确的值。

希望有所帮助