Example usage for org.apache.poi.hssf.usermodel HSSFWorkbook setSheetName

List of usage examples for org.apache.poi.hssf.usermodel HSSFWorkbook setSheetName

Introduction

In this page you can find the example usage for org.apache.poi.hssf.usermodel HSSFWorkbook setSheetName.

Prototype

@Override
public void setSheetName(int sheetIx, String name) 

Source Link

Document

Set the sheet name.

Usage

From source file:tw.edu.chit.struts.action.registration.ReportPrintAction.java

/**
 * ???/* w  w  w .j av a  2s.  co m*/
 * 
 * @param mapping org.apache.struts.action.ActionMapping object
 * @param form org.apache.struts.action.ActionForm object
 * @param request request javax.servlet.http.HttpServletRequest object
 * @param response response javax.servlet.http.HttpServletResponse object
 * @param sterm 
 */
@SuppressWarnings("unchecked")
private void printClassStudentsScoreHistory(ActionMapping mapping, DynaActionForm form,
        HttpServletRequest request, HttpServletResponse response, String sterm) throws Exception {

    HttpSession session = request.getSession(false);
    MemberManager mm = (MemberManager) getBean(IConstants.MEMBER_MANAGER_BEAN_NAME);
    CourseManager cm = (CourseManager) getBean(IConstants.COURSE_MANAGER_BEAN_NAME);
    ScoreManager sm = (ScoreManager) getBean(IConstants.SCORE_MANAGER_BEAN_NAME);
    StudAffairManager sam = (StudAffairManager) getBean(IConstants.STUD_AFFAIR_MANAGER_BEAN_NAME);
    boolean isIncludeThisTermScore = "true".equalsIgnoreCase(request.getParameter("tt"));

    // String year = cm.getNowBy("School_year");
    // String term = form.getString("sterm");
    String studentNo = null;
    Clazz clazz = null;
    ScoreHist scoreHist = null, hist = null;
    List<Student> students = null;
    List<Clazz> clazzes = sm.findClassBy(new Clazz(processClassInfo(form)),
            getUserCredential(session).getClassInChargeAry(), false);

    if (!clazzes.isEmpty() && clazzes.size() > 1) {
        ActionMessages messages = new ActionMessages();
        messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("", ""));
        saveMessages(request, messages);
        // return mapping.findForward(IConstants.ACTION_MAIN_NAME);
        ServletContext context = request.getSession().getServletContext();
        Map<String, String> parameters = new HashMap<String, String>();
        File image = new File(context.getRealPath("/pages/reports/2002chitS.jpg"));
        parameters.put("IMAGE", image.getAbsolutePath());
        byte[] bytes = JasperRunManager.runReportToPdf(JasperReportUtils.getNoResultReport(context), parameters,
                new JREmptyDataSource());
        JasperReportUtils.printPdfToFrontEnd(response, bytes);
    } else {

        clazz = clazzes.get(0);
        students = mm.findStudentsByClassNo(clazz.getClassNo());
        if (!students.isEmpty()) {

            ServletContext context = request.getSession().getServletContext();
            String[] excep = { "11G332" }; // ??+1
            String[] formYear = { "", "", "", "", "", "", "", "", "?" };

            short firstYear = 0;
            short lastYear = 0;

            double justScore = 0.0D;

            int sheetIndex = 0;
            int k = 0, j = 0, rowIndex = 0, nextPageRowIndex = 0;
            int kk = 0, rowIndexx = 0;

            String departClass = clazz.getClassNo();
            String departCode = "", title = "", evgrType = "", historyDepartCode = "", opt = "", cscode = "";

            // ?70?
            float passScore = Toolket.getPassScoreByDepartClass(departClass);

            Graduate graduate = null;
            MasterData md = null;
            Just just = null;
            ScoreHist target = null;
            Dtime dtime = null;
            List csnos = null;
            Csno csno = null;
            Gmark gmark = null;

            Map<String, String> position = null;

            Float passCreditsSum = 0.0F;
            Float totalPassCredits = 0.0F;

            List<Seld> selds = null;
            List<ScoreHist> scoreHistList = null;
            List<Stavg> stavgs = null;
            List<Gmark> gmarks = null;

            boolean isOver = false; // (lastYear - firstYear + 1) > 4;
            boolean isDelay = Toolket.isDelayClass(departClass);
            boolean isSpringClass = false;
            // 
            boolean isDoubleMajor = false;
            boolean isAssist = false;
            // 9608???Show????,?Show'',?????Show
            boolean is96Entrance = false;
            boolean isMaster = Toolket.isMasterClass(departClass);
            boolean nextPage = false, hasPassRecord = false, rowOver = false;
            boolean isNotExemptAndMend = false; // ???
            boolean isExempt = false; // ???
            boolean isMend = false; // ??
            boolean isAppend = false; // ???
            boolean isNotSameDepartCode = false;
            boolean isOver15Char = false, isOver10Char = false;

            int studentCounts = students.size();
            String fileName = "";

            DecimalFormat df = new DecimalFormat(",##0.0");

            File templateXLS = null;

            if (!isMaster) {

                if (studentCounts <= 30)
                    fileName = "ClassStudentsScoreHistoryOver30.xls";
                else if (studentCounts > 31 && studentCounts <= 40)
                    fileName = "ClassStudentsScoreHistoryOver40.xls";
                else if (studentCounts > 40 && studentCounts <= 45)
                    fileName = "ClassStudentsScoreHistoryOver45.xls";
                else if (studentCounts > 45 && studentCounts <= 50)
                    fileName = "ClassStudentsScoreHistoryOver50.xls";
                else if (studentCounts > 51 && studentCounts <= 55)
                    fileName = "ClassStudentsScoreHistoryOver55.xls";
                else
                    fileName = "ClassStudentsScoreHistoryOver60.xls";

                title = Toolket.getSchoolFormalName(departClass);
                if (isDelay) {
                    // Only 20 Sheets
                    templateXLS = new File(
                            context.getRealPath("/WEB-INF/reports/ClassStudentsScoreHistoryOver.xls"));
                } else {
                    templateXLS = new File(context.getRealPath("/WEB-INF/reports/" + fileName));
                }
            } else {

                if (studentCounts <= 15)
                    fileName = "ClassStudentsScoreHistoryMaster15.xls";
                else if (studentCounts > 15 && studentCounts <= 20)
                    fileName = "ClassStudentsScoreHistoryMaster20.xls";
                else
                    fileName = "ClassStudentsScoreHistoryMaster25.xls";

                String masterId = StringUtils.substring(departClass, 1, 3);
                if ("1G".equals(masterId))
                    title = "?";
                else
                    title = "??";
                templateXLS = new File(context.getRealPath("/WEB-INF/reports/" + fileName));
            }

            HSSFWorkbook workbook = Toolket.getHSSFWorkbook(templateXLS);

            HSSFFont colorFont = workbook.createFont();
            colorFont.setColor(HSSFColor.RED.index);
            colorFont.setFontHeightInPoints((short) 12);
            colorFont.setFontName("Arial Unicode MS");

            HSSFFont fontSize12 = workbook.createFont();
            fontSize12.setFontHeightInPoints((short) 12);
            fontSize12.setFontName("Arial Unicode MS");

            HSSFFont fontSize10 = workbook.createFont();
            fontSize10.setFontHeightInPoints((short) 10);
            fontSize10.setFontName("Arial Unicode MS");

            HSSFFont fontSize9 = workbook.createFont();
            fontSize9.setFontHeightInPoints((short) 9);
            fontSize9.setFontName("Arial Unicode MS");

            HSSFSheet sheet = null;

            for (Student student : students) {

                studentNo = student.getStudentNo();
                if (sheetIndex > 59)
                    sheetIndex = 59;
                sheet = workbook.getSheetAt(sheetIndex);
                workbook.setSheetName(sheetIndex++, studentNo.toUpperCase());
                if (student == null) {
                    graduate = mm.findGraduateByStudentNo(studentNo);
                    student = new Student();
                    BeanUtils.copyProperties(student, graduate);
                }

                // 
                isDoubleMajor = "".equals(student.getExtraStatus());
                isAssist = "".equals(student.getExtraStatus());

                // departClass = student.getDepartClass();
                // 9608???Show????,?Show'',?????Show
                is96Entrance = student.getEntrance() == null ? false : student.getEntrance() >= (short) 9608;
                scoreHist = new ScoreHist(studentNo);
                scoreHistList = sm.findScoreHistBy(scoreHist);
                if (scoreHistList.isEmpty()) {
                    ActionMessages messages = new ActionMessages();
                    messages.add(ActionMessages.GLOBAL_MESSAGE,
                            new ActionMessage("Course.messageN1", "?"));
                    saveErrors(request, messages);
                    log.error("No Score History... " + studentNo);
                    sheetIndex--;
                    continue;
                } else {

                    firstYear = Short.parseShort(scoreHistList.get(0).getSchoolYear().toString());
                    lastYear = Short
                            .parseShort(scoreHistList.get(scoreHistList.size() - 1).getSchoolYear().toString());
                    isOver = (lastYear - firstYear + 1) > 4;
                    if (isOver)
                        ; // log.error("It is Over... " + studentNo);
                    departCode = "";

                    Toolket.setCellValue(sheet, 0, 0, "?" + title + "?");
                    Toolket.setCellValue(sheet, 1, 1, "" + studentNo);
                    Toolket.setCellValue(sheet, 1, 7, "??" + student.getStudentName());
                    Toolket.setCellValue(sheet, 1, 9, ""
                            + (isMaster ? Toolket.getMasterDepartName(departClass)
                                    : Toolket.getDepartName(departClass))
                            + (isDoubleMajor || isAssist
                                    ? "(" + student.getExtraStatus() + ":" + student.getExtraDept() + ")"
                                    : ""));
                    Toolket.setCellValue(sheet, 1, 19, "" + student.getIdno());

                    // ?2,?code
                    Toolket.setCellValue(sheet, 43, 0, "?" + title + "?");
                    Toolket.setCellValue(sheet, 44, 1, "" + studentNo);
                    Toolket.setCellValue(sheet, 44, 7, "??" + student.getStudentName());
                    Toolket.setCellValue(sheet, 44, 9, ""
                            + (isMaster ? Toolket.getMasterDepartName(departClass)
                                    : Toolket.getDepartName(departClass))
                            + (isDoubleMajor || isAssist
                                    ? "(" + student.getExtraStatus() + ":" + student.getExtraDept() + ")"
                                    : ""));
                    Toolket.setCellValue(sheet, 44, 19, "" + student.getIdno());

                    if (isDelay) {
                        Toolket.setCellValue(sheet, 43, 0,
                                "?" + title + "?");
                        Toolket.setCellValue(sheet, 44, 1, "" + studentNo);
                        Toolket.setCellValue(sheet, 44, 7, "??" + student.getStudentName());
                        Toolket.setCellValue(sheet, 44, 9, ""
                                + (isMaster ? Toolket.getMasterDepartName(departClass)
                                        : Toolket.getDepartName(departClass))
                                + (isDoubleMajor || isAssist
                                        ? "(" + student.getExtraStatus() + ":" + student.getExtraDept() + ")"
                                        : ""));
                        Toolket.setCellValue(sheet, 44, 19, "" + student.getIdno());
                    }

                    if (isDoubleMajor || isAssist) {
                        Toolket.setCellValue(sheet, 42, 0,
                                "  => *:??   #:   &:   ");
                        departCode = StringUtils.substring(student.getDepartClass(), 3, 4);
                    }

                    if (isOver) {
                        Toolket.setCellValue(sheet, 43, 0,
                                "?" + title + "?");
                        Toolket.setCellValue(sheet, 44, 1, "" + studentNo);
                        Toolket.setCellValue(sheet, 44, 7, "??" + student.getStudentName());
                        Toolket.setCellValue(sheet, 44, 9,
                                "" + (isMaster ? Toolket.getMasterDepartName(departClass)
                                        : Toolket.getDepartName(departClass)));
                        Toolket.setCellValue(sheet, 44, 19, "" + student.getIdno());
                        if (isDoubleMajor || isAssist)
                            Toolket.setCellValue(sheet, 85, 0,
                                    "  => *:??   #:   &:   ");
                    }

                    if (isMaster) {
                        md = sm.findMasterByStudentNo(studentNo);
                        if (md != null) {
                            Toolket.setCellValue(sheet, 38, 0, "" + md.getThesesChiname());
                            Toolket.setCellValue(sheet, 39, 0, "          " + md.getThesesEngname());
                            Toolket.setCellValue(sheet, 38, 17, md.getRemark());
                            Toolket.setCellValue(sheet, 40, 0, "??" + md.getThesesScore());
                            Toolket.setCellValue(sheet, 40, 4,
                                    "??(50%)" + md.getThesesScore() / 2);
                            Toolket.setCellValue(sheet, 40, 8, "??" + md.getEvgr1Score());
                            Toolket.setCellValue(sheet, 40, 14,
                                    "??(50%)" + md.getEvgr1Score() / 2);
                            Toolket.setCellValue(sheet, 40, 19, "?" + md.getGraduateScore());
                        }
                    }

                    if (Arrays.binarySearch(excep, departClass) >= 0) {
                        lastYear++;
                        isSpringClass = true;
                        Toolket.setCellValue(sheet, 39, 17, "" + (lastYear + 1) + ".1");
                    }

                    k = 0;
                    j = 0;
                    rowIndex = 6;
                    nextPageRowIndex = 43;
                    passCreditsSum = 0.0F;
                    nextPage = false;
                    hasPassRecord = false;
                    rowOver = false;
                    // List<Stavg> stavgs = null;
                    // Just just = null;
                    // String[] formYear = { "", "", "", "", "", "",
                    // "", "" };
                    for (short year = firstYear; year <= lastYear; year++) {
                        // ???9316D078
                        // ???
                        scoreHist.setSchoolYear(year);
                        scoreHist.setSchoolTerm("1");
                        hasPassRecord = !sm.findScoreHistBy(scoreHist).isEmpty();
                        if (!hasPassRecord) {
                            scoreHist.setSchoolTerm("2");
                            hasPassRecord = !sm.findScoreHistBy(scoreHist).isEmpty();
                            if (!hasPassRecord)
                                continue;
                        }

                        if (isSpringClass && year == lastYear) {
                            just = sam.findJustByStudentNo(studentNo);
                            justScore = 0.0D;
                            if (just == null || just.getTotalScore() == 0.0D) {
                                target = new ScoreHist(studentNo);
                                target.setSchoolYear(new Short(year));
                                target.setSchoolTerm("2");
                                target.setCscode("99999");
                                scoreHistList = sm.findScoreHistBy(target);
                                if (!scoreHistList.isEmpty()) {
                                    scoreHist = sm.findScoreHistBy(scoreHist).get(0);
                                    justScore = scoreHist.getScore();
                                }
                            } else
                                justScore = just.getTotalScore();

                            Toolket.setCellValue(sheet, 35 + (isMaster ? -2 : 0), k * 6 + 3,
                                    justScore == 0.0D ? "" : String.valueOf(Math.round(justScore)));
                        }

                        if (rowOver) {
                            Toolket.setCellValue(workbook, sheet, 2 + (nextPage ? nextPageRowIndex : 0), k * 6,
                                    "    " + formYear[(nextPage ? k + 4 : k)] + "        ", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, null);
                        } else
                            Toolket.setCellValue(sheet, 2 + (nextPage ? nextPageRowIndex : 0), k * 6,
                                    "    " + formYear[(nextPage ? k + 4 : k)] + "        ");
                        position = new HashMap<String, String>();
                        for (int term = 1; term <= 2; term++) {
                            scoreHist.setSchoolYear(year);
                            scoreHist.setSchoolTerm(String.valueOf(term));
                            // scoreHist.setEvgrType("1"); // ?
                            scoreHistList = sm.findScoreHistBy(scoreHist);
                            if (!scoreHistList.isEmpty()) {
                                Toolket.setCellValue(sheet, 3 + (nextPage ? nextPageRowIndex : 0), k * 6,
                                        "" + year + "   9      " + (year + 1) + "   7  ");
                                stavgs = sm.findStavgBy(new Stavg(studentNo, year, String.valueOf(term)));
                                totalPassCredits = 0.0F;
                                // for (ScoreHist hist : scoreHistList) {
                                // i != scoreHistList.size() -
                                // 1???,??
                                for (int i = 0; i < scoreHistList.size(); i++) {

                                    hist = scoreHistList.get(i);
                                    if (rowIndex == 32 && i != scoreHistList.size() - 1) {
                                        rowIndex = 6;
                                        k++;
                                        Toolket.setCellValue(sheet, 2 + (nextPage ? nextPageRowIndex : 0),
                                                k * 6, "    " + formYear[k - 1] + "        ");
                                        Toolket.setCellValue(sheet, 3 + (nextPage ? nextPageRowIndex : 0),
                                                k * 6, "" + year + "   9      " + (year + 1)
                                                        + "   7  ");
                                        rowOver = true;
                                    }

                                    evgrType = hist.getEvgrType();
                                    isNotExemptAndMend = !"6".equals(evgrType) && !"5".equals(evgrType); // ???
                                    isExempt = "6".equals(evgrType); // ???
                                    isMend = "5".equals(evgrType); // ??
                                    isAppend = "2".equals(evgrType); // ???
                                    historyDepartCode = StringUtils.isBlank(hist.getStdepartClass()) ? ""
                                            : StringUtils.substring(hist.getStdepartClass(), 3, 4);
                                    isNotSameDepartCode = !departCode.equals(historyDepartCode)
                                            && !historyDepartCode.equals("0");
                                    opt = "";
                                    if ("3".equals(evgrType))
                                        opt = "";
                                    else
                                        opt = StringUtils.substring(Toolket.getCourseOpt(hist.getOpt()), 0, 1)
                                                + (isAppend ? ""
                                                        : (isMend ? ""
                                                                : (!isNotExemptAndMend ? "" : "")));

                                    cscode = hist.getCscode();
                                    if ("GA035".equals(cscode) || "".equals("GB033"))
                                        continue; // 2?

                                    isOver15Char = false;
                                    isOver10Char = false;
                                    if (!"99999".equals(cscode)) { // ?
                                        String courseName = cm.findCourseInfoByCscode(cscode) == null
                                                ? "??"
                                                : cm.findCourseInfoByCscode(cscode).getChiName().trim();
                                        isOver15Char = courseName.length() > 15;
                                        isOver10Char = courseName.length() > 10;
                                        Float credit = hist.getCredit();
                                        Float score = hist.getScore();
                                        boolean pass = (score == null ? 0.0F : score) >= passScore;
                                        // ((?&&?)||?)&&?
                                        if (((isNotExemptAndMend && pass) || isExempt) && !isMend)
                                            // if (!isNotExemptAndMend ||
                                            // !isMend ||
                                            // bFlag1)
                                            // if (!isMend && bFlag1)
                                            if (isMaster && "G".equalsIgnoreCase(
                                                    StringUtils.substring(hist.getStdepartClass(), 2, 3))) {
                                                // ???,?
                                                totalPassCredits += credit;
                                            } else
                                                totalPassCredits += credit;

                                        if (1 == term) {
                                            if (opt.length() == 1 || is96Entrance)
                                                Toolket.setCellValue(sheet, rowIndex, k * 6,
                                                        (is96Entrance ? StringUtils.substring(opt, 0, 1)
                                                                : opt));
                                            else
                                                Toolket.setCellValue(workbook, sheet, rowIndex, k * 6, opt,
                                                        fontSize12, HSSFCellStyle.ALIGN_CENTER, true, null);
                                            if (isOver15Char)
                                                Toolket.setCellValue(workbook, sheet, rowIndex, k * 6 + 1,
                                                        courseName, fontSize9, HSSFCellStyle.ALIGN_LEFT, true,
                                                        null);
                                            else if (isOver10Char)
                                                Toolket.setCellValue(workbook, sheet, rowIndex, k * 6 + 1,
                                                        courseName, fontSize10, HSSFCellStyle.ALIGN_LEFT, true,
                                                        null);
                                            else
                                                Toolket.setCellValue(sheet, rowIndex, k * 6 + 1, courseName);
                                            position.put(courseName, String.valueOf(rowIndex));

                                            if (isNotExemptAndMend) {
                                                // ?
                                                String creditStr = credit.toString();
                                                if (!isMend && !isExempt)
                                                    creditStr = pass ? creditStr : creditStr + "*";
                                                if (isDoubleMajor && isNotSameDepartCode)
                                                    creditStr += "&";
                                                if (isAssist && isNotSameDepartCode)
                                                    creditStr += "#";
                                                if (StringUtils.indexOf(creditStr,
                                                        "*") == StringUtils.INDEX_NOT_FOUND)
                                                    Toolket.setCellValue(sheet, rowIndex, k * 6 + 2, creditStr);
                                                else
                                                    Toolket.setCellValue(workbook, sheet, rowIndex, k * 6 + 2,
                                                            creditStr, colorFont, HSSFCellStyle.ALIGN_CENTER,
                                                            true, null);
                                                // ??
                                                Toolket.setCellValue(sheet, rowIndex++, k * 6 + 3, (isMend
                                                        ? ""
                                                        : (score == null ? ""
                                                                : StringUtils.substringBefore(score.toString(),
                                                                        "."))));
                                                // ??
                                                Toolket.setCellValue(sheet,
                                                        32 + (isMaster ? -2 : 0)
                                                                + (nextPage ? nextPageRowIndex : 0),
                                                        k * 6 + 3,
                                                        (stavgs.isEmpty() ? ""
                                                                : df.format(
                                                                        stavgs.get(0).getScore() + 0.001D)));
                                            } else {
                                                // ?
                                                String creditStr = credit.toString();
                                                Toolket.setCellValue(sheet, rowIndex, k * 6 + 2, creditStr);
                                                if (is96Entrance)
                                                    Toolket.setCellValue(sheet, rowIndex++, k * 6 + 3,
                                                            (isMend ? "" : ""));
                                                else {
                                                    // ??
                                                    Toolket.setCellValue(sheet,
                                                            32 + (isMaster ? -2 : 0)
                                                                    + (nextPage ? nextPageRowIndex : 0),
                                                            k * 6 + 3,
                                                            (stavgs.isEmpty() ? ""
                                                                    : df.format(stavgs.get(0).getScore()
                                                                            + 0.001D)));
                                                    Toolket.setCellValue(sheet, rowIndex++, k * 6 + 3,
                                                            score == null ? ""
                                                                    : StringUtils.substringBefore(
                                                                            score.toString(), "."));
                                                }
                                            }
                                        } else {

                                            String endString = StringUtils.substring(courseName,
                                                    courseName.length() - 1);
                                            boolean duplicatedCourseName = "".equals(endString);
                                            boolean duplicatedCourseName1 = "".equals(endString);
                                            boolean duplicatedCourseName2 = "".equals(endString);

                                            if (duplicatedCourseName || duplicatedCourseName1
                                                    || duplicatedCourseName2) {

                                                String courseIndex = StringUtils.substring(courseName, 0,
                                                        courseName.length() - 1);
                                                String row = "", maybeSameCourseNameOptInfo = "";
                                                if (duplicatedCourseName) {
                                                    row = position.get(courseIndex + "");
                                                    if (row != null)
                                                        maybeSameCourseNameOptInfo = Toolket.getCellValue(sheet,
                                                                Integer.parseInt(row),
                                                                (rowOver ? k - 1 : k) * 6);
                                                } else if (duplicatedCourseName1) {
                                                    row = position.get(courseIndex + "");
                                                    if (row != null)
                                                        maybeSameCourseNameOptInfo = Toolket.getCellValue(sheet,
                                                                Integer.parseInt(row),
                                                                (rowOver ? k - 1 : k) * 6);
                                                } else if (duplicatedCourseName2) {
                                                    row = position.get(courseIndex + "");
                                                    if (row != null)
                                                        maybeSameCourseNameOptInfo = Toolket.getCellValue(sheet,
                                                                Integer.parseInt(row),
                                                                (rowOver ? k - 1 : k) * 6);
                                                }

                                                // ?????
                                                boolean isAllowMerge = (StringUtils.contains(opt, "")
                                                        && StringUtils.contains(maybeSameCourseNameOptInfo,
                                                                ""))
                                                        || (StringUtils.contains(opt, "?") && StringUtils
                                                                .contains(maybeSameCourseNameOptInfo, "?"));
                                                if (row != null && isAllowMerge) {
                                                    int rowNum = Integer.parseInt(row);
                                                    Toolket.setCellValue(sheet, rowNum,
                                                            (rowOver ? k - 1 : k) * 6 + 1,
                                                            Toolket.getCellValue(sheet, rowNum,
                                                                    (rowOver ? k - 1 : k) * 6 + 1)
                                                                    + "?"
                                                                    + (duplicatedCourseName ? ""
                                                                            : duplicatedCourseName1 ? ""
                                                                                    : ""));
                                                    if (isNotExemptAndMend) {
                                                        // ?
                                                        String creditStr = credit.toString();
                                                        if (!isMend && !isExempt)
                                                            creditStr = pass ? creditStr : creditStr + "*";
                                                        if (isDoubleMajor && isNotSameDepartCode)
                                                            creditStr += "&";
                                                        if (isAssist && isNotSameDepartCode)
                                                            creditStr += "#";
                                                        if (StringUtils.indexOf(creditStr,
                                                                "*") == StringUtils.INDEX_NOT_FOUND)
                                                            Toolket.setCellValue(sheet, rowNum,
                                                                    (rowOver ? k - 1 : k) * 6 + 4, creditStr);
                                                        else
                                                            Toolket.setCellValue(workbook, sheet, rowNum,
                                                                    (rowOver ? k - 1 : k) * 6 + 4, creditStr,
                                                                    colorFont, HSSFCellStyle.ALIGN_CENTER, true,
                                                                    null);

                                                        Toolket.setCellValue(sheet, rowNum,
                                                                (rowOver ? k - 1 : k) * 6 + 5,
                                                                (isMend ? ""
                                                                        : (score == null ? ""
                                                                                : StringUtils.substringBefore(
                                                                                        score.toString(),
                                                                                        "."))));
                                                        Toolket.setCellValue(sheet,
                                                                32 + (isMaster ? -2 : 0)
                                                                        + (nextPage ? nextPageRowIndex : 0),
                                                                (rowOver ? k - 1 : k) * 6 + 5,
                                                                (stavgs.isEmpty() ? ""
                                                                        : df.format(stavgs.get(0).getScore()
                                                                                + 0.001D)));
                                                    } else {
                                                        // ?
                                                        String creditStr = credit.toString();
                                                        Toolket.setCellValue(sheet, rowNum,
                                                                (rowOver ? k - 1 : k) * 6 + 4, creditStr);
                                                        if (is96Entrance)
                                                            Toolket.setCellValue(sheet, rowNum,
                                                                    (rowOver ? k - 1 : k) * 6 + 5,
                                                                    (isMend ? "" : ""));
                                                        else {
                                                            Toolket.setCellValue(sheet,
                                                                    32 + (isMaster ? -2 : 0),
                                                                    (rowOver ? k - 1 : k) * 6 + 5,
                                                                    (stavgs.isEmpty() ? ""
                                                                            : df.format(stavgs.get(0).getScore()
                                                                                    + 0.001D)));
                                                            Toolket.setCellValue(sheet, rowNum,
                                                                    (rowOver ? k - 1 : k) * 6 + 5,
                                                                    score == null ? ""
                                                                            : StringUtils.substringBefore(
                                                                                    score.toString(), "."));
                                                        }
                                                    }
                                                } else {
                                                    if (opt.length() == 1 || is96Entrance)
                                                        Toolket.setCellValue(sheet, rowIndex, k * 6,
                                                                (is96Entrance ? StringUtils.substring(opt, 0, 1)
                                                                        : opt));
                                                    else
                                                        Toolket.setCellValue(workbook, sheet, rowIndex, k * 6,
                                                                opt, fontSize12, HSSFCellStyle.ALIGN_CENTER,
                                                                true, null);
                                                    Toolket.setCellValue(sheet, rowIndex, k * 6 + 1,
                                                            courseName);
                                                    position.put(courseName, String.valueOf(rowIndex));

                                                    if (isNotExemptAndMend) {
                                                        // ?
                                                        String creditStr = credit.toString();
                                                        if (!isMend && !isExempt)
                                                            creditStr = pass ? creditStr : creditStr + "*";
                                                        if (isDoubleMajor && isNotSameDepartCode)
                                                            creditStr += "&";
                                                        if (isAssist && isNotSameDepartCode)
                                                            creditStr += "#";
                                                        if (StringUtils.indexOf(creditStr,
                                                                "*") == StringUtils.INDEX_NOT_FOUND)
                                                            Toolket.setCellValue(sheet, rowIndex, k * 6 + 4,
                                                                    creditStr);
                                                        else
                                                            Toolket.setCellValue(workbook, sheet, rowIndex,
                                                                    k * 6 + 4, creditStr, colorFont,
                                                                    HSSFCellStyle.ALIGN_CENTER, true, null);

                                                        // ??
                                                        Toolket.setCellValue(sheet, rowIndex++, k * 6 + 5,
                                                                (isMend ? ""
                                                                        : (score == null ? ""
                                                                                : StringUtils.substringBefore(
                                                                                        score.toString(),
                                                                                        "."))));
                                                        // ??
                                                        Toolket.setCellValue(sheet, 32 + (isMaster ? -2 : 0),
                                                                k * 6 + 5,
                                                                (stavgs.isEmpty() ? ""
                                                                        : df.format(stavgs.get(0).getScore()
                                                                                + 0.001D)));
                                                    } else {
                                                        // ?
                                                        String creditStr = credit.toString();
                                                        Toolket.setCellValue(sheet, rowIndex, k * 6 + 4,
                                                                creditStr);
                                                        if (is96Entrance)
                                                            Toolket.setCellValue(sheet, rowIndex++, k * 6 + 5,
                                                                    (isMend ? "" : ""));
                                                        else {
                                                            // ??
                                                            Toolket.setCellValue(sheet,
                                                                    32 + (isMaster ? -2 : 0), k * 6 + 5,
                                                                    (stavgs.isEmpty() ? ""
                                                                            : df.format(stavgs.get(0).getScore()
                                                                                    + 0.001D)));
                                                            Toolket.setCellValue(sheet, rowIndex++, k * 6 + 5,
                                                                    score == null ? ""
                                                                            : StringUtils.substringBefore(
                                                                                    score.toString(), "."));
                                                        }
                                                    }
                                                }
                                            } else {
                                                if (opt.length() == 1 || is96Entrance)
                                                    Toolket.setCellValue(sheet, rowIndex, k * 6,
                                                            (is96Entrance ? StringUtils.substring(opt, 0, 1)
                                                                    : opt));
                                                else
                                                    Toolket.setCellValue(workbook, sheet, rowIndex, k * 6, opt,
                                                            fontSize12, HSSFCellStyle.ALIGN_CENTER, true, null);
                                                Toolket.setCellValue(sheet, rowIndex, k * 6 + 1, courseName);
                                                // ?
                                                String creditStr = credit.toString();
                                                if (!isMend && !isExempt)
                                                    creditStr = pass ? creditStr : creditStr + "*";
                                                if (isDoubleMajor && isNotSameDepartCode)
                                                    creditStr += "&";
                                                if (isAssist && isNotSameDepartCode)
                                                    creditStr += "#";
                                                if (StringUtils.indexOf(creditStr,
                                                        "*") == StringUtils.INDEX_NOT_FOUND)
                                                    Toolket.setCellValue(sheet, rowIndex, k * 6 + 4, creditStr);
                                                else
                                                    Toolket.setCellValue(workbook, sheet, rowIndex, k * 6 + 4,
                                                            creditStr, colorFont, HSSFCellStyle.ALIGN_CENTER,
                                                            true, null);

                                                if (isNotExemptAndMend) {
                                                    Toolket.setCellValue(sheet, rowIndex++, k * 6 + 5,
                                                            (isMend ? ""
                                                                    : (score == null ? ""
                                                                            : StringUtils.substringBefore(
                                                                                    score.toString(), "."))));
                                                    Toolket.setCellValue(sheet, 32 + (isMaster ? -2 : 0),
                                                            k * 6 + 5,
                                                            (stavgs.isEmpty() ? ""
                                                                    : df.format(stavgs.get(0).getScore()
                                                                            + 0.001D)));
                                                } else {
                                                    if (is96Entrance)
                                                        Toolket.setCellValue(sheet, rowIndex++, k * 6 + 5,
                                                                (isMend ? "" : ""));
                                                    else {
                                                        Toolket.setCellValue(sheet, 32 + (isMaster ? -2 : 0),
                                                                k * 6 + 5,
                                                                (stavgs.isEmpty() ? ""
                                                                        : df.format(stavgs.get(0).getScore()
                                                                                + 0.001D)));
                                                        Toolket.setCellValue(sheet, rowIndex++, k * 6 + 5,
                                                                score == null ? ""
                                                                        : StringUtils.substringBefore(
                                                                                score.toString(), "."));
                                                    }
                                                }
                                            }

                                        }
                                    } else {
                                        // ?
                                        if (1 == term) {
                                            if (isNotExemptAndMend) {
                                                Toolket.setCellValue(sheet,
                                                        35 + (isMaster ? -2 : 0)
                                                                + (nextPage ? nextPageRowIndex : 0),
                                                        k * 6 + 3, String.valueOf(Math.round(hist.getScore())));
                                            } else {
                                                if (!is96Entrance)
                                                    Toolket.setCellValue(sheet, 35 + (isMaster ? -2 : 0),
                                                            k * 6 + 3,
                                                            hist.getScore() == null ? ""
                                                                    : String.valueOf(
                                                                            Math.round((hist.getScore()))));
                                            }
                                        } else {
                                            if (isNotExemptAndMend) {
                                                Toolket.setCellValue(sheet,
                                                        35 + (isMaster ? -2 : 0)
                                                                + (nextPage ? nextPageRowIndex : 0),
                                                        k * 6 + 5, String.valueOf(Math.round(hist.getScore())));
                                            } else {
                                                if (!is96Entrance)
                                                    Toolket.setCellValue(sheet, 35 + (isMaster ? -2 : 0),
                                                            k * 6 + 5,
                                                            hist.getScore() == null ? ""
                                                                    : String.valueOf(
                                                                            Math.round(hist.getScore())));
                                            }
                                        }
                                    }

                                }

                                // ?
                                if (1 == term) {
                                    Toolket.setCellValue(sheet,
                                            33 + (isMaster ? -2 : 0) + (nextPage ? nextPageRowIndex : 0),
                                            k * 6 + 2, totalPassCredits.toString());
                                    Toolket.setCellValue(sheet,
                                            34 + (isMaster ? -2 : 0) + (nextPage ? nextPageRowIndex : 0),
                                            k * 6 + 2, (passCreditsSum += totalPassCredits).toString());
                                } else {
                                    Toolket.setCellValue(sheet,
                                            33 + (isMaster ? -2 : 0) + (nextPage ? nextPageRowIndex : 0),
                                            k * 6 + 4, totalPassCredits.toString());
                                    Toolket.setCellValue(sheet,
                                            34 + (isMaster ? -2 : 0) + (nextPage ? nextPageRowIndex : 0),
                                            k * 6 + 4, (passCreditsSum += totalPassCredits).toString());
                                }
                            }
                            // k--;
                        }

                        gmark = new Gmark();
                        gmark.setSchoolYear(year);
                        gmark.setStudentNo(studentNo);
                        gmarks = cm.findGMarkBy(gmark);
                        if (!gmarks.isEmpty()) {
                            StringBuilder builder = new StringBuilder();
                            for (Gmark gm : gmarks)
                                builder.append(gm.getRemark()).append("\n      ");
                            int remarkCols = 0;
                            switch (k) {
                            case 0:
                                remarkCols = 0;
                                break;
                            case 1:
                                remarkCols = 6;
                                break;
                            case 2:
                                remarkCols = 12;
                                break;
                            case 3:
                                remarkCols = 18;
                                break;
                            }
                            Toolket.setCellValue(sheet, 36, remarkCols, "" + builder.toString());
                        }

                        if (rowOver) {
                            Toolket.setCellValue(sheet, 32, (k - 1) * 6 + 5, "");
                            Toolket.setCellValue(sheet, 35, k * 6 + 5,
                                    Toolket.getCellValue(sheet, 35, (k - 1) * 6 + 5));
                            Toolket.setCellValue(sheet, 35, (k - 1) * 6 + 5, "");
                        }

                        kk = k;
                        rowIndexx = rowIndex;
                        k++;
                        j++;
                        rowIndex = j >= 4 ? 49 : 6;
                        // rowIndexx = j >= 4 ? 49 : 6;
                        if (j == 4) {
                            // rowIndex = 49;
                            k = 0;
                            nextPage = true;
                        }
                    }

                }

                if (isIncludeThisTermScore) {
                    // Exception Students : 92148059, 92146011, 93148066,
                    // 9144037, 914C009, 96164016, 9214D093
                    AdminManager am = (AdminManager) getBean(ADMIN_MANAGER_BEAN_NAME);
                    Integer year = Integer.valueOf(am.findTermBy(PARAMETER_SCHOOL_YEAR));
                    boolean isSameYear = lastYear == year;
                    // 2010.04.02isNeedCheck1true?false
                    // ??false,??154D41931AD026???
                    // ?true
                    boolean isNeedCheck = true, isNeedCheck1 = true;
                    if (!isSameYear) {
                        isNeedCheck1 = false;
                        kk++;
                        if (nextPage) {
                            if (kk == 4)
                                kk = 0;
                        }

                        Toolket.setCellValue(sheet, (nextPage ? 45 : 2), kk * 6,
                                "    " + formYear[(nextPage ? k + 4 : k)] + "        ");
                        Toolket.setCellValue(sheet, (nextPage ? 46 : 3), kk * 6,
                                "" + year + "   9      " + (year + 1) + "   7  ");
                        rowIndexx = nextPage ? 49 : 6;
                    }

                    if (!nextPage && rowIndexx >= 32) {
                        // ?,:96164016
                        Toolket.setCellValue(sheet, (nextPage ? 45 : 2), (kk + 1) * 6,
                                "    " + formYear[(nextPage ? kk + 4 : kk)] + "        ");
                        Toolket.setCellValue(sheet, (nextPage ? 46 : 3), (kk + 1) * 6,
                                "" + year + "   9      " + (year + 1) + "   7  ");
                        rowIndexx = nextPage ? 49 : 6;
                        kk++;
                    }

                    isNeedCheck = true;
                    // passCreditsSum = 0.0F;
                    totalPassCredits = 0.0F;
                    selds = cm.findSeldByStudentNoAndTerm(studentNo, sterm);
                    // boolean isNewSchoolYear = "1".equals(sterm);
                    if (!selds.isEmpty()) {
                        for (Seld seld : selds) {
                            dtime = cm.findDtimeBy(seld.getDtimeOid());
                            csnos = cm.getCsnameBy(dtime.getCscode());
                            if (!csnos.isEmpty())
                                csno = (Csno) csnos.get(0);
                            Toolket.setCellValue(sheet, rowIndexx, kk * 6,
                                    StringUtils.substring(Toolket.getCourseOpt(dtime.getOpt()), 0, 1));
                            Toolket.setCellValue(sheet, rowIndexx, kk * 6 + 1,
                                    csno == null ? "" : csno.getChiName());
                            totalPassCredits += dtime.getCredit();
                            if ("1".equals(sterm)) {
                                Toolket.setCellValue(sheet, rowIndexx, kk * 6 + 2,
                                        dtime.getCredit().toString());
                                Toolket.setCellValue(sheet, rowIndexx++, kk * 6 + 3, String.valueOf(passScore));
                            } else {
                                Toolket.setCellValue(sheet, rowIndexx, kk * 6 + 4,
                                        dtime.getCredit().toString());
                                Toolket.setCellValue(sheet, rowIndexx++, kk * 6 + 5,
                                        String.valueOf(Math.round(passScore)));
                            }

                            if (isNeedCheck && isNeedCheck1 && !isSameYear && rowIndexx >= 32) {
                                isNeedCheck = false;
                                kk++;
                                if (kk % 4 == 0) {
                                    kk = 0;
                                    rowIndexx = nextPage ? 49 : 6;
                                }

                                // Toolket.setCellValue(sheet, 43, 0,
                                // "?"
                                // + title + "?");
                                // Toolket.setCellValue(sheet, 44, 1, ""
                                // + studentNo);
                                // Toolket.setCellValue(sheet, 44, 7, "??"
                                // + student.getStudentName());
                                // Toolket
                                // .setCellValue(
                                // sheet,
                                // 44,
                                // 9,
                                // ""
                                // + (isMaster ? Toolket
                                // .getMasterDepartName(departClass)
                                // : Toolket
                                // .getDepartName(departClass))
                                // + (isDoubleMajor
                                // || isAssist ? "("
                                // + student
                                // .getExtraStatus()
                                // + ":"
                                // + student
                                // .getExtraDept()
                                // + ")"
                                // : ""));
                                // Toolket.setCellValue(sheet, 44, 19,
                                // ""
                                // + student.getIdno());
                                Toolket.setCellValue(sheet, (nextPage ? 45 : 2), kk * 6,
                                        "    " + formYear[(nextPage ? kk + 4 : kk)] + "        ");
                                Toolket.setCellValue(sheet, (nextPage ? 46 : 3), kk * 6,
                                        "" + year + "   9      " + (year + 1) + "   7  ");
                                // rowIndexx = 6;
                                // kk++;
                            }
                        }

                        passCreditsSum += totalPassCredits;
                        if ("1".equals(sterm)) {
                            Toolket.setCellValue(sheet,
                                    (nextPage && j >= 4 && rowIndexx >= 49 ? 76 : 33) + (isMaster ? -2 : 0),
                                    kk * 6 + 2, totalPassCredits.toString());
                            Toolket.setCellValue(sheet,
                                    (nextPage && j >= 4 && rowIndexx >= 49 ? 77 : 34) + (isMaster ? -2 : 0),
                                    kk * 6 + 2, passCreditsSum.toString());
                        } else {
                            Toolket.setCellValue(sheet,
                                    (nextPage && j >= 4 && rowIndexx >= 49 ? 76 : 33) + (isMaster ? -2 : 0),
                                    kk * 6 + 4, totalPassCredits.toString());
                            Toolket.setCellValue(sheet,
                                    (nextPage && j >= 4 && rowIndexx >= 49 ? 77 : 34) + (isMaster ? -2 : 0),
                                    kk * 6 + 4, passCreditsSum.toString());
                        }

                        gmark = new Gmark();
                        gmark.setSchoolYear(Short.valueOf(year.toString()));
                        gmark.setStudentNo(studentNo);
                        gmarks = cm.findGMarkBy(gmark);
                        if (!gmarks.isEmpty()) {
                            StringBuilder builder = new StringBuilder();
                            for (Gmark gm : gmarks)
                                builder.append(gm.getRemark()).append("\n      ");
                            int remarkCols = 0;
                            switch (k) {
                            case 0:
                                remarkCols = 0;
                                break;
                            case 1:
                                remarkCols = 6;
                                break;
                            case 2:
                                remarkCols = 12;
                                break;
                            case 3:
                                remarkCols = 18;
                                break;
                            }
                            Toolket.setCellValue(sheet, 36, remarkCols, "" + builder.toString());
                        }

                        String[] excluded = { "15", "64", "54", "A4", "B4" };
                        boolean hasInclude = ArrayUtils.contains(excluded,
                                StringUtils.substring(departClass, 1, 3));
                        if (!isDelay && !hasInclude && rowIndexx <= 42)
                            Toolket.removeRow(sheet, 43, 45);
                    }
                } else {
                    String[] excluded = { "15", "64", "54", "A4", "B4" };
                    boolean hasInclude = ArrayUtils.contains(excluded,
                            StringUtils.substring(departClass, 1, 3));
                    if (!isDelay && !hasInclude && rowIndexx <= 42)
                        Toolket.removeRow(sheet, 43, 45);
                }
            }

            File tempDir = new File(context
                    .getRealPath("/WEB-INF/reports/temp/" + getUserCredential(session).getMember().getIdno()
                            + (new SimpleDateFormat("yyyyMMdd").format(new Date()))));
            if (!tempDir.exists())
                tempDir.mkdirs();

            File output = new File(tempDir, departClass + ".xls");
            FileOutputStream fos = new FileOutputStream(output);
            workbook.write(fos);
            fos.close();

            JasperReportUtils.printXlsToFrontEnd(response, output);
            output.delete();
            tempDir.delete();
            // return null;
        } else {
            ServletContext context = request.getSession().getServletContext();
            Map<String, String> parameters = new HashMap<String, String>();
            File image = new File(context.getRealPath("/pages/reports/2002chitS.jpg"));
            parameters.put("IMAGE", image.getAbsolutePath());
            byte[] bytes = JasperRunManager.runReportToPdf(JasperReportUtils.getNoResultReport(context),
                    parameters, new JREmptyDataSource());
            JasperReportUtils.printPdfToFrontEnd(response, bytes);
        }

    }
}

