无法使用JXL写入Excel文档(“表名太长 – 截断”)

我想编写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(); } } } 

首先你应该理解术语。

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

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

工作表名称位于Excel文件底部的小标签中。 通过那里更短,更有用,如Data

在这里输入图像描述


你的代码有多个问题。 我会讨论一些与你的问题有关的问题。

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

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

在下一行中,您将创build一个具有相同名称的新工作簿 – 通过此操作,您将覆盖之前的文件 ,使其现在为空:

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

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

 shSheet = wwbCopy.createSheet(testSuitePath, 1); 

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


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

至于你的exception处理,请阅读是否真的很糟糕,赶上一般的例外? 或者在Java中,捕获genericsexception和特定exception(例如,IOException?)有什么区别? 不要捕捉一个通用的exception。

看起来你正在传递你的“testSuitePath”variables中的excel文件的path。 请debugging并确保您在testSuitePath中传递正确的值。

希望能帮助到你