<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    一個生成excel的工具類

    很多人都直接編輯html,保存成xls就當成excel報表了。挺方便的,于是我寫了這個簡化工作的工具類——將一個html的表格模板解析成一個xls報表
    模板如下
    <?xml version="1.0" encoding="GB2312" ?>
    <div style="width:100%;height:450;overflow-x:auto;overflow-y:auto">
        <table width="100%" border="1" cellspacing="2" cellpadding="0">
                <tr id="title" bgcolor="#fefcce">
                    <td nowrap="true" >客戶</td>
                    <td nowrap="true" >產品</td>
                    <td nowrap="true" >中文名稱</td>
                    <td nowrap="true" >英文名稱</td>
                    <td nowrap="true" >產品分類</td>
                    <td nowrap="true" >包裝</td>
                    <td nowrap="true" >單位</td>
                    <td nowrap="true" >數量</td>
                    <td nowrap="true" >凍結數量</td>
                    <td nowrap="true" >可用數量</td>
                    <td nowrap="true"  id="CUBIC"></td>
                    <td nowrap="true"  id="WEIGHT"></td>
                </tr>
                <tr id="record">
                    <td nowrap="true" id="CUSTOMERID"></td>
                    <td nowrap="true" id="SKU_ID"></td>
                    <td nowrap="true" id="SKU_DESCR_C"></td>
                    <td nowrap="true" id="SKU_DESCR_E"></td>
                    <td nowrap="true" id="SKU_CLASS"></td>
                    <td nowrap="true" id="PACKAGE_ID"></td>
                    <td nowrap="true" id="UOM"></td>
                    <td nowrap="true" id="QUANTITY"></td>
                    <td nowrap="true" id="FREEZE_QUANTITY"></td>
                    <td nowrap="true" id="AVAILABLE_QUANTITY"></td>
                    <td nowrap="true" id="CUBIC"></td>
                    <td nowrap="true" id="WEIGHT"></td>
                </tr>
        </table>
    </div>
    工具類如下

    public class ExcelTemplateUtil {
        private static String CHARSET = "";
        private static final String ROOT = "ROOT";
        private static final String TITLE = "TITLE";
        private static final String RECORD = "RECORD";
        private static Map temp = new HashMap();

        public static String generateListToTemplate(Object titleObj, List recordList, File templateFile)
        {
            readTemplateFile(templateFile);
            ByteArrayOutputStream os = (ByteArrayOutputStream) builderExcelOutput(titleObj, recordList);
            return removeXMLHeader(os);
        }

        public static void readTemplateFile(File file)
        {
            try {
                Document templateDocument = new SAXReader().read(file);
                Element root = templateDocument.getRootElement();
                List trList = root.selectNodes("http://div/table/tr");
                Element titleTemp = (Element) trList.get(0);
                Element recordTemp = (Element) trList.get(1);
                root.element("table").remove(titleTemp);
                root.element("table").remove(recordTemp);
                temp.put(TITLE, trList.get(0));
                temp.put(RECORD, trList.get(1));
                temp.put(ROOT, root);
            } catch (DocumentException e) {
                e.printStackTrace();
                throw new RuntimeException("Parse xml file error, Cause:", e);
            }
        }

        public static OutputStream builderExcelOutput(Object titleObj, List list)
        {

            ByteArrayOutputStream os = new ByteArrayOutputStream();
            Element root = (Element) ((Element) temp.get(ROOT)).clone();
            Document document = DocumentHelper.createDocument();
            document.setRootElement(root);
            Element tableEle = root.element("table");
            tableEle.add(parseTitleElement(titleObj));
            for (int i = 0; i < list.size(); i++) {
                tableEle.add(parseRecordElement(list.get(i)));
            }
            try {
                OutputFormat format = new OutputFormat("", true, "GB2312");
                XMLWriter writer = new XMLWriter(os, format);
                writer.write(document);
                writer.flush();
                writer.close();
                os.close();
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
                throw new RuntimeException("Parse outstream error, Cause:", e);
            } catch (IOException e) {
                e.printStackTrace();
                throw new RuntimeException("Parse outstream error, Cause:", e);
            }
            return os;
        }

        public static Element parseTitleElement(Object titleObj)
        {
            Element titleEle = (Element) ((Element) temp.get(TITLE)).clone();
            if (null == titleObj) return titleEle;
            List tdList = titleEle.selectNodes("td");
            Element td;
            for (int i = 0; i < tdList.size(); i++) {
                td = (Element) tdList.get(i);
                fullField(td, titleObj);
            }
            return titleEle;
        }

        public static Element parseRecordElement(Object recordObj)
        {
            Element recordEle = (Element) ((Element) temp.get(RECORD)).clone();
            List tdList = recordEle.selectNodes("td");
            Element td;
            for (int i = 0; i < tdList.size(); i++) {
                td = (Element) tdList.get(i);
                fullField(td, recordObj);
            }
            return recordEle;
        }

        public static void fullField(Element tdEle, Object obj)
        {
            Attribute att = tdEle.attribute("id");
            if (null == att || null == att.getText() || 0 == att.getText().trim().length()) {
                return;
            }
            String fieldName = att.getText();
            if (null == fieldName || fieldName.trim().length() == 0) return;
            Method[] objMethod = obj.getClass().getDeclaredMethods();

            Object value;
            for (int i = 0; i < objMethod.length; i++) {
                if (("get" + (fieldName.trim())).equals(objMethod[i].getName())) {
                    try {
                        value = objMethod[i].invoke(obj, new Object[]{});
                        value = (null == value ? "" : value);
                        tdEle.setText(value.toString());
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                        throw new RuntimeException(e);
                    } catch (InvocationTargetException e) {
                        e.printStackTrace();
                        throw new RuntimeException(e);
                    }
                }
            }
        }

        public static String removeXMLHeader(OutputStream os)
        {
            String xml = os.toString();
            int position = xml.indexOf(">");
    //        xml = xml.substring(position+1,xml.length());
    //        position = xml.indexOf(">");
            return xml.substring(position + 1, xml.length());
        }
    }

    調用
    OutputStream os = response.getOutputStream();
                response.setHeader(
    "Content-disposition""attachment; filename=" + excelFileName);
                response.setContentType(
    "application/msexcel");
                File excelTemplateFile 
    = new File(report_path + templateFileName);
                String out 
    = ExcelTemplateUtil.generateListToTemplate(titleObj, resultList, excelTemplateFile);
                response.getOutputStream().write(out.getBytes());
                os.close();

    posted on 2007-08-08 21:47 wanglin 閱讀(1348) 評論(3)  編輯  收藏

    評論

    # re: 一個生成excel的工具類 2007-08-09 15:20 靜兒

    原來excel報表通過html自動生成啊。  回復  更多評論   

    # re: 一個生成excel的工具類[未登錄] 2007-08-09 17:43 -274°C

    <?php
    header("Content-Type:application/vnd.ms-execl");
    header("Content-Disposition:filename=test.xls");
    ……
    很方便,其他語言道理一樣。  回復  更多評論   

    # re: 一個生成excel的工具類 2008-01-28 09:02 wanglin

    有更好的方法
    xlsWin = window.open('',''_blank, openPara);
    xlsWin.document.write(inStr);
    xlsWin.document.close();
    xlsWin.document.execCommand('Saveas', true, fileName);

    將response流instr放到一個document文件中保存。
      回復  更多評論   


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    <2008年1月>
    303112345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    導航

    統計

    常用鏈接

    留言簿(1)

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: www视频免费看| 91免费福利视频| 免费在线看v网址| 亚洲熟妇无码爱v在线观看| 日韩免费人妻AV无码专区蜜桃| 亚洲一区精品无码| 成年免费a级毛片免费看无码| 亚洲日韩国产精品第一页一区| 久久国产免费直播| 亚洲AV无码久久精品蜜桃| 日韩免费视频一区二区| 久久久亚洲欧洲日产国码aⅴ| 成人免费黄色网址| 亚洲日韩精品A∨片无码加勒比| 24小时日本在线www免费的| 亚洲精品伦理熟女国产一区二区| 日韩免费无砖专区2020狼| 男男黄GAY片免费网站WWW | 无码中文在线二区免费| 亚洲综合av一区二区三区 | 成人女人A级毛片免费软件| 亚洲日韩精品A∨片无码加勒比| 免费一级特黄特色大片在线| 日韩精品无码免费视频| 亚洲精品无码精品mV在线观看| 美女被cao网站免费看在线看| 亚洲一级毛片免费看| 日本一道高清不卡免费| 国产精品免费久久久久影院| 亚洲精品国产成人专区| 毛片免费观看视频| 尤物视频在线免费观看| 久久国产亚洲精品无码| 国产精品四虎在线观看免费 | 亚洲成av人片天堂网无码】| 久久综合亚洲色HEZYO国产| 97公开免费视频| 爱情岛论坛免费视频| 亚洲一区二区三区四区在线观看| 午夜网站免费版在线观看| 波霸在线精品视频免费观看|