public class ExtremProcess
{
/**如果每個表單需要標題行,則爲1,否則爲0*/
private final int headline = 1;
private Logger log = Logger.getLogger(ExtremProcess.class);
/**
*
* @param dir 文件所在目錄
* @param override 是否覆蓋源文件,true覆蓋,false不覆蓋
*/
public boolean exeDir(File dir,boolean override)
{
try
{
File[] fs = dir.listFiles(new FilenameFilter() {
public boolean accept(File dir, String name)
{
return name.toLowerCase().endsWith("xls") && name.indexOf("finished") == -1;
}
});
for(File f:fs)
{
String src = f.getAbsolutePath();
exeFile(src, override ? src : src.replace(".", "_finished."));
}
}
catch (Exception e)
{
log.error("目錄輸入有誤,請檢查重試!");
return false;
}
return true;
}
/**
*
* @param srcFile 源文件
* @param desFile 處理後生成的文件,如果與源文件名同則覆蓋源文件,原來資料仍然保留
*/
public boolean exeFile(String srcFile,String desFile)
{
try
{
SimpleDateFormat formatter = Const.srcFormat;
log.info(srcFile+" is processing...");
Workbook book = Workbook.getWorkbook(new File(srcFile));
Sheet sheet = book.getSheet(Const.sheet_index-1);
Cell[] cells = sheet.getColumn(Const.data_index);
String dateFormat = "%tF %<tT";
LinkedHashMap<Integer, ArrayList<Date>> map = new LinkedHashMap<Integer, ArrayList<Date>>(31,1f);
String result = null;
for(Cell cell:cells)
{
result = cell.getContents();
if(result.trim().length() != 0)//如果非空就轉化爲日期存起來
{
Date d = formatter.parse(result);
if(map.get(d.getDate()) == null)
{
map.put(d.getDate(), new ArrayList<Date>());
}
map.get(d.getDate()).add(d);
}
}
//對抽取的數據進行處理
SimpleProcess util = new SimpleProcess();
util.deal(map);
LinkedHashMap<Integer,ArrayList<Date>> exception = util.getException();
LinkedHashMap<Integer,ArrayList<Date>> extra_weekend = util.getExtra_weekend();
LinkedHashSet<Date> extra_weekday = util.getExtra_weekday();
//新建一個可寫工作薄
WritableWorkbook wbook = Workbook.createWorkbook(new FileOutputStream(desFile,false),book);
String[] title = {"週末加班","平時加班","異常打卡"};
WritableSheet[] ws = new WritableSheet[title.length];
//做點清理,如果爲空白表單或者與目標表單重名,則予以刪除
for(int i=book.getNumberOfSheets()-1;i >= 0; i--)
{
if(book.getSheet(i).getRows() == 0 || book.getSheet(i).getColumns() == 0)
{
wbook.removeSheet(i);
continue;
}
for(String t : title)
{
if(book.getSheet(i).getName().equals(t))
{
wbook.removeSheet(i);
}
}
}