我想编写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));
在下一行,您将创建一个具有相同名称的新工作簿 - 这样您将覆盖以前的文件,使其现在为空:
wwbCopy = Workbook.createWorkbook(new File(testSuitePath));
最后,在这里创建一个名称不正确的新工作表:
shSheet = wwbCopy.createSheet(testSuitePath, 1);
您不应将您的工作表命名为与文件相同的名称。
顺便说一句,在Java中,你应该在文件名中使用'/',而不是'\'。 Java将根据目标操作系统将所有斜杠转换为正确的字符。
至于你的异常处理,请阅读捕获一般异常真的那么糟糕吗?或者在Java中,捕获泛型异常和特定异常(例如IOException?)之间的区别是什么。不要抓住一般例外。
感谢您的回复,实际上在createSheet中需要createSheet(String,int.arg1)。那么,我们怎样才能像你告诉的那样传递工作表名称?
尝试createSheet("data",1):-)假设数字表示工作簿中的工作表索引,检查它是从0开始还是从1开始。
通过你的最后一条评论我没有得到那个警告,但现在发生了什么,我已经给出了我必须写的表格名称,如你所说的"数据"。但是当我执行一个程序时,它会删除它包含的所有其他工作簿,只创建一个。为什么会这样?
看我编辑的答案。
能告诉我如何用现有的表格写信吗?实际上我正在尝试设置已执行测试用例的状态,但每当我执行这些案例时,它都会创建新的工作簿。我读了你的可编辑内容,但是不明白我怎么能用表写? :(
我编辑了我的答案,所以回答你上一个问题的文字现在是粗体。你不能在StackOverflow上钓鱼,而是钓鱼竿。
看起来您正在将路径传递到"testSuitePath"变量中的excel文件。请调试并确保在testSuitePath中传递正确的值。
希望能帮助到你