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

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

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

    一個生成excel的工具類

    很多人都直接編輯html,保存成xls就當(dāng)成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" >產(chǎn)品</td>
                    <td nowrap="true" >中文名稱</td>
                    <td nowrap="true" >英文名稱</td>
                    <td nowrap="true" >產(chǎn)品分類</td>
                    <td nowrap="true" >包裝</td>
                    <td nowrap="true" >單位</td>
                    <td nowrap="true" >數(shù)量</td>
                    <td nowrap="true" >凍結(jié)數(shù)量</td>
                    <td nowrap="true" >可用數(shù)量</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());
        }
    }

    調(diào)用
    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自動生成啊。  回復(fù)  更多評論   

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

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

    # 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文件中保存。
      回復(fù)  更多評論   


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


    網(wǎng)站導(dǎo)航:
     
    <2007年8月>
    2930311234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

    導(dǎo)航

    統(tǒng)計

    常用鏈接

    留言簿(1)

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 一级毛片免费观看不卡的| 五级黄18以上免费看| 成年黄网站色大免费全看| 亚洲精品私拍国产福利在线| 国产成人免费ā片在线观看老同学 | 亚洲国产一区视频| 国产免费A∨在线播放| 亚洲美女又黄又爽在线观看| 免费成人在线视频观看| 99人中文字幕亚洲区| 国产精品成人观看视频免费| 亚洲熟女www一区二区三区| 日本成人免费在线| 丰满少妇作爱视频免费观看| 国产精品亚洲精品日韩已满| 麻豆成人久久精品二区三区免费| 亚洲日本国产乱码va在线观看| 欧美在线看片A免费观看| 香蕉视频亚洲一级| 亚洲日韩一页精品发布| 1000部拍拍拍18勿入免费视频下载 | 尤物视频在线免费观看| 亚洲乱码中文字幕综合| 久久久免费的精品| 亚洲真人无码永久在线观看| 亚洲精品在线视频| 91香蕉国产线在线观看免费| 亚洲区日韩精品中文字幕| 亚洲日韩涩涩成人午夜私人影院| 久久久久久AV无码免费网站下载| 丁香婷婷亚洲六月综合色| 免费在线观看污网站| 91香蕉国产线在线观看免费| 亚洲AV无码国产一区二区三区| 亚洲中文字幕无码一久久区| 无限动漫网在线观看免费| EEUSS影院WWW在线观看免费| 亚洲制服丝袜一区二区三区| 亚洲美女在线国产| 在线观看永久免费| 一级毛片视频免费观看|