From source file:tw.edu.chit.struts.action.registration.ReportPrintAction.java

/**
 * ???96//from   w  w  w. ja v a  2 s  .co  m
 * 
 * @param mapping org.apache.struts.action.ActionMapping object
 * @param form org.apache.struts.action.ActionForm object
 * @param request request javax.servlet.http.HttpServletRequest object
 * @param response response javax.servlet.http.HttpServletResponse object
 * @param sterm 
 */
@SuppressWarnings("unchecked")
protected void printClassStudentsScoreHistory4CreditClass(ActionMapping mapping, DynaActionForm form,
        HttpServletRequest request, HttpServletResponse response, String sterm) throws Exception {

    HttpSession session = request.getSession(false);
    MemberManager mm = (MemberManager) getBean(IConstants.MEMBER_MANAGER_BEAN_NAME);
    CourseManager cm = (CourseManager) getBean(IConstants.COURSE_MANAGER_BEAN_NAME);
    ScoreManager sm = (ScoreManager) getBean(IConstants.SCORE_MANAGER_BEAN_NAME);
    StudAffairManager sam = (StudAffairManager) getBean(IConstants.STUD_AFFAIR_MANAGER_BEAN_NAME);
    boolean isIncludeThisTermScore = "true".equalsIgnoreCase(request.getParameter("tt"));

    // String year = cm.getNowBy("School_year");
    // String term = form.getString("sterm");
    String studentNo = null;
    Clazz clazz = null;
    ScoreHist scoreHist = null, hist = null;
    List<Student> students = null;
    List<Clazz> clazzes = sm.findClassBy(new Clazz(processClassInfo(form)),
            getUserCredential(session).getClassInChargeAry(), false);

    if (!clazzes.isEmpty() && clazzes.size() > 1) {
        ActionMessages messages = new ActionMessages();
        messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("", ""));
        saveMessages(request, messages);
        // return mapping.findForward(IConstants.ACTION_MAIN_NAME);
        ServletContext context = request.getSession().getServletContext();
        Map<String, String> parameters = new HashMap<String, String>();
        File image = new File(context.getRealPath("/pages/reports/2002chitS.jpg"));
        parameters.put("IMAGE", image.getAbsolutePath());
        byte[] bytes = JasperRunManager.runReportToPdf(JasperReportUtils.getNoResultReport(context), parameters,
                new JREmptyDataSource());
        JasperReportUtils.printPdfToFrontEnd(response, bytes);
    } else {

        clazz = clazzes.get(0);
        students = mm.findStudentsByClassNo(clazz.getClassNo());
        if (!students.isEmpty()) {

            ServletContext context = request.getSession().getServletContext();
            String[] excep = { "11G332" }; // ??+1
            String[] formYear = { "", "", "", "", "", "", "", "" };

            short firstYear = 0;
            short lastYear = 0;

            double justScore = 0.0D;

            int sheetIndex = 0;
            int k = 0, j = 0, rowIndex = 0, nextPageRowIndex = 0;
            int kk = 0, rowIndexx = 0;

            String departClass = clazz.getClassNo();
            String departCode = "", title = "", evgrType = "", historyDepartCode = "", opt = "", cscode = "";

            // ?70?
            float passScore = Toolket.getPassScoreByDepartClass(departClass);

            Graduate graduate = null;
            MasterData md = null;
            Just just = null;
            ScoreHist target = null;
            Dtime dtime = null;
            List csnos = null;
            Csno csno = null;
            Gmark gmark = null;

            Map<String, String> position = null;

            Float passCreditsSum = 0.0F;
            Float totalPassCredits = 0.0F;

            List<Seld> selds = null;
            List<ScoreHist> scoreHistList = null;
            List<Stavg> stavgs = null;
            List<Gmark> gmarks = null;

            boolean isOver = false; // (lastYear - firstYear + 1) > 4;
            boolean isDelay = Toolket.isDelayClass(departClass);
            boolean isSpringClass = false;
            // 
            boolean isDoubleMajor = false;
            boolean isAssist = false;
            // 9608???Show????,?Show'',?????Show
            boolean is96Entrance = false;
            boolean isMaster = Toolket.isMasterClass(departClass);
            boolean nextPage = false, hasPassRecord = false, rowOver = false;
            boolean isNotExemptAndMend = false; // ???
            boolean isExempt = false; // ???
            boolean isMend = false; // ??
            boolean isAppend = false; // ???
            boolean isNotSameDepartCode = false;

            int studentCounts = students.size();
            String fileName = "";

            DecimalFormat df = new DecimalFormat(",##0.0");

            File templateXLS = null;

            if (!isMaster) {

                if (studentCounts <= 30)
                    fileName = "ClassStudentsScoreHistoryOver30.xls";
                else if (studentCounts > 31 && studentCounts <= 40)
                    fileName = "ClassStudentsScoreHistoryOver40.xls";
                else if (studentCounts > 40 && studentCounts <= 45)
                    fileName = "ClassStudentsScoreHistoryOver45.xls";
                else if (studentCounts > 45 && studentCounts <= 50)
                    fileName = "ClassStudentsScoreHistoryOver50.xls";
                else if (studentCounts > 51 && studentCounts <= 55)
                    fileName = "ClassStudentsScoreHistoryOver55.xls";
                else
                    fileName = "ClassStudentsScoreHistoryOver60.xls";

                title = Toolket.getSchoolFormalName(departClass);
                if (isDelay) {
                    // Only 20 Sheets
                    templateXLS = new File(
                            context.getRealPath("/WEB-INF/reports/ClassStudentsScoreHistoryOver.xls"));
                } else {
                    templateXLS = new File(context.getRealPath("/WEB-INF/reports/" + fileName));
                }
            } else {

                if (studentCounts <= 15)
                    fileName = "ClassStudentsScoreHistoryMaster15.xls";
                else if (studentCounts > 15 && studentCounts <= 20)
                    fileName = "ClassStudentsScoreHistoryMaster20.xls";
                else
                    fileName = "ClassStudentsScoreHistoryMaster25.xls";

                String masterId = StringUtils.substring(departClass, 1, 3);
                if ("1G".equals(masterId))
                    title = "?";
                else
                    title = "??";
                templateXLS = new File(context.getRealPath("/WEB-INF/reports/" + fileName));
            }

            HSSFWorkbook workbook = Toolket.getHSSFWorkbook(templateXLS);

            HSSFFont colorFont = workbook.createFont();
            colorFont.setColor(HSSFColor.RED.index);
            colorFont.setFontHeightInPoints((short) 12);
            colorFont.setFontName("Arial Unicode MS");

            HSSFFont fontSize12 = workbook.createFont();
            fontSize12.setFontHeightInPoints((short) 12);
            fontSize12.setFontName("Arial Unicode MS");
            HSSFSheet sheet = null;

            HSSFFont fontSize10 = workbook.createFont();
            fontSize10.setFontHeightInPoints((short) 10);
            fontSize10.setFontName("Arial Unicode MS");

            for (Student student : students) {

                studentNo = student.getStudentNo();
                sheet = workbook.getSheetAt(sheetIndex);
                workbook.setSheetName(sheetIndex++, studentNo.toUpperCase());
                if (student == null) {
                    graduate = mm.findGraduateByStudentNo(studentNo);
                    student = new Student();
                    BeanUtils.copyProperties(student, graduate);
                }

                // 
                isDoubleMajor = "".equals(student.getExtraStatus());
                isAssist = "".equals(student.getExtraStatus());

                // departClass = student.getDepartClass();
                // 9608???Show????,?Show'',?????Show
                is96Entrance = student.getEntrance() == null ? false : student.getEntrance() >= (short) 9608;
                scoreHist = new ScoreHist(studentNo);
                scoreHistList = sm.findScoreHistBy(scoreHist);
                if (scoreHistList.isEmpty()) {
                    ActionMessages messages = new ActionMessages();
                    messages.add(ActionMessages.GLOBAL_MESSAGE,
                            new ActionMessage("Course.messageN1", "?"));
                    saveErrors(request, messages);
                    log.error("No Score History... " + studentNo);
                    sheetIndex--;
                    continue;
                } else {

                    firstYear = Short.parseShort(scoreHistList.get(0).getSchoolYear().toString());
                    lastYear = Short
                            .parseShort(scoreHistList.get(scoreHistList.size() - 1).getSchoolYear().toString());
                    isOver = (lastYear - firstYear + 1) > 4;
                    if (isOver)
                        ; // log.error("It is Over... " + studentNo);
                    departCode = "";

                    Toolket.setCellValue(sheet, 0, 0, "?" + title + "?");
                    Toolket.setCellValue(sheet, 1, 1, "" + studentNo);
                    Toolket.setCellValue(sheet, 1, 7, "??" + student.getStudentName());
                    Toolket.setCellValue(sheet, 1, 9, ""
                            + (isMaster ? Toolket.getMasterDepartName(departClass)
                                    : Toolket.getDepartName(departClass))
                            + (isDoubleMajor || isAssist
                                    ? "(" + student.getExtraStatus() + ":" + student.getExtraDept() + ")"
                                    : ""));
                    Toolket.setCellValue(sheet, 1, 19, "" + student.getIdno());

                    // ?2,?code
                    Toolket.setCellValue(sheet, 43, 0, "?" + title + "?");
                    Toolket.setCellValue(sheet, 44, 1, "" + studentNo);
                    Toolket.setCellValue(sheet, 44, 7, "??" + student.getStudentName());
                    Toolket.setCellValue(sheet, 44, 9, ""
                            + (isMaster ? Toolket.getMasterDepartName(departClass)
                                    : Toolket.getDepartName(departClass))
                            + (isDoubleMajor || isAssist
                                    ? "(" + student.getExtraStatus() + ":" + student.getExtraDept() + ")"
                                    : ""));
                    Toolket.setCellValue(sheet, 44, 19, "" + student.getIdno());

                    if (isDelay) {
                        Toolket.setCellValue(sheet, 43, 0,
                                "?" + title + "?");
                        Toolket.setCellValue(sheet, 44, 1, "" + studentNo);
                        Toolket.setCellValue(sheet, 44, 7, "??" + student.getStudentName());
                        Toolket.setCellValue(sheet, 44, 9, ""
                                + (isMaster ? Toolket.getMasterDepartName(departClass)
                                        : Toolket.getDepartName(departClass))
                                + (isDoubleMajor || isAssist
                                        ? "(" + student.getExtraStatus() + ":" + student.getExtraDept() + ")"
                                        : ""));
                        Toolket.setCellValue(sheet, 44, 19, "" + student.getIdno());
                    }

                    if (isDoubleMajor || isAssist) {
                        Toolket.setCellValue(sheet, 42, 0,
                                "  => *:??   #:   &:   ");
                        departCode = StringUtils.substring(student.getDepartClass(), 3, 4);
                    }

                    if (isOver) {
                        Toolket.setCellValue(sheet, 43, 0,
                                "?" + title + "?");
                        Toolket.setCellValue(sheet, 44, 1, "" + studentNo);
                        Toolket.setCellValue(sheet, 44, 7, "??" + student.getStudentName());
                        Toolket.setCellValue(sheet, 44, 9,
                                "" + (isMaster ? Toolket.getMasterDepartName(departClass)
                                        : Toolket.getDepartName(departClass)));
                        Toolket.setCellValue(sheet, 44, 19, "" + student.getIdno());
                        if (isDoubleMajor || isAssist)
                            Toolket.setCellValue(sheet, 85, 0,
                                    "  => *:??   #:   &:   ");
                    }

                    if (isMaster) {
                        md = sm.findMasterByStudentNo(studentNo);
                        if (md != null) {
                            Toolket.setCellValue(sheet, 38, 0, "" + md.getThesesChiname());
                            Toolket.setCellValue(sheet, 39, 0, "          " + md.getThesesEngname());
                            Toolket.setCellValue(sheet, 38, 17, md.getRemark());
                            Toolket.setCellValue(sheet, 40, 0, "??" + md.getThesesScore());
                            Toolket.setCellValue(sheet, 40, 4,
                                    "??(50%)" + md.getThesesScore() / 2);
                            Toolket.setCellValue(sheet, 40, 8, "??" + md.getEvgr1Score());
                            Toolket.setCellValue(sheet, 40, 14,
                                    "??(50%)" + md.getEvgr1Score() / 2);
                            Toolket.setCellValue(sheet, 40, 19, "?" + md.getGraduateScore());
                        }
                    }

                    if (Arrays.binarySearch(excep, departClass) >= 0) {
                        lastYear++;
                        isSpringClass = true;
                        Toolket.setCellValue(sheet, 39, 17, "" + (lastYear + 1) + ".1");
                    }

                    k = 0;
                    j = 0;
                    rowIndex = 6;
                    nextPageRowIndex = 43;
                    passCreditsSum = 0.0F;
                    nextPage = false;
                    hasPassRecord = false;
                    rowOver = false;
                    // List<Stavg> stavgs = null;
                    // Just just = null;
                    // String[] formYear = { "", "", "", "", "", "",
                    // "", "" };

                    // ?Show
                    scoreHist.setEvgrType("6");
                    scoreHistList = sm.findScoreHistBy(scoreHist);
                    Float creditSum1 = 0.0F, creditSum2 = 0.0F;
                    String courseName = null;
                    if (!scoreHistList.isEmpty()) {

                        rowIndex = 6;
                        // position = new HashMap<String, String>();
                        // position1 = new HashMap<String, String>();

                        Toolket.setCellValue(sheet, 2 + (nextPage ? nextPageRowIndex : 0), k * 6,
                                "  ?  ?  ");
                        for (int i = 0; i < scoreHistList.size(); i++) {
                            hist = scoreHistList.get(i);
                            Toolket.setCellValue(sheet, rowIndex, 0,
                                    StringUtils.substring(Toolket.getCourseOpt(hist.getOpt()), 0, 1));
                            courseName = cm.findCourseInfoByCscode(hist.getCscode()) == null
                                    ? "??"
                                    : cm.findCourseInfoByCscode(hist.getCscode()).getChiName().trim();
                            if (courseName.length() > 10)
                                Toolket.setCellValue(workbook, sheet, rowIndex, 1, courseName, fontSize10,
                                        HSSFCellStyle.ALIGN_LEFT, true, null);
                            else
                                Toolket.setCellValue(sheet, rowIndex, 1, courseName);

                            if (hist.getSchoolTerm().equals("1")) {
                                Toolket.setCellValue(sheet, rowIndex, 2, hist.getCredit().toString());
                                creditSum1 += hist.getCredit();
                                Toolket.setCellValue(sheet, rowIndex, 3, "");
                            } else {
                                Toolket.setCellValue(sheet, rowIndex, 4, hist.getCredit().toString());
                                creditSum2 += hist.getCredit();
                                Toolket.setCellValue(sheet, rowIndex, 5, "");
                            }
                            rowIndex++;
                        }
                        Toolket.setCellValue(sheet, 33, 2, String.valueOf(creditSum1));
                        Toolket.setCellValue(sheet, 33, 4, String.valueOf(creditSum2));
                        Toolket.setCellValue(sheet, 34, 2, String.valueOf(creditSum1));
                        Toolket.setCellValue(sheet, 34, 4, String.valueOf(creditSum1 + creditSum2));
                    }

                    rowIndex = 6;
                    passCreditsSum = creditSum1 + creditSum2;
                    scoreHist.setEvgrType(null); // ???
                    k = 1; // ?2
                    for (short year = firstYear; year <= lastYear; year++) {
                        // ???9316D078
                        // ???
                        scoreHist.setSchoolYear(year);
                        scoreHist.setSchoolTerm("1");
                        hasPassRecord = !sm.findScoreHistBy(scoreHist).isEmpty();
                        if (!hasPassRecord) {
                            scoreHist.setSchoolTerm("2");
                            hasPassRecord = !sm.findScoreHistBy(scoreHist).isEmpty();
                            if (!hasPassRecord)
                                continue;
                        }

                        if (isSpringClass && year == lastYear) {
                            just = sam.findJustByStudentNo(studentNo);
                            justScore = 0.0D;
                            if (just == null || just.getTotalScore() == 0.0D) {
                                target = new ScoreHist(studentNo);
                                target.setSchoolYear(new Short(year));
                                target.setSchoolTerm("2");
                                target.setCscode("99999");
                                scoreHistList = sm.findScoreHistBy(target);
                                if (!scoreHistList.isEmpty()) {
                                    scoreHist = sm.findScoreHistBy(scoreHist).get(0);
                                    justScore = scoreHist.getScore();
                                }
                            } else
                                justScore = just.getTotalScore();

                            Toolket.setCellValue(sheet, 35 + (isMaster ? -2 : 0), k * 6 + 3,
                                    justScore == 0.0D ? "" : String.valueOf(Math.round(justScore)));
                        }

                        if (rowOver) {
                            Toolket.setCellValue(workbook, sheet, 2 + (nextPage ? nextPageRowIndex : 0), k * 6,
                                    "    " + formYear[(nextPage ? k + 4 : k)] + "        ", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, null);
                        } else
                            Toolket.setCellValue(sheet, 2 + (nextPage ? nextPageRowIndex : 0), k * 6,
                                    "    " + formYear[(nextPage ? k + 4 : k)] + "        ");
                        position = new HashMap<String, String>();
                        for (int term = 1; term <= 2; term++) {
                            scoreHist.setSchoolYear(year);
                            scoreHist.setSchoolTerm(String.valueOf(term));
                            // scoreHist.setEvgrType("1"); // ?
                            scoreHistList = sm.findScoreHistBy(scoreHist);
                            if (!scoreHistList.isEmpty()) {
                                Toolket.setCellValue(sheet, 3 + (nextPage ? nextPageRowIndex : 0), k * 6,
                                        "" + year + "   9      " + (year + 1) + "   7  ");
                                stavgs = sm.findStavgBy(new Stavg(studentNo, year, String.valueOf(term)));
                                totalPassCredits = 0.0F;
                                // for (ScoreHist hist : scoreHistList) {
                                // i != scoreHistList.size() -
                                // 1???,??
                                for (int i = 0; i < scoreHistList.size(); i++) {

                                    hist = scoreHistList.get(i);
                                    if (hist.getEvgrType().equals("6"))
                                        continue; // ???

                                    if (rowIndex == 32 && i != scoreHistList.size() - 1) {
                                        rowIndex = 6;
                                        k++;
                                        Toolket.setCellValue(sheet, 2 + (nextPage ? nextPageRowIndex : 0),
                                                k * 6, "    " + formYear[k - 1] + "        ");
                                        Toolket.setCellValue(sheet, 3 + (nextPage ? nextPageRowIndex : 0),
                                                k * 6, "" + year + "   9      " + (year + 1)
                                                        + "   7  ");
                                        rowOver = true;
                                    }

                                    evgrType = hist.getEvgrType();
                                    isNotExemptAndMend = !"6".equals(evgrType) && !"5".equals(evgrType); // ???
                                    isExempt = "6".equals(evgrType); // ???
                                    isMend = "5".equals(evgrType); // ??
                                    isAppend = "2".equals(evgrType); // ???
                                    historyDepartCode = StringUtils.isBlank(hist.getStdepartClass()) ? ""
                                            : StringUtils.substring(hist.getStdepartClass(), 3, 4);
                                    isNotSameDepartCode = !departCode.equals(historyDepartCode)
                                            && !historyDepartCode.equals("0");
                                    opt = "";
                                    if ("3".equals(evgrType))
                                        opt = "";
                                    else
                                        opt = StringUtils.substring(Toolket.getCourseOpt(hist.getOpt()), 0, 1)
                                                + (isAppend ? ""
                                                        : (isMend ? ""
                                                                : (!isNotExemptAndMend ? "" : "")));

                                    cscode = hist.getCscode();
                                    if ("GA035".equals(cscode) || "".equals("GB033"))
                                        continue; // 2?

                                    if (!"99999".equals(cscode)) { // ?
                                        courseName = cm.findCourseInfoByCscode(cscode) == null
                                                ? "??"
                                                : cm.findCourseInfoByCscode(cscode).getChiName().trim();
                                        Float credit = hist.getCredit();
                                        Float score = hist.getScore();
                                        boolean pass = (score == null ? 0.0F : score) >= passScore;
                                        // ((?&&?)||?)&&?
                                        if (((isNotExemptAndMend && pass) || isExempt) && !isMend)
                                            // if (!isNotExemptAndMend ||
                                            // !isMend ||
                                            // bFlag1)
                                            // if (!isMend && bFlag1)
                                            if (isMaster && "G".equalsIgnoreCase(
                                                    StringUtils.substring(hist.getStdepartClass(), 2, 3))) {
                                                // ???,?
                                                totalPassCredits += credit;
                                            } else
                                                totalPassCredits += credit;

                                        if (1 == term) {
                                            if (opt.length() == 1 || is96Entrance)
                                                Toolket.setCellValue(sheet, rowIndex, k * 6,
                                                        (is96Entrance ? StringUtils.substring(opt, 0, 1)
                                                                : opt));
                                            else
                                                Toolket.setCellValue(workbook, sheet, rowIndex, k * 6, opt,
                                                        fontSize12, HSSFCellStyle.ALIGN_CENTER, true, null);
                                            Toolket.setCellValue(sheet, rowIndex, k * 6 + 1, courseName);
                                            position.put(courseName, String.valueOf(rowIndex));

                                            if (isNotExemptAndMend) {
                                                // ?
                                                String creditStr = credit.toString();
                                                if (!isMend && !isExempt)
                                                    creditStr = pass ? creditStr : creditStr + "*";
                                                if (isDoubleMajor && isNotSameDepartCode)
                                                    creditStr += "&";
                                                if (isAssist && isNotSameDepartCode)
                                                    creditStr += "#";
                                                if (StringUtils.indexOf(creditStr,
                                                        "*") == StringUtils.INDEX_NOT_FOUND)
                                                    Toolket.setCellValue(sheet, rowIndex, k * 6 + 2, creditStr);
                                                else
                                                    Toolket.setCellValue(workbook, sheet, rowIndex, k * 6 + 2,
                                                            creditStr, colorFont, HSSFCellStyle.ALIGN_CENTER,
                                                            true, null);
                                                // ??
                                                Toolket.setCellValue(sheet, rowIndex++, k * 6 + 3, (isMend
                                                        ? ""
                                                        : (score == null ? ""
                                                                : StringUtils.substringBefore(score.toString(),
                                                                        "."))));
                                                // ??
                                                Toolket.setCellValue(sheet,
                                                        32 + (isMaster ? -2 : 0)
                                                                + (nextPage ? nextPageRowIndex : 0),
                                                        k * 6 + 3,
                                                        (stavgs.isEmpty() ? ""
                                                                : df.format(
                                                                        stavgs.get(0).getScore() + 0.001D)));
                                            } else {
                                                // ?
                                                String creditStr = credit.toString();
                                                Toolket.setCellValue(sheet, rowIndex, k * 6 + 2, creditStr);
                                                if (is96Entrance)
                                                    Toolket.setCellValue(sheet, rowIndex++, k * 6 + 3,
                                                            (isMend ? "" : ""));
                                                else {
                                                    // ??
                                                    Toolket.setCellValue(sheet,
                                                            32 + (isMaster ? -2 : 0)
                                                                    + (nextPage ? nextPageRowIndex : 0),
                                                            k * 6 + 3,
                                                            (stavgs.isEmpty() ? ""
                                                                    : df.format(stavgs.get(0).getScore()
                                                                            + 0.001D)));
                                                    Toolket.setCellValue(sheet, rowIndex++, k * 6 + 3,
                                                            score == null ? ""
                                                                    : StringUtils.substringBefore(
                                                                            score.toString(), "."));
                                                }
                                            }
                                        } else {

                                            String endString = StringUtils.substring(courseName,
                                                    courseName.length() - 1);
                                            boolean duplicatedCourseName = "".equals(endString);
                                            boolean duplicatedCourseName1 = "".equals(endString);
                                            boolean duplicatedCourseName2 = "".equals(endString);

                                            if (duplicatedCourseName || duplicatedCourseName1
                                                    || duplicatedCourseName2) {

                                                String courseIndex = StringUtils.substring(courseName, 0,
                                                        courseName.length() - 1);
                                                String row = "", maybeSameCourseNameOptInfo = "";
                                                if (duplicatedCourseName) {
                                                    row = position.get(courseIndex + "");
                                                    if (row != null)
                                                        maybeSameCourseNameOptInfo = Toolket.getCellValue(sheet,
                                                                Integer.parseInt(row),
                                                                (rowOver ? k - 1 : k) * 6);
                                                } else if (duplicatedCourseName1) {
                                                    row = position.get(courseIndex + "");
                                                    if (row != null)
                                                        maybeSameCourseNameOptInfo = Toolket.getCellValue(sheet,
                                                                Integer.parseInt(row),
                                                                (rowOver ? k - 1 : k) * 6);
                                                } else if (duplicatedCourseName2) {
                                                    row = position.get(courseIndex + "");
                                                    if (row != null)
                                                        maybeSameCourseNameOptInfo = Toolket.getCellValue(sheet,
                                                                Integer.parseInt(row),
                                                                (rowOver ? k - 1 : k) * 6);
                                                }

                                                // ?????
                                                boolean isAllowMerge = (StringUtils.contains(opt, "")
                                                        && StringUtils.contains(maybeSameCourseNameOptInfo,
                                                                ""))
                                                        || (StringUtils.contains(opt, "?") && StringUtils
                                                                .contains(maybeSameCourseNameOptInfo, "?"));
                                                if (row != null && isAllowMerge) {
                                                    int rowNum = Integer.parseInt(row);
                                                    Toolket.setCellValue(sheet, rowNum,
                                                            (rowOver ? k - 1 : k) * 6 + 1,
                                                            Toolket.getCellValue(sheet, rowNum,
                                                                    (rowOver ? k - 1 : k) * 6 + 1)
                                                                    + "?"
                                                                    + (duplicatedCourseName ? ""
                                                                            : duplicatedCourseName1 ? ""
                                                                                    : ""));
                                                    if (isNotExemptAndMend) {
                                                        // ?
                                                        String creditStr = credit.toString();
                                                        if (!isMend && !isExempt)
                                                            creditStr = pass ? creditStr : creditStr + "*";
                                                        if (isDoubleMajor && isNotSameDepartCode)
                                                            creditStr += "&";
                                                        if (isAssist && isNotSameDepartCode)
                                                            creditStr += "#";
                                                        if (StringUtils.indexOf(creditStr,
                                                                "*") == StringUtils.INDEX_NOT_FOUND)
                                                            Toolket.setCellValue(sheet, rowNum,
                                                                    (rowOver ? k - 1 : k) * 6 + 4, creditStr);
                                                        else
                                                            Toolket.setCellValue(workbook, sheet, rowNum,
                                                                    (rowOver ? k - 1 : k) * 6 + 4, creditStr,
                                                                    colorFont, HSSFCellStyle.ALIGN_CENTER, true,
                                                                    null);

                                                        Toolket.setCellValue(sheet, rowNum,
                                                                (rowOver ? k - 1 : k) * 6 + 5,
                                                                (isMend ? ""
                                                                        : (score == null ? ""
                                                                                : StringUtils.substringBefore(
                                                                                        score.toString(),
                                                                                        "."))));
                                                        Toolket.setCellValue(sheet,
                                                                32 + (isMaster ? -2 : 0)
                                                                        + (nextPage ? nextPageRowIndex : 0),
                                                                (rowOver ? k - 1 : k) * 6 + 5,
                                                                (stavgs.isEmpty() ? ""
                                                                        : df.format(stavgs.get(0).getScore()
                                                                                + 0.001D)));
                                                    } else {
                                                        // ?
                                                        String creditStr = credit.toString();
                                                        Toolket.setCellValue(sheet, rowNum,
                                                                (rowOver ? k - 1 : k) * 6 + 4, creditStr);
                                                        if (is96Entrance)
                                                            Toolket.setCellValue(sheet, rowNum,
                                                                    (rowOver ? k - 1 : k) * 6 + 5,
                                                                    (isMend ? "" : ""));
                                                        else {
                                                            Toolket.setCellValue(sheet,
                                                                    32 + (isMaster ? -2 : 0),
                                                                    (rowOver ? k - 1 : k) * 6 + 5,
                                                                    (stavgs.isEmpty() ? ""
                                                                            : df.format(stavgs.get(0).getScore()
                                                                                    + 0.001D)));
                                                            Toolket.setCellValue(sheet, rowNum,
                                                                    (rowOver ? k - 1 : k) * 6 + 5,
                                                                    score == null ? ""
                                                                            : StringUtils.substringBefore(
                                                                                    score.toString(), "."));
                                                        }
                                                    }
                                                } else {
                                                    if (opt.length() == 1 || is96Entrance)
                                                        Toolket.setCellValue(sheet, rowIndex, k * 6,
                                                                (is96Entrance ? StringUtils.substring(opt, 0, 1)
                                                                        : opt));
                                                    else
                                                        Toolket.setCellValue(workbook, sheet, rowIndex, k * 6,
                                                                opt, fontSize12, HSSFCellStyle.ALIGN_CENTER,
                                                                true, null);
                                                    Toolket.setCellValue(sheet, rowIndex, k * 6 + 1,
                                                            courseName);
                                                    position.put(courseName, String.valueOf(rowIndex));

                                                    if (isNotExemptAndMend) {
                                                        // ?
                                                        String creditStr = credit.toString();
                                                        if (!isMend && !isExempt)
                                                            creditStr = pass ? creditStr : creditStr + "*";
                                                        if (isDoubleMajor && isNotSameDepartCode)
                                                            creditStr += "&";
                                                        if (isAssist && isNotSameDepartCode)
                                                            creditStr += "#";
                                                        if (StringUtils.indexOf(creditStr,
                                                                "*") == StringUtils.INDEX_NOT_FOUND)
                                                            Toolket.setCellValue(sheet, rowIndex, k * 6 + 4,
                                                                    creditStr);
                                                        else
                                                            Toolket.setCellValue(workbook, sheet, rowIndex,
                                                                    k * 6 + 4, creditStr, colorFont,
                                                                    HSSFCellStyle.ALIGN_CENTER, true, null);

                                                        // ??
                                                        Toolket.setCellValue(sheet, rowIndex++, k * 6 + 5,
                                                                (isMend ? ""
                                                                        : (score == null ? ""
                                                                                : StringUtils.substringBefore(
                                                                                        score.toString(),
                                                                                        "."))));
                                                        // ??
                                                        Toolket.setCellValue(sheet, 32 + (isMaster ? -2 : 0),
                                                                k * 6 + 5,
                                                                (stavgs.isEmpty() ? ""
                                                                        : df.format(stavgs.get(0).getScore()
                                                                                + 0.001D)));
                                                    } else {
                                                        // ?
                                                        String creditStr = credit.toString();
                                                        Toolket.setCellValue(sheet, rowIndex, k * 6 + 4,
                                                                creditStr);
                                                        if (is96Entrance)
                                                            Toolket.setCellValue(sheet, rowIndex++, k * 6 + 5,
                                                                    (isMend ? "" : ""));
                                                        else {
                                                            // ??
                                                            Toolket.setCellValue(sheet,
                                                                    32 + (isMaster ? -2 : 0), k * 6 + 5,
                                                                    (stavgs.isEmpty() ? ""
                                                                            : df.format(stavgs.get(0).getScore()
                                                                                    + 0.001D)));
                                                            Toolket.setCellValue(sheet, rowIndex++, k * 6 + 5,
                                                                    score == null ? ""
                                                                            : StringUtils.substringBefore(
                                                                                    score.toString(), "."));
                                                        }
                                                    }
                                                }
                                            } else {
                                                if (opt.length() == 1 || is96Entrance)
                                                    Toolket.setCellValue(sheet, rowIndex, k * 6,
                                                            (is96Entrance ? StringUtils.substring(opt, 0, 1)
                                                                    : opt));
                                                else
                                                    Toolket.setCellValue(workbook, sheet, rowIndex, k * 6, opt,
                                                            fontSize12, HSSFCellStyle.ALIGN_CENTER, true, null);
                                                Toolket.setCellValue(sheet, rowIndex, k * 6 + 1, courseName);
                                                // ?
                                                String creditStr = credit.toString();
                                                if (!isMend && !isExempt)
                                                    creditStr = pass ? creditStr : creditStr + "*";
                                                if (isDoubleMajor && isNotSameDepartCode)
                                                    creditStr += "&";
                                                if (isAssist && isNotSameDepartCode)
                                                    creditStr += "#";
                                                if (StringUtils.indexOf(creditStr,
                                                        "*") == StringUtils.INDEX_NOT_FOUND)
                                                    Toolket.setCellValue(sheet, rowIndex, k * 6 + 4, creditStr);
                                                else
                                                    Toolket.setCellValue(workbook, sheet, rowIndex, k * 6 + 4,
                                                            creditStr, colorFont, HSSFCellStyle.ALIGN_CENTER,
                                                            true, null);

                                                if (isNotExemptAndMend) {
                                                    Toolket.setCellValue(sheet, rowIndex++, k * 6 + 5,
                                                            (isMend ? ""
                                                                    : (score == null ? ""
                                                                            : StringUtils.substringBefore(
                                                                                    score.toString(), "."))));
                                                    Toolket.setCellValue(sheet, 32 + (isMaster ? -2 : 0),
                                                            k * 6 + 5,
                                                            (stavgs.isEmpty() ? ""
                                                                    : df.format(stavgs.get(0).getScore()
                                                                            + 0.001D)));
                                                } else {
                                                    if (is96Entrance)
                                                        Toolket.setCellValue(sheet, rowIndex++, k * 6 + 5,
                                                                (isMend ? "" : ""));
                                                    else {
                                                        Toolket.setCellValue(sheet, 32 + (isMaster ? -2 : 0),
                                                                k * 6 + 5,
                                                                (stavgs.isEmpty() ? ""
                                                                        : df.format(stavgs.get(0).getScore()
                                                                                + 0.001D)));
                                                        Toolket.setCellValue(sheet, rowIndex++, k * 6 + 5,
                                                                score == null ? ""
                                                                        : StringUtils.substringBefore(
                                                                                score.toString(), "."));
                                                    }
                                                }
                                            }

                                        }
                                    } else {
                                        // ?
                                        if (1 == term) {
                                            if (isNotExemptAndMend) {
                                                Toolket.setCellValue(sheet,
                                                        35 + (isMaster ? -2 : 0)
                                                                + (nextPage ? nextPageRowIndex : 0),
                                                        k * 6 + 3, String.valueOf(Math.round(hist.getScore())));
                                            } else {
                                                if (!is96Entrance)
                                                    Toolket.setCellValue(sheet, 35 + (isMaster ? -2 : 0),
                                                            k * 6 + 3,
                                                            hist.getScore() == null ? ""
                                                                    : String.valueOf(
                                                                            Math.round((hist.getScore()))));
                                            }
                                        } else {
                                            if (isNotExemptAndMend) {
                                                Toolket.setCellValue(sheet,
                                                        35 + (isMaster ? -2 : 0)
                                                                + (nextPage ? nextPageRowIndex : 0),
                                                        k * 6 + 5, String.valueOf(Math.round(hist.getScore())));
                                            } else {
                                                if (!is96Entrance)
                                                    Toolket.setCellValue(sheet, 35 + (isMaster ? -2 : 0),
                                                            k * 6 + 5,
                                                            hist.getScore() == null ? ""
                                                                    : String.valueOf(
                                                                            Math.round(hist.getScore())));
                                            }
                                        }
                                    }

                                }

                                // ?
                                if (1 == term) {
                                    Toolket.setCellValue(sheet,
                                            33 + (isMaster ? -2 : 0) + (nextPage ? nextPageRowIndex : 0),
                                            k * 6 + 2, totalPassCredits.toString());
                                    Toolket.setCellValue(sheet,
                                            34 + (isMaster ? -2 : 0) + (nextPage ? nextPageRowIndex : 0),
                                            k * 6 + 2, (passCreditsSum += totalPassCredits).toString());
                                } else {
                                    Toolket.setCellValue(sheet,
                                            33 + (isMaster ? -2 : 0) + (nextPage ? nextPageRowIndex : 0),
                                            k * 6 + 4, totalPassCredits.toString());
                                    Toolket.setCellValue(sheet,
                                            34 + (isMaster ? -2 : 0) + (nextPage ? nextPageRowIndex : 0),
                                            k * 6 + 4, (passCreditsSum += totalPassCredits).toString());
                                }
                            }
                            // k--;
                        }

                        gmark = new Gmark();
                        gmark.setSchoolYear(year);
                        gmark.setStudentNo(studentNo);
                        gmarks = cm.findGMarkBy(gmark);
                        if (!gmarks.isEmpty()) {
                            StringBuilder builder = new StringBuilder();
                            for (Gmark gm : gmarks)
                                builder.append(gm.getRemark()).append("\n      ");
                            int remarkCols = 0;
                            switch (k) {
                            case 0:
                                remarkCols = 0;
                                break;
                            case 1:
                                remarkCols = 6;
                                break;
                            case 2:
                                remarkCols = 12;
                                break;
                            case 3:
                                remarkCols = 18;
                                break;
                            }
                            Toolket.setCellValue(sheet, 36, remarkCols, "" + builder.toString());
                        }

                        if (rowOver) {
                            Toolket.setCellValue(sheet, 32, (k - 1) * 6 + 5, "");
                            Toolket.setCellValue(sheet, 35, k * 6 + 5,
                                    Toolket.getCellValue(sheet, 35, (k - 1) * 6 + 5));
                            Toolket.setCellValue(sheet, 35, (k - 1) * 6 + 5, "");
                        }

                        kk = k;
                        rowIndexx = rowIndex;
                        k++;
                        j++;
                        rowIndex = j >= 4 ? 49 : 6;
                        // rowIndexx = j >= 4 ? 49 : 6;
                        if (j == 4) {
                            // rowIndex = 49;
                            k = 0;
                            nextPage = true;
                        }
                    }

                }

                if (isIncludeThisTermScore) {
                    // Exception Students : 92148059, 92146011, 93148066,
                    // 9144037, 914C009, 96164016, 9214D093
                    AdminManager am = (AdminManager) getBean(ADMIN_MANAGER_BEAN_NAME);
                    Integer year = Integer.valueOf(am.findTermBy(PARAMETER_SCHOOL_YEAR));
                    boolean isSameYear = lastYear == year;
                    boolean isNeedCheck = true, isNeedCheck1 = true;
                    if (!isSameYear) {
                        isNeedCheck1 = false;
                        kk++;
                        if (nextPage) {
                            if (kk == 4)
                                kk = 0;
                        }

                        Toolket.setCellValue(sheet, (nextPage ? 45 : 2), kk * 6,
                                "    " + formYear[(nextPage ? k + 4 : k)] + "        ");
                        Toolket.setCellValue(sheet, (nextPage ? 46 : 3), kk * 6,
                                "" + year + "   9      " + (year + 1) + "   7  ");
                        rowIndexx = nextPage ? 49 : 6;
                    }

                    if (!nextPage && rowIndexx >= 32) {
                        // ?,:96164016
                        Toolket.setCellValue(sheet, (nextPage ? 45 : 2), (kk + 1) * 6,
                                "    " + formYear[(nextPage ? kk + 4 : kk)] + "        ");
                        Toolket.setCellValue(sheet, (nextPage ? 46 : 3), (kk + 1) * 6,
                                "" + year + "   9      " + (year + 1) + "   7  ");
                        rowIndexx = nextPage ? 49 : 6;
                        kk++;
                    }

                    isNeedCheck = true;
                    // passCreditsSum = 0.0F;
                    totalPassCredits = 0.0F;
                    selds = cm.findSeldByStudentNoAndTerm(studentNo, sterm);
                    // boolean isNewSchoolYear = "1".equals(sterm);
                    if (!selds.isEmpty()) {
                        for (Seld seld : selds) {
                            dtime = cm.findDtimeBy(seld.getDtimeOid());
                            csnos = cm.getCsnameBy(dtime.getCscode());
                            if (!csnos.isEmpty())
                                csno = (Csno) csnos.get(0);
                            Toolket.setCellValue(sheet, rowIndexx, kk * 6,
                                    StringUtils.substring(Toolket.getCourseOpt(dtime.getOpt()), 0, 1));
                            Toolket.setCellValue(sheet, rowIndexx, kk * 6 + 1,
                                    csno == null ? "" : csno.getChiName());
                            totalPassCredits += dtime.getCredit();
                            if ("1".equals(sterm)) {
                                Toolket.setCellValue(sheet, rowIndexx, kk * 6 + 2,
                                        dtime.getCredit().toString());
                                Toolket.setCellValue(sheet, rowIndexx++, kk * 6 + 3, String.valueOf(passScore));
                            } else {
                                Toolket.setCellValue(sheet, rowIndexx, kk * 6 + 4,
                                        dtime.getCredit().toString());
                                Toolket.setCellValue(sheet, rowIndexx++, kk * 6 + 5,
                                        String.valueOf(Math.round(passScore)));
                            }

                            if (isNeedCheck && isNeedCheck1 && rowIndexx >= 32) {
                                isNeedCheck = false;
                                kk++;
                                if (kk % 4 == 0) {
                                    kk = 0;
                                    rowIndexx = nextPage ? 49 : 6;
                                }

                                // Toolket.setCellValue(sheet, 43, 0,
                                // "?"
                                // + title + "?");
                                // Toolket.setCellValue(sheet, 44, 1, ""
                                // + studentNo);
                                // Toolket.setCellValue(sheet, 44, 7, "??"
                                // + student.getStudentName());
                                // Toolket
                                // .setCellValue(
                                // sheet,
                                // 44,
                                // 9,
                                // ""
                                // + (isMaster ? Toolket
                                // .getMasterDepartName(departClass)
                                // : Toolket
                                // .getDepartName(departClass))
                                // + (isDoubleMajor
                                // || isAssist ? "("
                                // + student
                                // .getExtraStatus()
                                // + ":"
                                // + student
                                // .getExtraDept()
                                // + ")"
                                // : ""));
                                // Toolket.setCellValue(sheet, 44, 19,
                                // ""
                                // + student.getIdno());
                                Toolket.setCellValue(sheet, (nextPage ? 45 : 2), kk * 6,
                                        "    " + formYear[(nextPage ? kk + 4 : kk)] + "        ");
                                Toolket.setCellValue(sheet, (nextPage ? 46 : 3), kk * 6,
                                        "" + year + "   9      " + (year + 1) + "   7  ");
                                // rowIndexx = 6;
                                // kk++;
                            }
                        }

                        passCreditsSum += totalPassCredits;
                        if ("1".equals(sterm)) {
                            Toolket.setCellValue(sheet,
                                    (nextPage && j >= 4 && rowIndexx >= 49 ? 76 : 33) + (isMaster ? -2 : 0),
                                    kk * 6 + 2, totalPassCredits.toString());
                            Toolket.setCellValue(sheet,
                                    (nextPage && j >= 4 && rowIndexx >= 49 ? 77 : 34) + (isMaster ? -2 : 0),
                                    kk * 6 + 2, passCreditsSum.toString());
                        } else {
                            Toolket.setCellValue(sheet,
                                    (nextPage && j >= 4 && rowIndexx >= 49 ? 76 : 33) + (isMaster ? -2 : 0),
                                    kk * 6 + 4, totalPassCredits.toString());
                            Toolket.setCellValue(sheet,
                                    (nextPage && j >= 4 && rowIndexx >= 49 ? 77 : 34) + (isMaster ? -2 : 0),
                                    kk * 6 + 4, passCreditsSum.toString());
                        }

                        String[] excluded = { "15", "64", "54", "A4", "B4" };
                        boolean hasInclude = ArrayUtils.contains(excluded,
                                StringUtils.substring(departClass, 1, 3));
                        if (!isDelay && !hasInclude && rowIndexx <= 42)
                            Toolket.removeRow(sheet, 43, 45);
                    }
                } else {
                    String[] excluded = { "15", "64", "54", "A4", "B4" };
                    boolean hasInclude = ArrayUtils.contains(excluded,
                            StringUtils.substring(departClass, 1, 3));
                    if (!isDelay && !hasInclude && rowIndexx <= 42)
                        Toolket.removeRow(sheet, 43, 45);
                }
            }

            File tempDir = new File(context
                    .getRealPath("/WEB-INF/reports/temp/" + getUserCredential(session).getMember().getIdno()
                            + (new SimpleDateFormat("yyyyMMdd").format(new Date()))));
            if (!tempDir.exists())
                tempDir.mkdirs();

            File output = new File(tempDir, departClass + ".xls");
            FileOutputStream fos = new FileOutputStream(output);
            workbook.write(fos);
            fos.close();

            JasperReportUtils.printXlsToFrontEnd(response, output);
            output.delete();
            tempDir.delete();
            // return null;
        } else {
            ServletContext context = request.getSession().getServletContext();
            Map<String, String> parameters = new HashMap<String, String>();
            File image = new File(context.getRealPath("/pages/reports/2002chitS.jpg"));
            parameters.put("IMAGE", image.getAbsolutePath());
            byte[] bytes = JasperRunManager.runReportToPdf(JasperReportUtils.getNoResultReport(context),
                    parameters, new JREmptyDataSource());
            JasperReportUtils.printPdfToFrontEnd(response, bytes);
        }

    }

}

