public class Excel {
public Excel(String name) {
this.name = name;
headerDefaultFormat = getHeaderCellDefaultStyle();
cellDefaultFormat = getNormalCellStyle();
minTimeIndex = -1;
calcMinDefaultTimeIndex();
create();
}
public void calcMinDefaultTimeIndex() {
final int rows = Cache.rowList.size();
int index;
String minTime = "";
for (index = 0; index < rows; index++) {
minTime = ((AnalyzedLogResult) Cache.rowList.get(index)).getTotalTime();
if (minTime.length() != 0) {
minTimeIndex = index;
break;
}
}
//Log.d(TAG, "minTimeIndex:" + minTimeIndex);
int minTimeLength = minTime.length();
int nextTimeLength;
for (index = 0; index < rows - 1; index++) {
// time = ((AnalyzedLogResult) Cache.rowList.get(index)).getTotalTime();
String nextTime = ((AnalyzedLogResult) Cache.rowList.get(index + 1))
.getTotalTime();
nextTimeLength = nextTime.length();
//Log.d(TAG, "minTimeLength:" + minTimeLength + ", nextTimeLength:" + nextTimeLength);
if (nextTimeLength > 3
&& (minTimeLength > nextTimeLength || (minTimeLength == nextTimeLength && nextTime
.compareTo(minTime) < 0))) {
minTimeLength = nextTimeLength;
minTimeIndex = index + 1;
//Log.d(TAG, "minTimeIndex:" + minTimeIndex);
}
}
}
public void create() {
int index;
final int rows = Cache.rowList.size();
try {
WritableWorkbook book = Workbook.createWorkbook(new File(name));
// 生成名为“第一页”的工作表,参数0表示这是第一页
WritableSheet sheet = book.createSheet("第一页", 0);
// 在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
// sheet.getSettings().setDefaultColumnWidth(10);
// set row height
sheet.setRowView(0, 750, false);
Label label;
CellView cellView;
WritableCellFormat headerformat = headerDefaultFormat;
for (index = 0; index < Constants.TABLE_COLUMN_SIZE; index++) {
cellView = new CellView();
cellView.setSize(TABLE_COLUMN_WIDTH[index]);
sheet.setColumnView(index, cellView);
if (Constants.TABLE_COLUMN_TOTAL_TIME == index
|| Constants.TABLE_COLUMN_NO_FAULT == index) {
headerformat = new WritableCellFormat(headerDefaultFormat);
headerformat.setWrap(true);
}
label = new Label(index, 0, TABLE_HEADER[index], headerformat);
sheet.addCell(label);
}
int column;
String columnContent;
AnalyzedLogResult result;
WritableCellFormat cellFormat;
for (int row = 0; row < rows; row++) {
result = (AnalyzedLogResult) Cache.rowList.get(row);
for (column = 0; column < Constants.TABLE_COLUMN_SIZE; column++) {
if (minTimeIndex == row && column == Constants.TABLE_COLUMN_NO_FAULT) {
cellFormat = new WritableCellFormat(cellDefaultFormat);
cellFormat.setBackground(Colour.RED);
cellFormat.setAlignment(Alignment.RIGHT);
} else if (Constants.TABLE_COLUMN_TOTAL_EVENTS == column
|| Constants.TABLE_COLUMN_TOTAL_TIME == column
|| Constants.TABLE_COLUMN_NO_FAULT == column) {
cellFormat = new WritableCellFormat(cellDefaultFormat);
cellFormat.setAlignment(Alignment.RIGHT);
} else if (Constants.TABLE_COLUMN_COMMENTS == column) {
cellFormat = new WritableCellFormat(cellDefaultFormat);
cellFormat.setAlignment(Alignment.LEFT);
} else {
cellFormat = cellDefaultFormat;
}
sheet.setRowView(row + 1, 550, false);
columnContent = result.getColumnContent(column);
label = new Label(column, row + 1, columnContent, cellFormat);
sheet.addCell(label);
}
}
// sheet.mergeCells(0, 1, 0, rows);
// 生成一个保存数字的单元格 必须使用Number的完整包路径,否则有语法歧义 单元格位置是第二列,第一行,值为789.123
// Number number = new Number(1, 0, 789.123);
// sheet.addCell(number);
// 写入数据并关闭文件
book.write();
book.close();
} catch (Exception e) {
Log.e(TAG, "Fail to create excel:");
Log.e(TAG, e.getMessage());
}
}
}