【问题标题】:Cannot write Excel document using JXL ("Sheet name too long - truncating")无法使用 JXL 编写 Excel 文档(“工作表名称太长 - 截断”)
【发布时间】:2015-04-23 16:52:38
【问题描述】:

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

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

        }
    }
}

【问题讨论】:

    标签: java excel selenium-webdriver frameworks jxl


    【解决方案1】:

    首先您应该了解术语。

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

    工作表 = 工作簿的一部分,一个 Excel“页面”。一个工作簿可以有多个工作表。

    工作表名称位于 Excel 文件底部的小标签中。传递一些更短更有用的东西,比如Data


    您的代码中存在多个问题。我将讨论其中一些与您的问题相关的内容。

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

    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?)。不要捕获一般异常。

    【讨论】:

    • 感谢您的友好回复,实际上在 createSheet 中需要 createSheet(String, int.arg1)。那么,我们如何像您所说的那样传递工作表名称?
    • 尝试 createSheet("data", 1) :-) 假设数字表示工作簿中的工作表索引,检查它是从 0 开始还是从 1 开始。
    • 通过您的最后一条评论,我没有收到该警告,但现在我已经给出了工作表名称,我必须按照您的建议在上面写上“数据”。但是当我执行一个程序时,它会删除它包含的所有其他工作簿并只创建一个。为什么会这样?
    • 您能告诉我如何在现有表格中书写吗?实际上,我正在尝试设置已执行测试用例的状态,但是每当我执行这些用例时,它都会创建新的工作簿。我阅读了您的可编辑内容,但不明白如何在工作表中书写? :(
    • 我编辑了我的答案,因此回答您最​​后一个问题的文本现在是粗体。你不能在 StackOverflow 上钓到鱼,而是钓竿。
    【解决方案2】:

    看起来您正在“testSuitePath”变量中传递 excel 文件的路径。请调试并确保您在 testSuitePath 中传递了正确的值。

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2019-02-21
      • 1970-01-01
      • 1970-01-01
      • 2015-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-27
      • 1970-01-01
      相关资源
      最近更新 更多