From source file:tw.edu.chit.struts.action.registration.ReportPrintAction.java

/**
 * ???96/*from   ww w. j  a  va 2  s  . c o  m*/
 * 
 * @param mapping org.apache.struts.action.ActionMapping object
 * @param form org.apache.struts.action.ActionForm object
 * @param request request javax.servlet.http.HttpServletRequest object
 * @param response response javax.servlet.http.HttpServletResponse object
 * @param sterm 
 */
@SuppressWarnings("unchecked")
protected void printClassStudentsScoreHistory1(ActionMapping mapping, DynaActionForm form,
        HttpServletRequest request, HttpServletResponse response, String sterm) throws Exception {

    HttpSession session = request.getSession(false);
    MemberManager mm = (MemberManager) getBean(IConstants.MEMBER_MANAGER_BEAN_NAME);
    CourseManager cm = (CourseManager) getBean(IConstants.COURSE_MANAGER_BEAN_NAME);
    ScoreManager sm = (ScoreManager) getBean(IConstants.SCORE_MANAGER_BEAN_NAME);
    StudAffairManager sam = (StudAffairManager) getBean(IConstants.STUD_AFFAIR_MANAGER_BEAN_NAME);
    boolean isIncludeThisTermScore = "true".equalsIgnoreCase(request.getParameter("tt"));

    String studentNo = null;
    Clazz clazz = null;
    ScoreHist scoreHist = null, hist = null;
    List<Student> students = null;
    List<Graduate> graduates = null;
    List<Clazz> clazzes = sm.findClassBy(new Clazz(processClassInfo(form)),
            getUserCredential(session).getClassInChargeAry(), false);

    if (!clazzes.isEmpty() && clazzes.size() > 1) {
        ActionMessages messages = new ActionMessages();
        messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("", ""));
        saveMessages(request, messages);
        ServletContext context = request.getSession().getServletContext();
        Map<String, String> parameters = new HashMap<String, String>();
        File image = new File(context.getRealPath("/pages/reports/2002chitS.jpg"));
        parameters.put("IMAGE", image.getAbsolutePath());
        byte[] bytes = JasperRunManager.runReportToPdf(JasperReportUtils.getNoResultReport(context), parameters,
                new JREmptyDataSource());
        JasperReportUtils.printPdfToFrontEnd(response, bytes);
    } else {

        clazz = clazzes.get(0);
        graduates = mm.findGraduatesByClassNo(clazz.getClassNo()); // ?96.2
        String no = StringUtils.substring(clazz.getClassNo(), 0, 4)
                + (Integer.parseInt(StringUtils.substring(clazz.getClassNo(), 4)) + 10);
        students = mm.findStudentsByClassNo(no);
        for (Student student : students) {
            Graduate g = new Graduate();
            BeanUtils.copyProperties(g, student);
            graduates.add(g);
        }

        if (!graduates.isEmpty()) {

            ServletContext context = request.getSession().getServletContext();
            String[] excep = { "11G332" }; // ??+1
            String[] formYear = { "", "", "", "", "", "", "", "" };

            short firstYear = 0;
            short lastYear = 0;

            double justScore = 0.0D;

            int sheetIndex = 0;
            int k = 0, j = 0, rowIndex = 0, nextPageRowIndex = 0;
            int kk = 0, rowIndexx = 0;

            String departClass = clazz.getClassNo();
            String departCode = "", title = "", evgrType = "", historyDepartCode = "", opt = "", cscode = "";

            // ?70?
            float passScore = Toolket.getPassScoreByDepartClass(departClass);

            MasterData md = null;
            Just just = null;
            ScoreHist target = null;
            Dtime dtime = null;
            List csnos = null;
            Csno csno = null;
            Gmark gmark = null;

            Map<String, String> position = null;

            Float passCreditsSum = 0.0F;
            Float totalPassCredits = 0.0F;

            List<Seld> selds = null;
            List<ScoreHist> scoreHistList = null;
            List<Stavg> stavgs = null;
            List<Gmark> gmarks = null;

            boolean isOver = false; // (lastYear - firstYear + 1) > 4;
            boolean isDelay = Toolket.isDelayClass(departClass);
            boolean isSpringClass = false;
            // 
            boolean isDoubleMajor = false;
            boolean isAssist = false;
            // 9608???Show????,?Show'',?????Show
            boolean is96Entrance = false;
            boolean isMaster = Toolket.isMasterClass(departClass);
            boolean nextPage = false, hasPassRecord = false, rowOver = false;
            boolean isNotExemptAndMend = false; // ???
            boolean isExempt = false; // ???
            boolean isMend = false; // ??
            boolean isAppend = false; // ???
            boolean isNotSameDepartCode = false;

            int studentCounts = graduates.size();
            String fileName = "";

            DecimalFormat df = new DecimalFormat(",##0.0");

            File templateXLS = null;

            if (!isMaster) {

                if (studentCounts <= 30)
                    fileName = "ClassStudentsScoreHistoryOver30.xls";
                else if (studentCounts > 31 && studentCounts <= 40)
                    fileName = "ClassStudentsScoreHistoryOver40.xls";
                else if (studentCounts > 40 && studentCounts <= 45)
                    fileName = "ClassStudentsScoreHistoryOver45.xls";
                else if (studentCounts > 45 && studentCounts <= 50)
                    fileName = "ClassStudentsScoreHistoryOver50.xls";
                else if (studentCounts > 51 && studentCounts <= 55)
                    fileName = "ClassStudentsScoreHistoryOver55.xls";
                else
                    fileName = "ClassStudentsScoreHistoryOver60.xls";

                title = Toolket.getSchoolFormalName(departClass);
                if (isDelay) {
                    // Only 20 Sheets
                    templateXLS = new File(
                            context.getRealPath("/WEB-INF/reports/ClassStudentsScoreHistoryOver.xls"));
                } else {
                    templateXLS = new File(context.getRealPath("/WEB-INF/reports/" + fileName));
                }
            } else {

                if (studentCounts <= 15)
                    fileName = "ClassStudentsScoreHistoryMaster15.xls";
                else if (studentCounts > 15 && studentCounts <= 20)
                    fileName = "ClassStudentsScoreHistoryMaster20.xls";
                else
                    fileName = "ClassStudentsScoreHistoryMaster25.xls";

                String masterId = StringUtils.substring(departClass, 1, 3);
                if ("1G".equals(masterId))
                    title = "?";
                else
                    title = "??";
                templateXLS = new File(context.getRealPath("/WEB-INF/reports/" + fileName));
            }

            HSSFWorkbook workbook = Toolket.getHSSFWorkbook(templateXLS);

            HSSFFont colorFont = workbook.createFont();
            colorFont.setColor(HSSFColor.RED.index);
            colorFont.setFontHeightInPoints((short) 12);
            colorFont.setFontName("Arial Unicode MS");

            HSSFFont fontSize12 = workbook.createFont();
            fontSize12.setFontHeightInPoints((short) 12);
            fontSize12.setFontName("Arial Unicode MS");
            HSSFSheet sheet = null;

            for (Graduate graduate : graduates) {

                studentNo = graduate.getStudentNo();
                sheet = workbook.getSheetAt(sheetIndex);
                workbook.setSheetName(sheetIndex++, studentNo.toUpperCase());
                // if (student == null) {
                // graduate = mm.findGraduateByStudentNo(studentNo);
                // student = new Student();
                // BeanUtils.copyProperties(student, graduate);
                // }

                // 
                isDoubleMajor = "".equals(graduate.getExtraStatus());
                isAssist = "".equals(graduate.getExtraStatus());

                // departClass = student.getDepartClass();
                // 9608???Show????,?Show'',?????Show
                is96Entrance = graduate.getEntrance() == null ? false : graduate.getEntrance() >= (short) 9608;
                scoreHist = new ScoreHist(studentNo);
                scoreHistList = sm.findScoreHistBy(scoreHist);
                if (scoreHistList.isEmpty()) {
                    ActionMessages messages = new ActionMessages();
                    messages.add(ActionMessages.GLOBAL_MESSAGE,
                            new ActionMessage("Course.messageN1", "?"));
                    saveErrors(request, messages);
                    log.error("No Score History... " + studentNo);
                    sheetIndex--;
                    continue;
                } else {

                    firstYear = Short.parseShort(scoreHistList.get(0).getSchoolYear().toString());
                    lastYear = Short
                            .parseShort(scoreHistList.get(scoreHistList.size() - 1).getSchoolYear().toString());
                    isOver = (lastYear - firstYear + 1) > 4;
                    if (isOver)
                        ; // log.error("It is Over... " + studentNo);
                    departCode = "";

                    Toolket.setCellValue(sheet, 0, 0, "?" + title + "?");
                    Toolket.setCellValue(sheet, 1, 1, "" + studentNo);
                    Toolket.setCellValue(sheet, 1, 7, "??" + graduate.getStudentName());
                    Toolket.setCellValue(sheet, 1, 9, ""
                            + (isMaster ? Toolket.getMasterDepartName(departClass)
                                    : Toolket.getDepartName(departClass))
                            + (isDoubleMajor || isAssist
                                    ? "(" + graduate.getExtraStatus() + ":" + graduate.getExtraDept() + ")"
                                    : ""));
                    Toolket.setCellValue(sheet, 1, 19, "" + graduate.getIdno());

                    // ?2,?code
                    Toolket.setCellValue(sheet, 43, 0, "?" + title + "?");
                    Toolket.setCellValue(sheet, 44, 1, "" + studentNo);
                    Toolket.setCellValue(sheet, 44, 7, "??" + graduate.getStudentName());
                    Toolket.setCellValue(sheet, 44, 9, ""
                            + (isMaster ? Toolket.getMasterDepartName(departClass)
                                    : Toolket.getDepartName(departClass))
                            + (isDoubleMajor || isAssist
                                    ? "(" + graduate.getExtraStatus() + ":" + graduate.getExtraDept() + ")"
                                    : ""));
                    Toolket.setCellValue(sheet, 44, 19, "" + graduate.getIdno());

                    if (isDelay) {
                        Toolket.setCellValue(sheet, 43, 0,
                                "?" + title + "?");
                        Toolket.setCellValue(sheet, 44, 1, "" + studentNo);
                        Toolket.setCellValue(sheet, 44, 7, "??" + graduate.getStudentName());
                        Toolket.setCellValue(sheet, 44, 9, ""
                                + (isMaster ? Toolket.getMasterDepartName(departClass)
                                        : Toolket.getDepartName(departClass))
                                + (isDoubleMajor || isAssist
                                        ? "(" + graduate.getExtraStatus() + ":" + graduate.getExtraDept() + ")"
                                        : ""));
                        Toolket.setCellValue(sheet, 44, 19, "" + graduate.getIdno());
                    }

                    if (isDoubleMajor || isAssist) {
                        Toolket.setCellValue(sheet, 42, 0,
                                "  => *:??   #:   &:   ");
                        departCode = StringUtils.substring(graduate.getDepartClass(), 3, 4);
                    }

                    if (isOver) {
                        Toolket.setCellValue(sheet, 43, 0,
                                "?" + title + "?");
                        Toolket.setCellValue(sheet, 44, 1, "" + studentNo);
                        Toolket.setCellValue(sheet, 44, 7, "??" + graduate.getStudentName());
                        Toolket.setCellValue(sheet, 44, 9,
                                "" + (isMaster ? Toolket.getMasterDepartName(departClass)
                                        : Toolket.getDepartName(departClass)));
                        Toolket.setCellValue(sheet, 44, 19, "" + graduate.getIdno());
                        if (isDoubleMajor || isAssist)
                            Toolket.setCellValue(sheet, 85, 0,
                                    "  => *:??   #:   &:   ");
                    }

                    if (isMaster) {
                        md = sm.findMasterByStudentNo(studentNo);
                        if (md != null) {
                            Toolket.setCellValue(sheet, 38, 0, "" + md.getThesesChiname());
                            Toolket.setCellValue(sheet, 39, 0, "          " + md.getThesesEngname());
                            Toolket.setCellValue(sheet, 38, 17, md.getRemark());
                            Toolket.setCellValue(sheet, 40, 0, "??" + md.getThesesScore());
                            Toolket.setCellValue(sheet, 40, 4,
                                    "??(50%)" + md.getThesesScore() / 2);
                            Toolket.setCellValue(sheet, 40, 8, "??" + md.getEvgr1Score());
                            Toolket.setCellValue(sheet, 40, 14,
                                    "??(50%)" + md.getEvgr1Score() / 2);
                            Toolket.setCellValue(sheet, 40, 19, "?" + md.getGraduateScore());
                        }
                    }

                    if (Arrays.binarySearch(excep, departClass) >= 0) {
                        lastYear++;
                        isSpringClass = true;
                        Toolket.setCellValue(sheet, 39, 17, "" + (lastYear + 1) + ".1");
                    }

                    k = 0;
                    j = 0;
                    rowIndex = 6;
                    nextPageRowIndex = 43;
                    passCreditsSum = 0.0F;
                    nextPage = false;
                    hasPassRecord = false;
                    rowOver = false;
                    // List<Stavg> stavgs = null;
                    // Just just = null;
                    // String[] formYear = { "", "", "", "", "", "",
                    // "", "" };
                    for (short year = firstYear; year <= lastYear; year++) {
                        // ???9316D078
                        // ???
                        scoreHist.setSchoolYear(year);
                        scoreHist.setSchoolTerm("1");
                        hasPassRecord = !sm.findScoreHistBy(scoreHist).isEmpty();
                        if (!hasPassRecord) {
                            scoreHist.setSchoolTerm("2");
                            hasPassRecord = !sm.findScoreHistBy(scoreHist).isEmpty();
                            if (!hasPassRecord)
                                continue;
                        }

                        if (isSpringClass && year == lastYear) {
                            just = sam.findJustByStudentNo(studentNo);
                            justScore = 0.0D;
                            if (just == null || just.getTotalScore() == 0.0D) {
                                target = new ScoreHist(studentNo);
                                target.setSchoolYear(new Short(year));
                                target.setSchoolTerm("2");
                                target.setCscode("99999");
                                scoreHistList = sm.findScoreHistBy(target);
                                if (!scoreHistList.isEmpty()) {
                                    scoreHist = sm.findScoreHistBy(scoreHist).get(0);
                                    justScore = scoreHist.getScore();
                                }
                            } else
                                justScore = just.getTotalScore();

                            Toolket.setCellValue(sheet, 35 + (isMaster ? -2 : 0), k * 6 + 3,
                                    justScore == 0.0D ? "" : String.valueOf(Math.round(justScore)));
                        }

                        if (rowOver) {
                            Toolket.setCellValue(workbook, sheet, 2 + (nextPage ? nextPageRowIndex : 0), k * 6,
                                    "    " + formYear[(nextPage ? k + 4 : k)] + "        ", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, null);
                        } else
                            Toolket.setCellValue(sheet, 2 + (nextPage ? nextPageRowIndex : 0), k * 6,
                                    "    " + formYear[(nextPage ? k + 4 : k)] + "        ");
                        position = new HashMap<String, String>();
                        for (int term = 1; term <= 2; term++) {
                            scoreHist.setSchoolYear(year);
                            scoreHist.setSchoolTerm(String.valueOf(term));
                            // scoreHist.setEvgrType("1"); // ?
                            scoreHistList = sm.findScoreHistBy(scoreHist);
                            if (!scoreHistList.isEmpty()) {
                                Toolket.setCellValue(sheet, 3 + (nextPage ? nextPageRowIndex : 0), k * 6,
                                        "" + year + "   9      " + (year + 1) + "   7  ");
                                stavgs = sm.findStavgBy(new Stavg(studentNo, year, String.valueOf(term)));
                                totalPassCredits = 0.0F;
                                // for (ScoreHist hist : scoreHistList) {
                                // i != scoreHistList.size() -
                                // 1???,??
                                for (int i = 0; i < scoreHistList.size(); i++) {

                                    hist = scoreHistList.get(i);
                                    if (rowIndex == 32 && i != scoreHistList.size() - 1) {
                                        rowIndex = 6;
                                        k++;
                                        Toolket.setCellValue(sheet, 2 + (nextPage ? nextPageRowIndex : 0),
                                                k * 6, "    " + formYear[k - 1] + "        ");
                                        Toolket.setCellValue(sheet, 3 + (nextPage ? nextPageRowIndex : 0),
                                                k * 6, "" + year + "   9      " + (year + 1)
                                                        + "   7  ");
                                        rowOver = true;
                                    }

                                    evgrType = hist.getEvgrType();
                                    isNotExemptAndMend = !"6".equals(evgrType) && !"5".equals(evgrType); // ???
                                    isExempt = "6".equals(evgrType); // ???
                                    isMend = "5".equals(evgrType); // ??
                                    isAppend = "2".equals(evgrType); // ???
                                    historyDepartCode = StringUtils.isBlank(hist.getStdepartClass()) ? ""
                                            : StringUtils.substring(hist.getStdepartClass(), 3, 4);
                                    isNotSameDepartCode = !departCode.equals(historyDepartCode)
                                            && !historyDepartCode.equals("0");
                                    opt = "";
                                    if ("3".equals(evgrType))
                                        opt = "";
                                    else
                                        opt = StringUtils.substring(Toolket.getCourseOpt(hist.getOpt()), 0, 1)
                                                + (isAppend ? ""
                                                        : (isMend ? ""
                                                                : (!isNotExemptAndMend ? "" : "")));

                                    cscode = hist.getCscode();
                                    if ("GA035".equals(cscode) || "".equals("GB033"))
                                        continue; // 2?

                                    if (!"99999".equals(cscode)) { // ?
                                        String courseName = cm.findCourseInfoByCscode(cscode) == null
                                                ? "??"
                                                : cm.findCourseInfoByCscode(cscode).getChiName().trim();
                                        Float credit = hist.getCredit();
                                        Float score = hist.getScore();
                                        boolean pass = (score == null ? 0.0F : score) >= passScore;
                                        // ((?&&?)||?)&&?
                                        if (((isNotExemptAndMend && pass) || isExempt) && !isMend)
                                            // if (!isNotExemptAndMend ||
                                            // !isMend ||
                                            // bFlag1)
                                            // if (!isMend && bFlag1)
                                            if (isMaster && "G".equalsIgnoreCase(
                                                    StringUtils.substring(hist.getStdepartClass(), 2, 3))) {
                                                // ???,?
                                                totalPassCredits += credit;
                                            } else
                                                totalPassCredits += credit;

                                        if (1 == term) {
                                            if (opt.length() == 1 || is96Entrance)
                                                Toolket.setCellValue(sheet, rowIndex, k * 6,
                                                        (is96Entrance ? StringUtils.substring(opt, 0, 1)
                                                                : opt));
                                            else
                                                Toolket.setCellValue(workbook, sheet, rowIndex, k * 6, opt,
                                                        fontSize12, HSSFCellStyle.ALIGN_CENTER, true, null);
                                            Toolket.setCellValue(sheet, rowIndex, k * 6 + 1, courseName);
                                            position.put(courseName, String.valueOf(rowIndex));

                                            if (isNotExemptAndMend) {
                                                // ?
                                                String creditStr = credit.toString();
                                                if (!isMend && !isExempt)
                                                    creditStr = pass ? creditStr : creditStr + "*";
                                                if (isDoubleMajor && isNotSameDepartCode)
                                                    creditStr += "&";
                                                if (isAssist && isNotSameDepartCode)
                                                    creditStr += "#";
                                                if (StringUtils.indexOf(creditStr,
                                                        "*") == StringUtils.INDEX_NOT_FOUND)
                                                    Toolket.setCellValue(sheet, rowIndex, k * 6 + 2, creditStr);
                                                else
                                                    Toolket.setCellValue(workbook, sheet, rowIndex, k * 6 + 2,
                                                            creditStr, colorFont, HSSFCellStyle.ALIGN_CENTER,
                                                            true, null);
                                                // ??
                                                Toolket.setCellValue(sheet, rowIndex++, k * 6 + 3, (isMend
                                                        ? ""
                                                        : (score == null ? ""
                                                                : StringUtils.substringBefore(score.toString(),
                                                                        "."))));
                                                // ??
                                                Toolket.setCellValue(sheet,
                                                        32 + (isMaster ? -2 : 0)
                                                                + (nextPage ? nextPageRowIndex : 0),
                                                        k * 6 + 3,
                                                        (stavgs.isEmpty() ? ""
                                                                : df.format(
                                                                        stavgs.get(0).getScore() + 0.001D)));
                                            } else {
                                                // ?
                                                String creditStr = credit.toString();
                                                Toolket.setCellValue(sheet, rowIndex, k * 6 + 2, creditStr);
                                                if (is96Entrance)
                                                    Toolket.setCellValue(sheet, rowIndex++, k * 6 + 3,
                                                            (isMend ? "" : ""));
                                                else {
                                                    // ??
                                                    Toolket.setCellValue(sheet,
                                                            32 + (isMaster ? -2 : 0)
                                                                    + (nextPage ? nextPageRowIndex : 0),
                                                            k * 6 + 3,
                                                            (stavgs.isEmpty() ? ""
                                                                    : df.format(stavgs.get(0).getScore()
                                                                            + 0.001D)));
                                                    Toolket.setCellValue(sheet, rowIndex++, k * 6 + 3,
                                                            score == null ? ""
                                                                    : StringUtils.substringBefore(
                                                                            score.toString(), "."));
                                                }
                                            }
                                        } else {

                                            String endString = StringUtils.substring(courseName,
                                                    courseName.length() - 1);
                                            boolean duplicatedCourseName = "".equals(endString);
                                            boolean duplicatedCourseName1 = "".equals(endString);
                                            boolean duplicatedCourseName2 = "".equals(endString);

                                            if (duplicatedCourseName || duplicatedCourseName1
                                                    || duplicatedCourseName2) {

                                                String courseIndex = StringUtils.substring(courseName, 0,
                                                        courseName.length() - 1);
                                                String row = "", maybeSameCourseNameOptInfo = "";
                                                if (duplicatedCourseName) {
                                                    row = position.get(courseIndex + "");
                                                    if (row != null)
                                                        maybeSameCourseNameOptInfo = Toolket.getCellValue(sheet,
                                                                Integer.parseInt(row),
                                                                (rowOver ? k - 1 : k) * 6);
                                                } else if (duplicatedCourseName1) {
                                                    row = position.get(courseIndex + "");
                                                    if (row != null)
                                                        maybeSameCourseNameOptInfo = Toolket.getCellValue(sheet,
                                                                Integer.parseInt(row),
                                                                (rowOver ? k - 1 : k) * 6);
                                                } else if (duplicatedCourseName2) {
                                                    row = position.get(courseIndex + "");
                                                    if (row != null)
                                                        maybeSameCourseNameOptInfo = Toolket.getCellValue(sheet,
                                                                Integer.parseInt(row),
                                                                (rowOver ? k - 1 : k) * 6);
                                                }

                                                // ?????
                                                boolean isAllowMerge = (StringUtils.contains(opt, "")
                                                        && StringUtils.contains(maybeSameCourseNameOptInfo,
                                                                ""))
                                                        || (StringUtils.contains(opt, "?") && StringUtils
                                                                .contains(maybeSameCourseNameOptInfo, "?"));
                                                if (row != null && isAllowMerge) {
                                                    int rowNum = Integer.parseInt(row);
                                                    Toolket.setCellValue(sheet, rowNum,
                                                            (rowOver ? k - 1 : k) * 6 + 1,
                                                            Toolket.getCellValue(sheet, rowNum,
                                                                    (rowOver ? k - 1 : k) * 6 + 1)
                                                                    + "?"
                                                                    + (duplicatedCourseName ? ""
                                                                            : duplicatedCourseName1 ? ""
                                                                                    : ""));
                                                    if (isNotExemptAndMend) {
                                                        // ?
                                                        String creditStr = credit.toString();
                                                        if (!isMend && !isExempt)
                                                            creditStr = pass ? creditStr : creditStr + "*";
                                                        if (isDoubleMajor && isNotSameDepartCode)
                                                            creditStr += "&";
                                                        if (isAssist && isNotSameDepartCode)
                                                            creditStr += "#";
                                                        if (StringUtils.indexOf(creditStr,
                                                                "*") == StringUtils.INDEX_NOT_FOUND)
                                                            Toolket.setCellValue(sheet, rowNum,
                                                                    (rowOver ? k - 1 : k) * 6 + 4, creditStr);
                                                        else
                                                            Toolket.setCellValue(workbook, sheet, rowNum,
                                                                    (rowOver ? k - 1 : k) * 6 + 4, creditStr,
                                                                    colorFont, HSSFCellStyle.ALIGN_CENTER, true,
                                                                    null);

                                                        Toolket.setCellValue(sheet, rowNum,
                                                                (rowOver ? k - 1 : k) * 6 + 5,
                                                                (isMend ? ""
                                                                        : (score == null ? ""
                                                                                : StringUtils.substringBefore(
                                                                                        score.toString(),
                                                                                        "."))));
                                                        Toolket.setCellValue(sheet,
                                                                32 + (isMaster ? -2 : 0)
                                                                        + (nextPage ? nextPageRowIndex : 0),
                                                                (rowOver ? k - 1 : k) * 6 + 5,
                                                                (stavgs.isEmpty() ? ""
                                                                        : df.format(stavgs.get(0).getScore()
                                                                                + 0.001D)));
                                                    } else {
                                                        // ?
                                                        String creditStr = credit.toString();
                                                        Toolket.setCellValue(sheet, rowNum,
                                                                (rowOver ? k - 1 : k) * 6 + 4, creditStr);
                                                        if (is96Entrance)
                                                            Toolket.setCellValue(sheet, rowNum,
                                                                    (rowOver ? k - 1 : k) * 6 + 5,
                                                                    (isMend ? "" : ""));
                                                        else {
                                                            Toolket.setCellValue(sheet,
                                                                    32 + (isMaster ? -2 : 0),
                                                                    (rowOver ? k - 1 : k) * 6 + 5,
                                                                    (stavgs.isEmpty() ? ""
                                                                            : df.format(stavgs.get(0).getScore()
                                                                                    + 0.001D)));
                                                            Toolket.setCellValue(sheet, rowNum,
                                                                    (rowOver ? k - 1 : k) * 6 + 5,
                                                                    score == null ? ""
                                                                            : StringUtils.substringBefore(
                                                                                    score.toString(), "."));
                                                        }
                                                    }
                                                } else {
                                                    if (opt.length() == 1 || is96Entrance)
                                                        Toolket.setCellValue(sheet, rowIndex, k * 6,
                                                                (is96Entrance ? StringUtils.substring(opt, 0, 1)
                                                                        : opt));
                                                    else
                                                        Toolket.setCellValue(workbook, sheet, rowIndex, k * 6,
                                                                opt, fontSize12, HSSFCellStyle.ALIGN_CENTER,
                                                                true, null);
                                                    Toolket.setCellValue(sheet, rowIndex, k * 6 + 1,
                                                            courseName);
                                                    position.put(courseName, String.valueOf(rowIndex));

                                                    if (isNotExemptAndMend) {
                                                        // ?
                                                        String creditStr = credit.toString();
                                                        if (!isMend && !isExempt)
                                                            creditStr = pass ? creditStr : creditStr + "*";
                                                        if (isDoubleMajor && isNotSameDepartCode)
                                                            creditStr += "&";
                                                        if (isAssist && isNotSameDepartCode)
                                                            creditStr += "#";
                                                        if (StringUtils.indexOf(creditStr,
                                                                "*") == StringUtils.INDEX_NOT_FOUND)
                                                            Toolket.setCellValue(sheet, rowIndex, k * 6 + 4,
                                                                    creditStr);
                                                        else
                                                            Toolket.setCellValue(workbook, sheet, rowIndex,
                                                                    k * 6 + 4, creditStr, colorFont,
                                                                    HSSFCellStyle.ALIGN_CENTER, true, null);

                                                        // ??
                                                        Toolket.setCellValue(sheet, rowIndex++, k * 6 + 5,
                                                                (isMend ? ""
                                                                        : (score == null ? ""
                                                                                : StringUtils.substringBefore(
                                                                                        score.toString(),
                                                                                        "."))));
                                                        // ??
                                                        Toolket.setCellValue(sheet, 32 + (isMaster ? -2 : 0),
                                                                k * 6 + 5,
                                                                (stavgs.isEmpty() ? ""
                                                                        : df.format(stavgs.get(0).getScore()
                                                                                + 0.001D)));
                                                    } else {
                                                        // ?
                                                        String creditStr = credit.toString();
                                                        Toolket.setCellValue(sheet, rowIndex, k * 6 + 4,
                                                                creditStr);
                                                        if (is96Entrance)
                                                            Toolket.setCellValue(sheet, rowIndex++, k * 6 + 5,
                                                                    (isMend ? "" : ""));
                                                        else {
                                                            // ??
                                                            Toolket.setCellValue(sheet,
                                                                    32 + (isMaster ? -2 : 0), k * 6 + 5,
                                                                    (stavgs.isEmpty() ? ""
                                                                            : df.format(stavgs.get(0).getScore()
                                                                                    + 0.001D)));
                                                            Toolket.setCellValue(sheet, rowIndex++, k * 6 + 5,
                                                                    score == null ? ""
                                                                            : StringUtils.substringBefore(
                                                                                    score.toString(), "."));
                                                        }
                                                    }
                                                }
                                            } else {
                                                if (opt.length() == 1 || is96Entrance)
                                                    Toolket.setCellValue(sheet, rowIndex, k * 6,
                                                            (is96Entrance ? StringUtils.substring(opt, 0, 1)
                                                                    : opt));
                                                else
                                                    Toolket.setCellValue(workbook, sheet, rowIndex, k * 6, opt,
                                                            fontSize12, HSSFCellStyle.ALIGN_CENTER, true, null);
                                                Toolket.setCellValue(sheet, rowIndex, k * 6 + 1, courseName);
                                                // ?
                                                String creditStr = credit.toString();
                                                if (!isMend && !isExempt)
                                                    creditStr = pass ? creditStr : creditStr + "*";
                                                if (isDoubleMajor && isNotSameDepartCode)
                                                    creditStr += "&";
                                                if (isAssist && isNotSameDepartCode)
                                                    creditStr += "#";
                                                if (StringUtils.indexOf(creditStr,
                                                        "*") == StringUtils.INDEX_NOT_FOUND)
                                                    Toolket.setCellValue(sheet, rowIndex, k * 6 + 4, creditStr);
                                                else
                                                    Toolket.setCellValue(workbook, sheet, rowIndex, k * 6 + 4,
                                                            creditStr, colorFont, HSSFCellStyle.ALIGN_CENTER,
                                                            true, null);

                                                if (isNotExemptAndMend) {
                                                    Toolket.setCellValue(sheet, rowIndex++, k * 6 + 5,
                                                            (isMend ? ""
                                                                    : (score == null ? ""
                                                                            : StringUtils.substringBefore(
                                                                                    score.toString(), "."))));
                                                    Toolket.setCellValue(sheet, 32 + (isMaster ? -2 : 0),
                                                            k * 6 + 5,
                                                            (stavgs.isEmpty() ? ""
                                                                    : df.format(stavgs.get(0).getScore()
                                                                            + 0.001D)));
                                                } else {
                                                    if (is96Entrance)
                                                        Toolket.setCellValue(sheet, rowIndex++, k * 6 + 5,
                                                                (isMend ? "" : ""));
                                                    else {
                                                        Toolket.setCellValue(sheet, 32 + (isMaster ? -2 : 0),
                                                                k * 6 + 5,
                                                                (stavgs.isEmpty() ? ""
                                                                        : df.format(stavgs.get(0).getScore()
                                                                                + 0.001D)));
                                                        Toolket.setCellValue(sheet, rowIndex++, k * 6 + 5,
                                                                score == null ? ""
                                                                        : StringUtils.substringBefore(
                                                                                score.toString(), "."));
                                                    }
                                                }
                                            }

                                        }
                                    } else {
                                        // ?
                                        if (1 == term) {
                                            if (isNotExemptAndMend) {
                                                Toolket.setCellValue(sheet,
                                                        35 + (isMaster ? -2 : 0)
                                                                + (nextPage ? nextPageRowIndex : 0),
                                                        k * 6 + 3, String.valueOf(Math.round(hist.getScore())));
                                            } else {
                                                if (!is96Entrance)
                                                    Toolket.setCellValue(sheet, 35 + (isMaster ? -2 : 0),
                                                            k * 6 + 3,
                                                            hist.getScore() == null ? ""
                                                                    : String.valueOf(
                                                                            Math.round((hist.getScore()))));
                                            }
                                        } else {
                                            if (isNotExemptAndMend) {
                                                Toolket.setCellValue(sheet,
                                                        35 + (isMaster ? -2 : 0)
                                                                + (nextPage ? nextPageRowIndex : 0),
                                                        k * 6 + 5, String.valueOf(Math.round(hist.getScore())));
                                            } else {
                                                if (!is96Entrance)
                                                    Toolket.setCellValue(sheet, 35 + (isMaster ? -2 : 0),
                                                            k * 6 + 5,
                                                            hist.getScore() == null ? ""
                                                                    : String.valueOf(
                                                                            Math.round(hist.getScore())));
                                            }
                                        }
                                    }

                                }

                                // ?
                                if (1 == term) {
                                    Toolket.setCellValue(sheet,
                                            33 + (isMaster ? -2 : 0) + (nextPage ? nextPageRowIndex : 0),
                                            k * 6 + 2, totalPassCredits.toString());
                                    Toolket.setCellValue(sheet,
                                            34 + (isMaster ? -2 : 0) + (nextPage ? nextPageRowIndex : 0),
                                            k * 6 + 2, (passCreditsSum += totalPassCredits).toString());
                                } else {
                                    Toolket.setCellValue(sheet,
                                            33 + (isMaster ? -2 : 0) + (nextPage ? nextPageRowIndex : 0),
                                            k * 6 + 4, totalPassCredits.toString());
                                    Toolket.setCellValue(sheet,
                                            34 + (isMaster ? -2 : 0) + (nextPage ? nextPageRowIndex : 0),
                                            k * 6 + 4, (passCreditsSum += totalPassCredits).toString());
                                }
                            }
                            // k--;
                        }

                        gmark = new Gmark();
                        gmark.setSchoolYear(year);
                        gmark.setStudentNo(studentNo);
                        gmarks = cm.findGMarkBy(gmark);
                        if (!gmarks.isEmpty()) {
                            StringBuilder builder = new StringBuilder();
                            for (Gmark gm : gmarks)
                                builder.append(gm.getRemark()).append("\n      ");
                            int remarkCols = 0;
                            switch (k) {
                            case 0:
                                remarkCols = 0;
                                break;
                            case 1:
                                remarkCols = 6;
                                break;
                            case 2:
                                remarkCols = 12;
                                break;
                            case 3:
                                remarkCols = 18;
                                break;
                            }
                            Toolket.setCellValue(sheet, 36, remarkCols, "" + builder.toString());
                        }

                        if (rowOver) {
                            Toolket.setCellValue(sheet, 32, (k - 1) * 6 + 5, "");
                            Toolket.setCellValue(sheet, 35, k * 6 + 5,
                                    Toolket.getCellValue(sheet, 35, (k - 1) * 6 + 5));
                            Toolket.setCellValue(sheet, 35, (k - 1) * 6 + 5, "");
                        }

                        kk = k;
                        rowIndexx = rowIndex;
                        k++;
                        j++;
                        rowIndex = j >= 4 ? 49 : 6;
                        // rowIndexx = j >= 4 ? 49 : 6;
                        if (j == 4) {
                            // rowIndex = 49;
                            k = 0;
                            nextPage = true;
                        }
                    }

                }

                if (isIncludeThisTermScore) {
                    // Exception Students : 92148059, 92146011, 93148066,
                    // 9144037, 914C009, 96164016, 9214D093
                    AdminManager am = (AdminManager) getBean(ADMIN_MANAGER_BEAN_NAME);
                    Integer year = Integer.valueOf(am.findTermBy(PARAMETER_SCHOOL_YEAR));
                    boolean isSameYear = lastYear == year;
                    boolean isNeedCheck = true, isNeedCheck1 = true;
                    if (!isSameYear) {
                        isNeedCheck1 = false;
                        if (nextPage) {
                            kk++;
                            if (kk == 4)
                                kk = 0;
                        }

                        Toolket.setCellValue(sheet, (nextPage ? 45 : 2), kk * 6,
                                "    " + formYear[(nextPage ? k + 4 : k)] + "        ");
                        Toolket.setCellValue(sheet, (nextPage ? 46 : 3), kk * 6,
                                "" + year + "   9      " + (year + 1) + "   7  ");
                        rowIndexx = nextPage ? 49 : 6;
                        // kk++;
                    }

                    if (!nextPage && rowIndexx >= 32) {
                        // ?,:96164016
                        Toolket.setCellValue(sheet, (nextPage ? 45 : 2), (kk + 1) * 6,
                                "    " + formYear[(nextPage ? kk + 4 : kk)] + "        ");
                        Toolket.setCellValue(sheet, (nextPage ? 46 : 3), (kk + 1) * 6,
                                "" + year + "   9      " + (year + 1) + "   7  ");
                        rowIndexx = nextPage ? 49 : 6;
                        kk++;
                    }

                    isNeedCheck = true;
                    // passCreditsSum = 0.0F;
                    totalPassCredits = 0.0F;
                    selds = cm.findSeldByStudentNoAndTerm(studentNo, sterm);
                    // boolean isNewSchoolYear = "1".equals(sterm);
                    if (!selds.isEmpty()) {
                        for (Seld seld : selds) {
                            dtime = cm.findDtimeBy(seld.getDtimeOid());
                            csnos = cm.getCsnameBy(dtime.getCscode());
                            if (!csnos.isEmpty())
                                csno = (Csno) csnos.get(0);
                            Toolket.setCellValue(sheet, rowIndexx, kk * 6,
                                    StringUtils.substring(Toolket.getCourseOpt(dtime.getOpt()), 0, 1));
                            Toolket.setCellValue(sheet, rowIndexx, kk * 6 + 1,
                                    csno == null ? "" : csno.getChiName());
                            totalPassCredits += dtime.getCredit();
                            if ("1".equals(sterm)) {
                                Toolket.setCellValue(sheet, rowIndexx, kk * 6 + 2,
                                        dtime.getCredit().toString());
                                Toolket.setCellValue(sheet, rowIndexx++, kk * 6 + 3, String.valueOf(passScore));
                            } else {
                                Toolket.setCellValue(sheet, rowIndexx, kk * 6 + 4,
                                        dtime.getCredit().toString());
                                Toolket.setCellValue(sheet, rowIndexx++, kk * 6 + 5,
                                        String.valueOf(Math.round(passScore)));
                            }

                            if (isNeedCheck && isNeedCheck1 && rowIndexx >= 32) {
                                isNeedCheck = false;
                                kk++;
                                if (kk % 4 == 0) {
                                    kk = 0;
                                    rowIndexx = nextPage ? 49 : 6;
                                }

                                // Toolket.setCellValue(sheet, 43, 0,
                                // "?"
                                // + title + "?");
                                // Toolket.setCellValue(sheet, 44, 1, ""
                                // + studentNo);
                                // Toolket.setCellValue(sheet, 44, 7, "??"
                                // + student.getStudentName());
                                // Toolket
                                // .setCellValue(
                                // sheet,
                                // 44,
                                // 9,
                                // ""
                                // + (isMaster ? Toolket
                                // .getMasterDepartName(departClass)
                                // : Toolket
                                // .getDepartName(departClass))
                                // + (isDoubleMajor
                                // || isAssist ? "("
                                // + student
                                // .getExtraStatus()
                                // + ":"
                                // + student
                                // .getExtraDept()
                                // + ")"
                                // : ""));
                                // Toolket.setCellValue(sheet, 44, 19,
                                // ""
                                // + student.getIdno());
                                Toolket.setCellValue(sheet, (nextPage ? 45 : 2), kk * 6,
                                        "    " + formYear[(nextPage ? kk + 4 : kk)] + "        ");
                                Toolket.setCellValue(sheet, (nextPage ? 46 : 3), kk * 6,
                                        "" + year + "   9      " + (year + 1) + "   7  ");
                                // rowIndexx = 6;
                                // kk++;
                            }
                        }

                        passCreditsSum += totalPassCredits;
                        if ("1".equals(sterm)) {
                            Toolket.setCellValue(sheet,
                                    (nextPage && j >= 4 && rowIndexx >= 49 ? 76 : 33) + (isMaster ? -2 : 0),
                                    kk * 6 + 2, totalPassCredits.toString());
                            Toolket.setCellValue(sheet,
                                    (nextPage && j >= 4 && rowIndexx >= 49 ? 77 : 34) + (isMaster ? -2 : 0),
                                    kk * 6 + 2, passCreditsSum.toString());
                        } else {
                            Toolket.setCellValue(sheet,
                                    (nextPage && j >= 4 && rowIndexx >= 49 ? 76 : 33) + (isMaster ? -2 : 0),
                                    kk * 6 + 4, totalPassCredits.toString());
                            Toolket.setCellValue(sheet,
                                    (nextPage && j >= 4 && rowIndexx >= 49 ? 77 : 34) + (isMaster ? -2 : 0),
                                    kk * 6 + 4, passCreditsSum.toString());
                        }

                        String[] excluded = { "15", "64", "54", "A4", "B4" };
                        boolean hasInclude = ArrayUtils.contains(excluded,
                                StringUtils.substring(departClass, 1, 3));
                        if (!isDelay && !hasInclude && rowIndexx <= 42)
                            Toolket.removeRow(sheet, 43, 45);
                    }
                } else {
                    String[] excluded = { "15", "64", "54", "A4", "B4" };
                    boolean hasInclude = ArrayUtils.contains(excluded,
                            StringUtils.substring(departClass, 1, 3));
                    if (!isDelay && !hasInclude && rowIndexx <= 42)
                        Toolket.removeRow(sheet, 43, 45);
                }
            }

            File tempDir = new File(context
                    .getRealPath("/WEB-INF/reports/temp/" + getUserCredential(session).getMember().getIdno()
                            + (new SimpleDateFormat("yyyyMMdd").format(new Date()))));
            if (!tempDir.exists())
                tempDir.mkdirs();

            File output = new File(tempDir, departClass + ".xls");
            FileOutputStream fos = new FileOutputStream(output);
            workbook.write(fos);
            fos.close();

            JasperReportUtils.printXlsToFrontEnd(response, output);
            output.delete();
            tempDir.delete();
            // return null;
        } else {
            ServletContext context = request.getSession().getServletContext();
            Map<String, String> parameters = new HashMap<String, String>();
            File image = new File(context.getRealPath("/pages/reports/2002chitS.jpg"));
            parameters.put("IMAGE", image.getAbsolutePath());
            byte[] bytes = JasperRunManager.runReportToPdf(JasperReportUtils.getNoResultReport(context),
                    parameters, new JREmptyDataSource());
            JasperReportUtils.printPdfToFrontEnd(response, bytes);
        }

    }
}

