package org.dayatang.excel;
import org.apache.commons.lang3.time.DateUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.File;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import static org.junit.Assert.*;
public class ExcelWriterTest {
private File outputFile;
private File inputFile;
private ExcelHandler instance;
@Before
public void setUp() throws Exception {
String inputFileName = getClass().getResource("/import.xls").getFile();
inputFile = new File(inputFileName);
instance = new ExcelHandler(inputFile);
String outFileName = getClass().getResource("/export.xls").getFile();
outputFile = new File(outFileName);
}
@After
public void tearDown() throws Exception {
instance.close();
}
@Test
public void testExportDataRange() throws Exception {
List<Object[]> data = createData();
ExcelCell excelCell = ExcelCell.sheetName("Company").row(0).column(0);
instance.writeRange(excelCell, data);
instance.outputTo(outputFile);
ExcelRange range = ExcelRange.sheetName("Company").rowFrom(0).columnRange(0, 6);
instance = new ExcelHandler(outputFile);
ExcelRangeData results = instance.readRange(range);
assertEquals("编号", results.getString(0, 0));
assertEquals("公司", results.getString(0, 1));
assertEquals("创建日期", results.getString(0, 2));
assertEquals("撤销日期", results.getString(0, 3));
assertEquals("排序号", results.getString(0, 4));
assertEquals("上级机构", results.getString(0, 5));
assertEquals("已撤销", results.getString(0, 6));
assertEquals("suilink", results.getString(1, 0));
assertEquals("穗灵公司", results.getString(1, 1));
assertTrue(DateUtils.isSameDay(results.getDate(1, 2), parseDate(2002, 7, 1)));
assertTrue(DateUtils.isSameDay(results.getDate(1, 3), parseDate(8888, 1, 1)));
assertEquals(1, results.getInt(1, 4).intValue());
assertNull(results.getString(1, 5));
assertFalse(results.getBoolean(1, 6));
assertEquals("dayatang", results.getString(2, 0));
assertEquals("大雅堂公司", results.getString(2, 1));
assertTrue(DateUtils.isSameDay(results.getDate(2, 2), parseDate(2004, 10, 1)));
assertTrue(DateUtils.isSameDay(results.getDate(2, 3), parseDate(8888, 1, 1)));
assertEquals(2, results.getInt(2, 4).intValue());
assertEquals("suilink", results.getString(2, 5));
assertTrue(results.getBoolean(2, 6));
}
private List<Object[]> createData() {
List<Object[]> results = new ArrayList<Object[]>();
results.add(new Object[] {"编号", "公司", "创建日期", "撤销日期", "排序号", "上级机构", "已撤销"});
results.add(new Object[] {"suilink", "穗灵公司", createDate("2002-7-1"), createDate("8888-1-1"), 1, null, false});
results.add(new Object[] {"dayatang", "大雅堂公司", createDate("2004-10-1"), createDate("8888-1-1"), 2, "suilink", true});
return results;
}
private Object createDate(String value) {
try {
return DateUtils.parseDate(value, new String[] {
"yyyy-MM-dd",
"yyyy-M-d",
"yy-MM-dd",
"yy-M-d"
});
} catch (ParseException e) {
e.printStackTrace();
return null;
}
}
private Date parseDate(int year, int month, int date) {
Calendar result = Calendar.getInstance();
result.set(year, month - 1, date);
return result.getTime();
}
@Test
public void testExportDataCell() throws Exception {
ExcelCell excelCell = ExcelCell.sheetName("Company").row(2).column(1);
instance.writeCell(excelCell, parseDate(2012, 2, 5));
instance.outputTo(outputFile);
instance = new ExcelHandler(outputFile);
assertTrue(DateUtils.isSameDay(instance.readDate(excelCell), parseDate(2012, 2, 5)));
}
}