From source file:tw.edu.chit.struts.action.registration.ReportPrintAction.java

/**
 * ???//w  ww .  j  a  va 2 s.c o  m
 * 
 * @param mapping org.apache.struts.action.ActionMapping object
 * @param form org.apache.struts.action.ActionForm object
 * @param request request javax.servlet.http.HttpServletRequest object
 * @param response response javax.servlet.http.HttpServletResponse object
 * @param sterm 
 */
private void printClassStudentsRegistrationCard(ActionMapping mapping, DynaActionForm form,
        HttpServletRequest request, HttpServletResponse response, String sterm) throws Exception {

    HttpSession session = request.getSession(false);
    MemberManager mm = (MemberManager) getBean(IConstants.MEMBER_MANAGER_BEAN_NAME);
    CourseManager cm = (CourseManager) getBean(IConstants.COURSE_MANAGER_BEAN_NAME);
    ScoreManager sm = (ScoreManager) getBean(IConstants.SCORE_MANAGER_BEAN_NAME);
    ServletContext context = request.getSession().getServletContext();
    String year = cm.getNowBy("School_year"); // ?????
    // String term = form.getString("sterm"); // ??
    List<Clazz> clazzes = sm.findClassBy(new Clazz(processClassInfo(form)),
            getUserCredential(session).getClassInChargeAry(), false);
    if (!clazzes.isEmpty()) {
        List<Student> students = null;
        HSSFSheet sheet = null;
        String departClass = null;
        RegistrationCard rc = null;
        StdImage image = null;
        String studentNo = null;
        int sheetIndex = 0, pictureIndex = 0;
        byte[] bytes = null;
        // CreationHelper helper = null;
        Drawing drawing = null;
        // ClientAnchor anchor = null;
        HSSFClientAnchor anchor1 = null;
        Picture pict = null;
        DateFormat df = new SimpleDateFormat("yyyy/MM/dd");

        File templateXLS = new File(context.getRealPath("/WEB-INF/reports/ClassStudentsRegistrationCard.xls"));
        HSSFWorkbook workbook = Toolket.getHSSFWorkbook(templateXLS);
        HSSFFont fontSize18 = workbook.createFont();
        fontSize18.setFontHeightInPoints((short) 18);
        fontSize18.setFontName("Arial Unicode MS");

        HSSFFont fontSize12 = workbook.createFont();
        fontSize12.setFontHeightInPoints((short) 12);
        fontSize12.setFontName("Arial Unicode MS");

        HSSFFont fontSize11 = workbook.createFont();
        fontSize11.setFontHeightInPoints((short) 11);
        fontSize11.setFontName("Arial Unicode MS");

        HSSFFont fontSize8 = workbook.createFont();
        fontSize8.setFontHeightInPoints((short) 8);
        fontSize8.setFontName("Arial Unicode MS");

        for (Clazz clazz : clazzes) {
            if (!Toolket.isNewStudentClass(clazz.getClassNo()))
                continue;

            departClass = clazz.getClassNo();
            students = mm.findStudentsByClassNo(departClass);
            if (!students.isEmpty()) {

                sheetIndex = 0;
                for (Student student : students) {
                    studentNo = student.getStudentNo();
                    sheet = workbook.getSheetAt(sheetIndex);
                    workbook.setSheetName(sheetIndex++, studentNo.toUpperCase());
                    // Header
                    Toolket.setCellValue(workbook, sheet, 1, 0,
                            Toolket.getCellValue(sheet, 1, 0).replaceAll("YEAR", year), fontSize18,
                            HSSFCellStyle.ALIGN_CENTER, false, null, null);
                    Toolket.setCellValue(workbook, sheet, 1, 13,
                            Toolket.getCellValue(sheet, 1, 13).replaceAll("YEAR", year), fontSize18,
                            HSSFCellStyle.ALIGN_CENTER, false, null, null);

                    // Columns
                    Toolket.setCellValue(workbook, sheet, 2, 1, student.getStudentNo(), fontSize12,
                            HSSFCellStyle.ALIGN_LEFT, true, null, null);
                    Toolket.setCellValue(workbook, sheet, 2, 4, student.getStudentName(), fontSize12,
                            HSSFCellStyle.ALIGN_LEFT, true, null, null);
                    Toolket.setCellValue(workbook, sheet, 2, 8,
                            Toolket.getClassFullName(student.getDepartClass()), fontSize12,
                            HSSFCellStyle.ALIGN_LEFT, true, null, null);
                    Toolket.setCellValue(workbook, sheet, 3, 1,
                            StringUtils.isBlank(student.getStudentEname()) ? "" : student.getStudentEname(),
                            fontSize12, HSSFCellStyle.ALIGN_LEFT, true, false, null, null);
                    Toolket.setCellValue(workbook, sheet, 3, 9, student.getIdno(), fontSize12,
                            HSSFCellStyle.ALIGN_LEFT, true, null, null);
                    Toolket.setCellValue(workbook, sheet, 4, 1, Toolket.getSex(student.getSex()), fontSize12,
                            HSSFCellStyle.ALIGN_CENTER, true, false, null, null);
                    // Toolket.setCellValue(workbook, sheet, 4, 3, df
                    // .format(student.getBirthday()), fontSize11,
                    // HSSFCellStyle.ALIGN_LEFT, true, null, null);
                    Toolket.setCellValue(workbook, sheet, 4, 3,
                            printNativeDate(df.format(student.getBirthday())), fontSize11,
                            HSSFCellStyle.ALIGN_LEFT, true, null, null);
                    Toolket.setCellValue(workbook, sheet, 4, 9,
                            StringUtils.isBlank(student.getIdent()) ? ""
                                    : Toolket.getIdentity(student.getIdent()),
                            fontSize12, HSSFCellStyle.ALIGN_LEFT, true, false, null, null);
                    Toolket.setCellValue(workbook, sheet, 9, 1,
                            (StringUtils.isBlank(student.getPermPost()) ? "" : student.getPermPost()) + "  "
                                    + (StringUtils.isBlank(student.getPermAddr()) ? "" : student.getPermAddr()),
                            fontSize12, HSSFCellStyle.ALIGN_LEFT, true, null, null);
                    Toolket.setCellValue(workbook, sheet, 9, 9, student.getTelephone(), fontSize12,
                            HSSFCellStyle.ALIGN_LEFT, true, false, null, null);
                    Toolket.setCellValue(workbook, sheet, 10, 9, student.getCellPhone(), fontSize12,
                            HSSFCellStyle.ALIGN_LEFT, true, false, null, null);
                    Toolket.setCellValue(workbook, sheet, 11, 2, student.getParentName(), fontSize12,
                            HSSFCellStyle.ALIGN_LEFT, true, false, null, null);
                    Toolket.setCellValue(workbook, sheet, 12, 2,
                            student.getCurrPost() + " " + student.getCurrAddr(), fontSize8,
                            HSSFCellStyle.ALIGN_LEFT, true, null, null);

                    image = new StdImage();
                    image.setStudentNo(student.getStudentNo());
                    image = mm.findStdImageBy(image);
                    if (image != null) {
                        bytes = image.getImage().getBytes(1l, (int) image.getImage().length());
                        // Image im =
                        // java.awt.Toolkit.getDefaultToolkit().getImage(filename);
                        try {
                            pictureIndex = workbook.addPicture(bytes, Workbook.PICTURE_TYPE_JPEG);
                        } catch (Exception e) {
                            try {
                                pictureIndex = workbook.addPicture(bytes, Workbook.PICTURE_TYPE_PNG);
                            } catch (Exception e1) {
                                pictureIndex = workbook.addPicture(bytes, Workbook.PICTURE_TYPE_PICT);
                            }
                        }

                        // helper = workbook.getCreationHelper();
                        drawing = sheet.createDrawingPatriarch();
                        // anchor = helper.createClientAnchor();
                        anchor1 = new HSSFClientAnchor(0, 0, 400, 100, (short) 13, 19, (short) 17, 29);
                        anchor1.setAnchorType(0);
                        // anchor.setCol1(13);
                        // anchor.setRow1(19);
                        pict = drawing.createPicture(anchor1, pictureIndex);
                        try {
                            pict.resize(); // 154611
                            // pict.resize(0.5);
                        } catch (Exception e) {
                            e.printStackTrace();
                            log.error(e.getMessage(), e);
                        }
                    }

                    if (student.getRegistrationCard() != null) {
                        rc = student.getRegistrationCard();
                        Toolket.setCellValue(workbook, sheet, 2, 8,
                                Toolket.getCellValue(sheet, 2, 8) + " "
                                        + (rc.getDiviName() == null ? "" : rc.getDiviName().trim()),
                                fontSize12, HSSFCellStyle.ALIGN_LEFT, true, false, null, null);

                        Toolket.setCellValue(workbook, sheet, 3, 5,
                                StringUtils.isBlank(rc.getBirthCountry()) ? "" : rc.getBirthCountry().trim(),
                                fontSize12, HSSFCellStyle.ALIGN_LEFT, true, false, null, null);
                        Toolket.setCellValue(workbook, sheet, 4, 5,
                                StringUtils.isBlank(rc.getBirthPlace()) ? "" : rc.getBirthPlace().trim(),
                                fontSize12, HSSFCellStyle.ALIGN_LEFT, true, false, null, null);
                        Toolket.setCellValue(workbook, sheet, 5, 2,
                                StringUtils.isBlank(rc.getAborigine()) ? "" : rc.getAborigine().trim(),
                                fontSize12, HSSFCellStyle.ALIGN_LEFT, true, false, null, null);
                        Toolket.setCellValue(workbook, sheet, 5, 5,
                                StringUtils.isBlank(rc.getForeignPlace()) ? "" : rc.getForeignPlace().trim(),
                                fontSize12, HSSFCellStyle.ALIGN_LEFT, true, false, null, null);
                        Toolket.setCellValue(workbook, sheet, 5, 9,
                                rc.getArmyIn() == null ? "?"
                                        : "?" + df.format(rc.getArmyIn()),
                                fontSize12, HSSFCellStyle.ALIGN_LEFT, true, false, null, null);
                        Toolket.setCellValue(workbook, sheet, 6, 9,
                                rc.getArmyOut() == null ? "?"
                                        : "?" + df.format(rc.getArmyOut()),
                                fontSize12, HSSFCellStyle.ALIGN_LEFT, true, false, null, null);
                        Toolket.setCellValue(workbook, sheet, 7, 3,
                                StringUtils.isBlank(rc.getBeforeSchool()) ? "" : rc.getBeforeSchool().trim(),
                                fontSize12, HSSFCellStyle.ALIGN_LEFT, true, false, null, null);
                        Toolket.setCellValue(workbook, sheet, 7, 9,
                                StringUtils.isBlank(rc.getGradeYear()) ? "" : rc.getGradeYear(), fontSize12,
                                HSSFCellStyle.ALIGN_LEFT, true, false, null, null);
                        Toolket.setCellValue(workbook, sheet, 7, 11,
                                rc.getGradeType() == null ? "" : rc.getGradeType().toString(), fontSize12,
                                HSSFCellStyle.ALIGN_LEFT, true, false, null, null);
                        Toolket.setCellValue(workbook, sheet, 8, 3,
                                StringUtils.isBlank(rc.getBeforeDept()) ? "" : rc.getBeforeDept().trim(),
                                fontSize12, HSSFCellStyle.ALIGN_LEFT, true, false, null, null);
                        Toolket.setCellValue(workbook, sheet, 11, 5,
                                StringUtils.isBlank(rc.getParentAge()) ? "" : rc.getParentAge().trim(),
                                fontSize12, HSSFCellStyle.ALIGN_CENTER, true, false, null, null);
                        Toolket.setCellValue(workbook, sheet, 11, 7,
                                StringUtils.isBlank(rc.getParentCareer()) ? "" : rc.getParentCareer().trim(),
                                fontSize12, HSSFCellStyle.ALIGN_LEFT, true, false, null, null);
                        Toolket.setCellValue(workbook, sheet, 11, 11,
                                StringUtils.isBlank(rc.getParentRelationship()) ? ""
                                        : rc.getParentRelationship().trim(),
                                fontSize12, HSSFCellStyle.ALIGN_LEFT, true, false, null, null);
                        Toolket.setCellValue(workbook, sheet, 12, 10,
                                StringUtils.isBlank(rc.getEmergentPhone()) ? "" : rc.getEmergentPhone().trim(),
                                fontSize12, HSSFCellStyle.ALIGN_LEFT, true, false, null, null);
                        Toolket.setCellValue(workbook, sheet, 13, 10,
                                StringUtils.isBlank(rc.getEmergentCell()) ? "" : rc.getEmergentCell().trim(),
                                fontSize12, HSSFCellStyle.ALIGN_LEFT, true, false, null, null);
                        Toolket.setCellValue(workbook, sheet, 15, 1,
                                StringUtils.isBlank(rc.getMemberTitle1()) ? "" : rc.getMemberTitle1().trim(),
                                fontSize12, HSSFCellStyle.ALIGN_CENTER, true, false, null, null);
                        Toolket.setCellValue(workbook, sheet, 15, 2,
                                StringUtils.isBlank(rc.getMemberName1()) ? "" : rc.getMemberName1().trim(),
                                fontSize12, HSSFCellStyle.ALIGN_CENTER, true, false, null, null);
                        Toolket.setCellValue(workbook, sheet, 15, 4,
                                StringUtils.isBlank(rc.getMemberAge1()) ? "" : rc.getMemberAge1().trim(),
                                fontSize12, HSSFCellStyle.ALIGN_CENTER, true, false, null, null);
                        Toolket.setCellValue(workbook, sheet, 15, 5,
                                StringUtils.isBlank(rc.getMemberCareer1()) ? "" : rc.getMemberCareer1().trim(),
                                fontSize12, HSSFCellStyle.ALIGN_CENTER, true, false, null, null);

                        Toolket.setCellValue(workbook, sheet, 15, 7,
                                StringUtils.isBlank(rc.getMemberTitle2()) ? "" : rc.getMemberTitle2().trim(),
                                fontSize12, HSSFCellStyle.ALIGN_CENTER, true, false, null, null);
                        Toolket.setCellValue(workbook, sheet, 15, 8,
                                StringUtils.isBlank(rc.getMemberName2()) ? "" : rc.getMemberName2().trim(),
                                fontSize12, HSSFCellStyle.ALIGN_CENTER, true, false, null, null);
                        Toolket.setCellValue(workbook, sheet, 15, 10,
                                StringUtils.isBlank(rc.getMemberAge2()) ? "" : rc.getMemberAge2().trim(),
                                fontSize12, HSSFCellStyle.ALIGN_CENTER, true, false, null, null);
                        Toolket.setCellValue(workbook, sheet, 15, 11,
                                StringUtils.isBlank(rc.getMemberCareer2()) ? "" : rc.getMemberCareer2().trim(),
                                fontSize12, HSSFCellStyle.ALIGN_CENTER, true, false, null, null);

                        Toolket.setCellValue(workbook, sheet, 16, 1,
                                StringUtils.isBlank(rc.getMemberTitle3()) ? "" : rc.getMemberTitle3().trim(),
                                fontSize12, HSSFCellStyle.ALIGN_CENTER, true, false, null, null);
                        Toolket.setCellValue(workbook, sheet, 16, 2,
                                StringUtils.isBlank(rc.getMemberName3()) ? "" : rc.getMemberName3().trim(),
                                fontSize12, HSSFCellStyle.ALIGN_CENTER, true, false, null, null);
                        Toolket.setCellValue(workbook, sheet, 16, 4,
                                StringUtils.isBlank(rc.getMemberAge3()) ? "" : rc.getMemberAge3().trim(),
                                fontSize12, HSSFCellStyle.ALIGN_CENTER, true, false, null, null);
                        Toolket.setCellValue(workbook, sheet, 16, 5,
                                StringUtils.isBlank(rc.getMemberCareer3()) ? "" : rc.getMemberCareer3().trim(),
                                fontSize12, HSSFCellStyle.ALIGN_CENTER, true, false, null, null);

                        Toolket.setCellValue(workbook, sheet, 16, 7,
                                StringUtils.isBlank(rc.getMemberTitle4()) ? "" : rc.getMemberTitle4().trim(),
                                fontSize12, HSSFCellStyle.ALIGN_CENTER, true, false, null, null);
                        Toolket.setCellValue(workbook, sheet, 16, 8,
                                StringUtils.isBlank(rc.getMemberName4()) ? "" : rc.getMemberName4().trim(),
                                fontSize12, HSSFCellStyle.ALIGN_CENTER, true, false, null, null);
                        Toolket.setCellValue(workbook, sheet, 16, 10,
                                StringUtils.isBlank(rc.getMemberAge4()) ? "" : rc.getMemberAge4().trim(),
                                fontSize12, HSSFCellStyle.ALIGN_CENTER, true, false, null, null);
                        Toolket.setCellValue(workbook, sheet, 16, 11,
                                StringUtils.isBlank(rc.getMemberCareer4()) ? "" : rc.getMemberCareer4().trim(),
                                fontSize12, HSSFCellStyle.ALIGN_CENTER, true, false, null, null);
                    }

                }

            }
        }

        File tempDir = new File(
                context.getRealPath("/WEB-INF/reports/temp/" + getUserCredential(session).getMember().getIdno()
                        + (new SimpleDateFormat("yyyyMMdd").format(new Date()))));
        if (!tempDir.exists())
            tempDir.mkdirs();

        File output = new File(tempDir, "ClassStudentRegistrationCard.xls");
        FileOutputStream fos = new FileOutputStream(output);
        workbook.write(fos);
        fos.close();

        JasperReportUtils.printXlsToFrontEnd(response, output);
        output.delete();
        tempDir.delete();
    } else {
        Map<String, String> param = new HashMap<String, String>();
        File image = new File(context.getRealPath("/pages/images/2002chitS.jpg"));
        param.put("IMAGE", image.getAbsolutePath());
        byte[] bytes = JasperRunManager.runReportToPdf(JasperReportUtils.getNoResultReport(context), param,
                new JREmptyDataSource());
        JasperReportUtils.printPdfToFrontEnd(response, bytes);
    }
}

From source file:tw.edu.chit.struts.action.registration.ReportPrintAction.java

/**
 * ?//from www  . j  ava2  s. c o  m
 * 
 * @param mapping
 * @param form
 * @param request
 * @param response
 * @param sterm
 * @throws Exception
 */
@SuppressWarnings("unchecked")
private void printStayTimePrint(ActionMapping mapping, DynaActionForm form, HttpServletRequest request,
        HttpServletResponse response, String sterm) throws Exception {

    HttpSession session = request.getSession(false);
    MemberManager mm = (MemberManager) getBean(IConstants.MEMBER_MANAGER_BEAN_NAME);
    CourseManager cm = (CourseManager) getBean(IConstants.COURSE_MANAGER_BEAN_NAME);
    ScoreManager sm = (ScoreManager) getBean(IConstants.SCORE_MANAGER_BEAN_NAME);
    ServletContext context = request.getSession().getServletContext();
    Integer year = Integer.valueOf(cm.getNowBy("School_year"));
    String term = form.getString("sterm");
    // Short dayCode = Short.valueOf(form.getString("dayCode"));
    // String nodeCode = form.getString("nodeCode");
    List<Clazz> clazzes = sm.findClassBy(new Clazz(processClassInfo(form)),
            getUserCredential(session).getClassInChargeAry(), true);

    if (!clazzes.isEmpty()) {

        File templateXLS = new File(context.getRealPath("/WEB-INF/reports/TeachSchedAll.xls"));
        HSSFWorkbook workbook = Toolket.getHSSFWorkbook(templateXLS);

        HSSFFont fontSize12 = workbook.createFont();
        fontSize12.setFontHeightInPoints((short) 12);
        fontSize12.setFontName("Arial Unicode MS");

        HSSFSheet sheet = null;
        int sheetIndex = 0, colOffset = 1, col = 0;
        boolean isLocationNull = false;
        String departClass = null;
        Dtime dtime = null;
        Empl empl = null;
        Set<String> idnoSet = new HashSet<String>();
        Short colorForStayTime = HSSFColor.AUTOMATIC.index;
        Short colorForLifeCounseling = HSSFColor.LIGHT_GREEN.index;
        List<TeacherStayTime> tsts = null;
        List<LifeCounseling> lcs = null;
        List<Dtime> dtimes = null;
        List<Map> map = null;
        Map content = null;

        for (Clazz clazz : clazzes) {
            departClass = clazz.getClassNo();

            dtime = new Dtime();
            dtime.setDepartClass(departClass);
            dtime.setSterm(sterm);
            dtimes = cm.findDtimeBy(dtime, "cscode");
            if (!dtimes.isEmpty()) {
                for (Dtime d : dtimes) {
                    if (StringUtils.isNotBlank(d.getTechid()))
                        idnoSet.add(d.getTechid());
                }
            }
        }

        for (String idno : idnoSet) {
            empl = mm.findEmplByIdno(idno);
            if (empl != null && "1".equalsIgnoreCase(empl.getCategory())) {

                sheet = workbook.getSheetAt(sheetIndex);
                workbook.setSheetName(sheetIndex++, empl.getCname());
                isLocationNull = empl.getLocation() == null;

                Toolket.setCellValue(sheet, 0, 1, year + "" + term + "" + empl.getCname()
                        + "?" + " (:"
                        + (isLocationNull ? ""
                                : StringUtils.defaultIfEmpty(empl.getLocation().getExtension(), ""))
                        + " ?:"
                        + (isLocationNull ? "" : StringUtils.defaultIfEmpty(empl.getLocation().getRoomId(), ""))
                        + ")");
                map = cm.findCourseByTeacherTermWeekdaySched(empl.getIdno(), term.toString());

                for (int i = 0; i < 14; i++) {
                    for (int j = 0; j < 7; j++) {
                        content = map.get(j * 15 + i);
                        if (!CollectionUtils.isEmpty(content)) {
                            Toolket.setCellValue(sheet, i + 2, j + 2, (String) content.get("ClassName") + "\n"
                                    + (String) content.get("chi_name") + "\n" + (String) content.get("place"));
                        }
                    }
                }

                tsts = empl.getStayTime();
                for (TeacherStayTime tst : tsts) {
                    col = tst.getWeek() + colOffset;
                    if (tst.getNode1() != null && tst.getNode1() == 1) {
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 2, col)))
                            Toolket.setCellValue(workbook, sheet, 2, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForStayTime);
                    }
                    if (tst.getNode2() != null && tst.getNode2() == 1) {
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 3, col)))
                            Toolket.setCellValue(workbook, sheet, 3, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForStayTime);
                    }
                    if (tst.getNode3() != null && tst.getNode3() == 1) {
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 4, col)))
                            Toolket.setCellValue(workbook, sheet, 4, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForStayTime);
                    }
                    if (tst.getNode4() != null && tst.getNode4() == 1) {
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 5, col)))
                            Toolket.setCellValue(workbook, sheet, 5, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForStayTime);
                    }
                    if (tst.getNode5() != null && tst.getNode5() == 1) {
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 6, col)))
                            Toolket.setCellValue(workbook, sheet, 6, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForStayTime);
                    }
                    if (tst.getNode6() != null && tst.getNode6() == 1) {
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 7, col)))
                            Toolket.setCellValue(workbook, sheet, 7, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForStayTime);
                    }
                    if (tst.getNode7() != null && tst.getNode7() == 1) {
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 8, col)))
                            Toolket.setCellValue(workbook, sheet, 8, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForStayTime);
                    }
                    if (tst.getNode8() != null && tst.getNode8() == 1) {
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 9, col)))
                            Toolket.setCellValue(workbook, sheet, 9, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForStayTime);
                    }
                    if (tst.getNode9() != null && tst.getNode9() == 1) {
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 10, col)))
                            Toolket.setCellValue(workbook, sheet, 10, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForStayTime);
                    }
                    if (tst.getNode10() != null && tst.getNode10() == 1) {
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 11, col)))
                            Toolket.setCellValue(workbook, sheet, 11, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForStayTime);
                    }
                    if (tst.getNode11() != null && tst.getNode11() == 1) {
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 12, col)))
                            Toolket.setCellValue(workbook, sheet, 12, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForStayTime);
                    }
                    if (tst.getNode12() != null && tst.getNode12() == 1) {
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 13, col)))
                            Toolket.setCellValue(workbook, sheet, 13, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForStayTime);
                    }
                    if (tst.getNode13() != null && tst.getNode13() == 1) {
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 14, col)))
                            Toolket.setCellValue(workbook, sheet, 14, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForStayTime);
                    }
                    if (tst.getNode14() != null && tst.getNode14() == 1) {
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 15, col)))
                            Toolket.setCellValue(workbook, sheet, 15, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForStayTime);
                    }
                }

                lcs = empl.getLifeCounseling();
                colOffset = 1;
                col = 0;
                for (LifeCounseling lc : lcs) {
                    col = lc.getWeek() + colOffset;
                    if (lc.getNode1() != null && lc.getNode1() == 1) {
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 2, col)))
                            Toolket.setCellValue(workbook, sheet, 2, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForLifeCounseling);
                    }
                    if (lc.getNode2() != null && lc.getNode2() == 1) {
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 3, col)))
                            Toolket.setCellValue(workbook, sheet, 3, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForLifeCounseling);
                    }
                    if (lc.getNode3() != null && lc.getNode3() == 1) {
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 4, col)))
                            Toolket.setCellValue(workbook, sheet, 4, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForLifeCounseling);
                    }
                    if (lc.getNode4() != null && lc.getNode4() == 1) {
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 5, col)))
                            Toolket.setCellValue(workbook, sheet, 5, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForLifeCounseling);
                    }
                    if (lc.getNode5() != null && lc.getNode5() == 1) {
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 6, col)))
                            Toolket.setCellValue(workbook, sheet, 6, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForLifeCounseling);
                    }
                    if (lc.getNode6() != null && lc.getNode6() == 1) {
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 7, col)))
                            Toolket.setCellValue(workbook, sheet, 7, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForLifeCounseling);
                    }
                    if (lc.getNode7() != null && lc.getNode7() == 1) {
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 8, col)))
                            Toolket.setCellValue(workbook, sheet, 8, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForLifeCounseling);
                    }
                    if (lc.getNode8() != null && lc.getNode8() == 1) {
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 9, col)))
                            Toolket.setCellValue(workbook, sheet, 9, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForLifeCounseling);
                    }
                    if (lc.getNode9() != null && lc.getNode9() == 1) {
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 10, col)))
                            Toolket.setCellValue(workbook, sheet, 10, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForLifeCounseling);
                    }
                    if (lc.getNode10() != null && lc.getNode10() == 1) {
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 11, col)))
                            Toolket.setCellValue(workbook, sheet, 11, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForLifeCounseling);
                    }
                    if (lc.getNode11() != null && lc.getNode11() == 1) {
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 12, col)))
                            Toolket.setCellValue(workbook, sheet, 12, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForLifeCounseling);
                    }
                    if (lc.getNode12() != null && lc.getNode12() == 1) {
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 13, col)))
                            Toolket.setCellValue(workbook, sheet, 13, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForLifeCounseling);
                    }
                    if (lc.getNode13() != null && lc.getNode13() == 1) {
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 14, col)))
                            Toolket.setCellValue(workbook, sheet, 14, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForLifeCounseling);
                    }
                    if (lc.getNode14() != null && lc.getNode14() == 1) {
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 15, col)))
                            Toolket.setCellValue(workbook, sheet, 15, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForLifeCounseling);
                    }
                }

            }
        }

        File tempDir = new File(
                context.getRealPath("/WEB-INF/reports/temp/" + getUserCredential(session).getMember().getIdno()
                        + (new SimpleDateFormat("yyyyMMdd").format(new Date()))));
        if (!tempDir.exists())
            tempDir.mkdirs();

        File output = new File(tempDir, "StayTimeList.xls");
        FileOutputStream fos = new FileOutputStream(output);
        workbook.write(fos);
        fos.close();

        JasperReportUtils.printXlsToFrontEnd(response, output);
        output.delete();
        tempDir.delete();

    }
}

From source file:tw.edu.chit.struts.action.registration.ReportPrintAction.java

/**
 * (?)/*from  ww  w.  j ava2 s .c o  m*/
 * 
 * @param mapping
 * @param form
 * @param request
 * @param response
 * @param sterm
 * @throws Exception
 */
@SuppressWarnings("unchecked")
private void printGstmdList4Ntnu(ActionMapping mapping, DynaActionForm form, HttpServletRequest request,
        HttpServletResponse response, String sterm) throws Exception {

    HttpSession session = request.getSession(false);
    AdminManager am = (AdminManager) getBean(IConstants.ADMIN_MANAGER_BEAN_NAME);
    MemberManager mm = (MemberManager) getBean(IConstants.MEMBER_MANAGER_BEAN_NAME);
    CourseManager cm = (CourseManager) getBean(IConstants.COURSE_MANAGER_BEAN_NAME);
    ScoreManager sm = (ScoreManager) getBean(IConstants.SCORE_MANAGER_BEAN_NAME);
    ServletContext context = request.getSession().getServletContext();
    String thisYear = cm.getNowBy("School_year");
    // String thisTerm = am.findTermBy(PARAMETER_SCHOOL_TERM);
    List<Clazz> clazzes = sm.findClassBy(new Clazz(processClassInfo(form)),
            getUserCredential(session).getClassInChargeAry(), false);

    String departClass = null;
    List<Student> students = null;
    DateFormat df = new SimpleDateFormat("yyyy/MM/dd");
    Example example = null;
    Gmark gmark = null;
    boolean flag = false;
    Calendar now = Calendar.getInstance();
    String year = String.valueOf(now.get(Calendar.YEAR) - 1911);

    if (!clazzes.isEmpty()) {
        File templateXLS = new File(context.getRealPath("/WEB-INF/reports/GstmdList4Ntnu.xls"));
        HSSFWorkbook workbook = Toolket.getHSSFWorkbook(templateXLS);
        HSSFSheet sheet = workbook.getSheetAt(0);
        workbook.setSheetName(0, thisYear + "?");

        HSSFFont fontSize10 = workbook.createFont();
        fontSize10.setFontHeightInPoints((short) 10);
        fontSize10.setFontName("Arial Unicode MS");

        int index = 2;
        String entrance = null;

        for (Clazz clazz : clazzes) {
            departClass = clazz.getClassNo();
            if (Toolket.isGraduateClass(departClass) || Toolket.isDelayClass(departClass)) {

                students = mm.findStudentsByClassNo(departClass);
                for (Student student : students) {
                    Toolket.setCellValue(sheet, index, 0, "1061");
                    Toolket.setCellValue(sheet, index, 1, student.getStudentNo());

                    entrance = student.getEntrance() == null ? "" : student.getEntrance().toString();
                    if (StringUtils.isNotBlank(entrance)) {
                        Toolket.setCellValue(sheet, index, 2, StringUtils.substring(entrance, 0, 2));
                        Toolket.setCellValue(sheet, index, 3,
                                StringUtils.substring(entrance, 2).startsWith("0")
                                        ? StringUtils.substring(entrance, 3)
                                        : StringUtils.substring(entrance, 2));
                    } else {

                        Toolket.setCellValue(sheet, index, 2, "");
                        Toolket.setCellValue(sheet, index, 3, "");
                    }

                    Toolket.setCellValue(sheet, index, 4, year); // 
                    Toolket.setCellValue(sheet, index, 5, "6"); // ???

                    Toolket.setCellValue(sheet, index, 6, Toolket.getDeptCode4Ntnu(student.getDepartClass()));
                    Toolket.setCellValue(sheet, index, 7, Toolket.getDepartName(student.getDepartClass()));
                    Toolket.setCellValue(sheet, index, 8, student.getDivi());
                    Toolket.setCellValue(sheet, index, 9, Toolket.getClassFullName(student.getDepartClass()));
                    Toolket.setCellValue(sheet, index, 10, Toolket.getCampCode4Ntnu(student.getDepartClass()));
                    Toolket.setCellValue(sheet, index, 11, student.getStudentName());
                    Toolket.setCellValue(sheet, index, 12, student.getIdno());
                    Toolket.setCellValue(sheet, index, 13, df.format(student.getBirthday()));
                    Toolket.setCellValue(sheet, index, 14, student.getSex());
                    Toolket.setCellValue(sheet, index, 15,
                            StringUtils.isBlank(student.getEmail())
                                    ? Toolket.getDefaultStudentEmail(student, "")
                                    : student.getEmail());
                    Toolket.setCellValue(sheet, index, 16, student.getCurrPost());
                    Toolket.setCellValue(sheet, index, 17, student.getCurrAddr());
                    Toolket.setCellValue(sheet, index, 18,
                            "3".equals(student.getIdent()) || "E".equals(student.getIdent()) ? "1" : "0");
                    Toolket.setCellValue(sheet, index, 19, "5".equals(student.getIdent()) ? "2" : "1");
                    Toolket.setCellValue(sheet, index, 20, "0");
                    // ??0(???)
                    Toolket.setCellValue(sheet, index, 21, !Toolket.isMasterClass(student.getDepartClass())
                            && Toolket.isDelayClass(student.getDepartClass()) ? "1" : "0");

                    if ("3".equals(student.getOccurStatus())
                            && !Toolket.isMasterClass(student.getDepartClass()))
                        Toolket.setCellValue(sheet, index, 22, "8"); // ??
                    else
                        Toolket.setCellValue(sheet, index, 22, Toolket.get4IdentNtnu(student.getIdent(),
                                Toolket.isMasterClass(student.getDepartClass())));

                    gmark = new Gmark();
                    gmark.setStudentNo(student.getStudentNo());
                    gmark.setOccurStatus("5");
                    example = Example.create(gmark);
                    flag = !((List<Gmark>) am.findSQLWithCriteria(Gmark.class, example, null, null)).isEmpty();

                    Toolket.setCellValue(sheet, index, 23, flag ? "1" : "0");
                    Toolket.setCellValue(sheet, index, 24,
                            "1".equals(student.getExtraStatus()) || "E".equals(student.getExtraStatus()) ? "1"
                                    : "0");
                    Toolket.setCellValue(sheet, index, 25,
                            "2".equals(student.getExtraStatus()) || "T".equals(student.getExtraStatus()) ? "1"
                                    : "0");

                    gmark.setOccurStatus("1");
                    example = Example.create(gmark);
                    flag = !((List<Gmark>) am.findSQLWithCriteria(Gmark.class, example, null, null)).isEmpty();
                    Toolket.setCellValue(sheet, index++, 26, flag ? "1" : "0");
                }
            }
        }

        File tempDir = new File(
                context.getRealPath("/WEB-INF/reports/temp/" + getUserCredential(session).getMember().getIdno()
                        + (new SimpleDateFormat("yyyyMMdd").format(new Date()))));
        if (!tempDir.exists())
            tempDir.mkdirs();

        File output = new File(tempDir, "GstmdList4Ntnu.xls");
        FileOutputStream fos = new FileOutputStream(output);
        workbook.write(fos);
        fos.close();

        JasperReportUtils.printXlsToFrontEnd(response, output);
        output.delete();
        tempDir.delete();
    }
}

From source file:tw.edu.chit.struts.action.registration.ReportPrintAction.java

/**
 * 1,3(?)/*from  w w  w .  j  a v  a  2 s  .c o  m*/
 * 
 * @param mapping
 * @param form
 * @param request
 * @param response
 * @param sterm
 * @throws Exception
 */
private void printGstmdList4Ntnu1(ActionMapping mapping, DynaActionForm form, HttpServletRequest request,
        HttpServletResponse response, String sterm) throws Exception {

    HttpSession session = request.getSession(false);
    MemberManager mm = (MemberManager) getBean(IConstants.MEMBER_MANAGER_BEAN_NAME);
    ScoreManager sm = (ScoreManager) getBean(IConstants.SCORE_MANAGER_BEAN_NAME);
    ServletContext context = request.getSession().getServletContext();
    List<Clazz> clazzes = sm.findClassBy(new Clazz(processClassInfo(form)),
            getUserCredential(session).getClassInChargeAry(), false);

    String departClass = null;
    List<Student> students = null;
    DateFormat df = new SimpleDateFormat("yyyy/MM/dd");

    if (!clazzes.isEmpty()) {
        File templateXLS = new File(context.getRealPath("/WEB-INF/reports/GstmdList4Ntnu1.xls"));
        HSSFWorkbook workbook = Toolket.getHSSFWorkbook(templateXLS);
        HSSFSheet sheet = workbook.getSheetAt(0);
        workbook.setSheetName(0, "13?");

        HSSFFont fontSize10 = workbook.createFont();
        fontSize10.setFontHeightInPoints((short) 10);
        fontSize10.setFontName("Arial Unicode MS");

        int index = 2;
        String[] includeGrade = { "1", "3" }; // 
        String[] excludeIdent = { "7", "8" }; // , ?

        for (Clazz clazz : clazzes) {
            departClass = clazz.getClassNo();
            if (ArrayUtils.contains(includeGrade, clazz.getGrade())) {

                students = mm.findStudentsByClassNo(departClass);
                for (Student student : students) {
                    if (!ArrayUtils.contains(excludeIdent, student.getIdent())) {
                        Toolket.setCellValue(sheet, index, 0, "1061");
                        Toolket.setCellValue(sheet, index, 1,
                                String.valueOf(ArrayUtils.indexOf(includeGrade, clazz.getGrade()) + 1));
                        Toolket.setCellValue(sheet, index, 2, student.getStudentNo());
                        Toolket.setCellValue(sheet, index, 3,
                                Toolket.getDeptCode4Ntnu(student.getDepartClass()));
                        Toolket.setCellValue(sheet, index, 4, Toolket.getDepartName(student.getDepartClass()));
                        Toolket.setCellValue(sheet, index, 5, student.getDivi());
                        Toolket.setCellValue(sheet, index, 6,
                                Toolket.getCampCode4Ntnu(student.getDepartClass()));
                        Toolket.setCellValue(sheet, index, 7, student.getStudentName());
                        Toolket.setCellValue(sheet, index, 8, student.getIdno());
                        Toolket.setCellValue(sheet, index, 9, df.format(student.getBirthday()));
                        Toolket.setCellValue(sheet, index, 10, student.getSex());
                        Toolket.setCellValue(sheet, index, 11, Toolket.getDefaultStudentEmail(student, ""));
                        Toolket.setCellValue(sheet, index, 12, StringUtils.trimToEmpty(student.getEmail()));
                        // ?
                        Toolket.setCellValue(sheet, index, 13, student.getCurrPost());
                        Toolket.setCellValue(sheet, index, 14, student.getCurrAddr());
                        Toolket.setCellValue(sheet, index, 15, "0");
                        Toolket.setCellValue(sheet, index, 16, "5".equals(student.getIdent()) ? "1" : "0");
                        Toolket.setCellValue(sheet, index, 17, "0");
                        Toolket.setCellValue(sheet, index, 18, "3".equals(student.getOccurStatus()) ? "8"
                                : Toolket.get4IdentNtnu(student.getIdent(), false));
                        Toolket.setCellValue(sheet, index++, 19, "0");
                    }
                }
            }
        }

        File tempDir = new File(
                context.getRealPath("/WEB-INF/reports/temp/" + getUserCredential(session).getMember().getIdno()
                        + (new SimpleDateFormat("yyyyMMdd").format(new Date()))));
        if (!tempDir.exists())
            tempDir.mkdirs();

        File output = new File(tempDir, "GstmdList4Ntnu1.xls");
        FileOutputStream fos = new FileOutputStream(output);
        workbook.write(fos);
        fos.close();

        JasperReportUtils.printXlsToFrontEnd(response, output);
        output.delete();
        tempDir.delete();
    }
}

From source file:tw.edu.chit.struts.action.secretary.ReportPrintAction.java

/**
 * ?/* w ww .j a  v  a  2 s  .c  om*/
 * 
 * @param mapping org.apache.struts.action.ActionMapping object
 * @param form org.apache.struts.action.ActionForm object
 * @param request request javax.servlet.http.HttpServletRequest object
 * @param response response javax.servlet.http.HttpServletResponse object
 * @param sterm 
 */
@SuppressWarnings("unchecked")
private void printStayTimeList(ActionMapping mapping, DynaActionForm form, HttpServletRequest request,
        HttpServletResponse response, String sterm) throws Exception {

    HttpSession session = request.getSession(false);
    MemberManager mm = (MemberManager) getBean(IConstants.MEMBER_MANAGER_BEAN_NAME);
    CourseManager cm = (CourseManager) getBean(IConstants.COURSE_MANAGER_BEAN_NAME);
    ServletContext context = request.getSession().getServletContext();
    String year = cm.getNowBy("School_year");
    String term = form.getString("sterm");

    List<Empl> empls = mm.findAllTeacher(term);
    if (!empls.isEmpty()) {

        File templateXLS = new File(context.getRealPath("/WEB-INF/reports/TeachSchedAll.xls"));
        HSSFWorkbook workbook = Toolket.getHSSFWorkbook(templateXLS);

        HSSFFont fontSize12 = workbook.createFont();
        fontSize12.setFontHeightInPoints((short) 12);
        fontSize12.setFontName("");

        int sheetIndex = 0;
        int colOffset = 1, col = 0;
        boolean isLocationNull = false;
        HSSFSheet sheet = null;
        List<Map> map = null;
        List<TeacherStayTime> tsts = null;
        List<LifeCounseling> lcs = null;
        Map content = null;
        Short colorForStayTime = HSSFColor.AUTOMATIC.index;
        Short colorForLifeCounseling = HSSFColor.LIGHT_GREEN.index;

        for (Empl empl : empls) {

            if ("1".equalsIgnoreCase(empl.getCategory())) {

                sheet = workbook.getSheetAt(sheetIndex);
                workbook.setSheetName(sheetIndex++, empl.getCname());
                isLocationNull = empl.getLocation() == null;

                Toolket.setCellValue(sheet, 0, 1, year + "" + term + "" + empl.getCname()
                        + "?" + " (:"
                        + (isLocationNull ? ""
                                : StringUtils.defaultIfEmpty(empl.getLocation().getExtension(), ""))
                        + " ?:"
                        + (isLocationNull ? "" : StringUtils.defaultIfEmpty(empl.getLocation().getRoomId(), ""))
                        + ")");
                map = cm.findCourseByTeacherTermWeekdaySched(empl.getIdno(), term.toString());

                for (int i = 0; i < 14; i++) {
                    for (int j = 0; j < 7; j++) {
                        content = map.get(j * 15 + i);
                        if (!CollectionUtils.isEmpty(content)) {
                            Toolket.setCellValue(sheet, i + 2, j + 2, (String) content.get("ClassName") + "\n"
                                    + (String) content.get("chi_name") + "\n" + (String) content.get("place"));
                        }
                    }
                }

                //tsts = empl.getStayTime();
                List<TeacherStayTime> myTsts = cm.ezGetBy(
                        " Select Week, Node1, Node2, Node3, Node4, Node5, Node6, Node7, Node8, Node9, Node10, "
                                + "        Node11, Node12, Node13, Node14 " + " From TeacherStayTime "
                                + " Where SchoolYear='" + year + "'" + "   And SchoolTerm='" + term + "' "
                                + "   And parentOid='" + empl.getOid() + "'");

                List myTsts2 = new ArrayList();

                for (int i = 0; i < myTsts.size(); i++) {
                    //for (TeacherStayTime tst : tsts) {                                    
                    myTsts2.add(myTsts.get(i));
                    String s = myTsts2.get(i).toString();
                    col = Integer.parseInt(s.substring(6, 7)) + colOffset; //Week   
                    //col = tst.getWeek() + colOffset;
                    //if (tst.getNode1() != null && tst.getNode1() == 1) {                  
                    if (Integer.parseInt(s.substring(15, 16)) == 1) { //Node1
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 2, col)))
                            Toolket.setCellValue(workbook, sheet, 2, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForStayTime);
                    }
                    //if (tst.getNode2() != null && tst.getNode2() == 1) {
                    if (Integer.parseInt(s.substring(24, 25)) == 1) { //Node2
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 3, col)))
                            Toolket.setCellValue(workbook, sheet, 3, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForStayTime);
                    }
                    //if (tst.getNode3() != null && tst.getNode3() == 1) {
                    if (Integer.parseInt(s.substring(33, 34)) == 1) { //Node3
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 4, col)))
                            Toolket.setCellValue(workbook, sheet, 4, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForStayTime);
                    }
                    //if (tst.getNode4() != null && tst.getNode4() == 1) {
                    if (Integer.parseInt(s.substring(42, 43)) == 1) { //Node4
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 5, col)))
                            Toolket.setCellValue(workbook, sheet, 5, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForStayTime);
                    }
                    //if (tst.getNode5() != null && tst.getNode5() == 1) {
                    if (Integer.parseInt(s.substring(51, 52)) == 1) { //Node5
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 6, col)))
                            Toolket.setCellValue(workbook, sheet, 6, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForStayTime);
                    }
                    //if (tst.getNode6() != null && tst.getNode6() == 1) {
                    if (Integer.parseInt(s.substring(60, 61)) == 1) { //Node6
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 7, col)))
                            Toolket.setCellValue(workbook, sheet, 7, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForStayTime);
                    }
                    //if (tst.getNode7() != null && tst.getNode7() == 1) {
                    if (Integer.parseInt(s.substring(69, 70)) == 1) { //Node7
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 8, col)))
                            Toolket.setCellValue(workbook, sheet, 8, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForStayTime);
                    }
                    //if (tst.getNode8() != null && tst.getNode8() == 1) {
                    if (Integer.parseInt(s.substring(78, 79)) == 1) { //Node8
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 9, col)))
                            Toolket.setCellValue(workbook, sheet, 9, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForStayTime);
                    }
                    //if (tst.getNode9() != null && tst.getNode9() == 1) {
                    if (Integer.parseInt(s.substring(87, 88)) == 1) { //Node9
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 10, col)))
                            Toolket.setCellValue(workbook, sheet, 10, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForStayTime);
                    }
                    //if (tst.getNode10() != null && tst.getNode10() == 1) {
                    if (Integer.parseInt(s.substring(97, 98)) == 1) { //Node10
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 11, col)))
                            Toolket.setCellValue(workbook, sheet, 11, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForStayTime);
                    }
                    //if (tst.getNode11() != null && tst.getNode11() == 1) {
                    if (Integer.parseInt(s.substring(107, 108)) == 1) { //Node11
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 12, col)))
                            Toolket.setCellValue(workbook, sheet, 12, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForStayTime);
                    }
                    //if (tst.getNode12() != null && tst.getNode12() == 1) {
                    if (Integer.parseInt(s.substring(117, 118)) == 1) { //Node12
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 13, col)))
                            Toolket.setCellValue(workbook, sheet, 13, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForStayTime);
                    }
                    //if (tst.getNode13() != null && tst.getNode13() == 1) {
                    if (Integer.parseInt(s.substring(127, 128)) == 1) { //Node13
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 14, col)))
                            Toolket.setCellValue(workbook, sheet, 14, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForStayTime);
                    }
                    //if (tst.getNode14() != null && tst.getNode14() == 1) {
                    if (Integer.parseInt(s.substring(137, 138)) == 1) { //Node14
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 15, col)))
                            Toolket.setCellValue(workbook, sheet, 15, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForStayTime);
                    }
                }

                //lcs = empl.getLifeCounseling();
                List<LifeCounseling> myLcs = cm.ezGetBy(
                        " Select Week, Node1, Node2, Node3, Node4, Node5, Node6, Node7, Node8, Node9, Node10, "
                                + "        Node11, Node12, Node13, Node14 "
                                + " From LifeCounseling Where ParentOid='" + empl.getOid() + "'");
                List myLcs2 = new ArrayList();

                colOffset = 1;
                col = 0;
                //for (LifeCounseling lc : lcs) {
                for (int y = 0; y < myLcs.size(); y++) {
                    myLcs2.add(myLcs.get(y));
                    String st = myLcs2.get(y).toString();
                    col = Integer.parseInt(st.substring(6, 7)) + colOffset;
                    //col = lc.getWeek() + colOffset;                                 
                    //if (lc.getNode1() != null && lc.getNode1() == 1) {
                    if (Integer.parseInt(st.substring(15, 16)) == 1) { //Node1
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 2, col)))
                            Toolket.setCellValue(workbook, sheet, 2, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForLifeCounseling);
                    }
                    //if (lc.getNode2() != null && lc.getNode2() == 1) {
                    if (Integer.parseInt(st.substring(24, 25)) == 1) { //Node2
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 3, col)))
                            Toolket.setCellValue(workbook, sheet, 3, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForLifeCounseling);
                    }
                    //if (lc.getNode3() != null && lc.getNode3() == 1) {
                    if (Integer.parseInt(st.substring(33, 34)) == 1) { //Node3
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 4, col)))
                            Toolket.setCellValue(workbook, sheet, 4, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForLifeCounseling);
                    }
                    //if (lc.getNode4() != null && lc.getNode4() == 1) {
                    if (Integer.parseInt(st.substring(42, 43)) == 1) { //Node4
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 5, col)))
                            Toolket.setCellValue(workbook, sheet, 5, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForLifeCounseling);
                    }
                    //if (lc.getNode5() != null && lc.getNode5() == 1) {
                    if (Integer.parseInt(st.substring(51, 52)) == 1) { //Node5
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 6, col)))
                            Toolket.setCellValue(workbook, sheet, 6, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForLifeCounseling);
                    }
                    //if (lc.getNode6() != null && lc.getNode6() == 1) {
                    if (Integer.parseInt(st.substring(60, 61)) == 1) { //Node6
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 7, col)))
                            Toolket.setCellValue(workbook, sheet, 7, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForLifeCounseling);
                    }
                    //if (lc.getNode7() != null && lc.getNode7() == 1) {
                    if (Integer.parseInt(st.substring(69, 70)) == 1) { //Node7
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 8, col)))
                            Toolket.setCellValue(workbook, sheet, 8, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForLifeCounseling);
                    }
                    //if (lc.getNode8() != null && lc.getNode8() == 1) {
                    if (Integer.parseInt(st.substring(78, 79)) == 1) { //Node8
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 9, col)))
                            Toolket.setCellValue(workbook, sheet, 9, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForLifeCounseling);
                    }
                    //if (lc.getNode9() != null && lc.getNode9() == 1) {
                    if (Integer.parseInt(st.substring(87, 88)) == 1) { //Node9
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 10, col)))
                            Toolket.setCellValue(workbook, sheet, 10, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForLifeCounseling);
                    }
                    //if (lc.getNode10() != null && lc.getNode10() == 1) {
                    if (Integer.parseInt(st.substring(97, 98)) == 1) { //Node10
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 11, col)))
                            Toolket.setCellValue(workbook, sheet, 11, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForLifeCounseling);
                    }
                    //if (lc.getNode11() != null && lc.getNode11() == 1) {
                    if (Integer.parseInt(st.substring(107, 108)) == 1) { //Node11
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 12, col)))
                            Toolket.setCellValue(workbook, sheet, 12, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForLifeCounseling);
                    }
                    //if (lc.getNode12() != null && lc.getNode12() == 1) {
                    if (Integer.parseInt(st.substring(117, 118)) == 1) { //Node12
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 13, col)))
                            Toolket.setCellValue(workbook, sheet, 13, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForLifeCounseling);
                    }
                    //if (lc.getNode13() != null && lc.getNode13() == 1) {
                    if (Integer.parseInt(st.substring(127, 128)) == 1) { //Node13
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 14, col)))
                            Toolket.setCellValue(workbook, sheet, 14, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForLifeCounseling);
                    }
                    //if (lc.getNode14() != null && lc.getNode14() == 1) {
                    if (Integer.parseInt(st.substring(137, 138)) == 1) { //Node14
                        if (StringUtils.isEmpty(Toolket.getCellValue(sheet, 15, col)))
                            Toolket.setCellValue(workbook, sheet, 15, col, "", fontSize12,
                                    HSSFCellStyle.ALIGN_CENTER, true, colorForLifeCounseling);
                    }
                }

            }
        }

        File tempDir = new File(
                context.getRealPath("/WEB-INF/reports/temp/" + getUserCredential(session).getMember().getIdno()
                        + (new SimpleDateFormat("yyyyMMdd").format(new Date()))));
        if (!tempDir.exists())
            tempDir.mkdirs();

        File output = new File(tempDir, "StayTimeList.xls");
        FileOutputStream fos = new FileOutputStream(output);
        workbook.write(fos);
        fos.close();

        JasperReportUtils.printXlsToFrontEnd(response, output);
        output.delete();
        tempDir.delete();
    }
}