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

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

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

    云自無心水自閑

    天平山上白云泉,云自無心水自閑。何必奔沖山下去,更添波浪向人間!
    posts - 288, comments - 524, trackbacks - 0, articles - 6
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    Struts2利用stream直接輸出Excel

    Posted on 2008-06-23 20:14 云自無心水自閑 閱讀(10772) 評論(15)  編輯  收藏 所屬分類: Java心得體會Struts2

     

    在利用網(wǎng)頁展示查詢結(jié)果,經(jīng)常會遇到要求導(dǎo)出成Excel的需求。采用這種方法可以定制輸出的格式和內(nèi)容(還不支持合并單元格和公式),生成真正的Excel格式(不是csv)的Excel。
    一、struts.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
      
    <struts>

        <constant name="struts.i18n.encoding" value="UTF-8"/>

        <package name="demo" extends="struts-default">
            <action name="excel" method="execute" class="demo.ExcelAction">
                    <result name="excel" type="stream">
                        <param name="contentType">application/vnd.ms-excel</param>    <!-- 注意這里的ContentType -->
                        <param name="inputName">excelStream</param>                   <!-- 這里需要和Action里的變量名一致 -->
                        <param name="contentDisposition">filename="standard.xls"</param>
                        <param name="bufferSize">1024</param>
                    </result>
            </action>
        </package>
    </struts>

    二、Struts2的 Action

    package demo;
    public class ExcelAction {
        private InputStream excelStream; // 需要生成getter和setter

        public String execute() throws Exception {
            StringBuffer excelBuf = new StringBuffer();
            excelBuf.append("BookName").append("\t").append("Year").append("\t").append("author").append("\n");
            excelBuf.append("Thinking in Java").append("\t").append("2001").append("\t").append("Eckel").append("\n");
            excelBuf.append("Spring in action").append("\t").append("2005").append("\t").append("Rod").append("\n");
            String excelString = excelBuf.toString();
            logger.debug("result excel String: " + excelString);
            excelStream = new ByteArrayInputStream(excelString.getBytes(), 0, excelString.length());
            return "excel";
        }

        // getter and setter
        ...
    }

    三、Jsp頁面

    <%@ taglib prefix="s" uri="/struts-tags"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
     <head>
      <s:head />
     </head>

     <body>

        <s:form action="" method="post">
           <s:submit key="button.submit"/>
        </s:form>
     </body>
    </html>




    評論

    # re: Struts2利用stream直接輸出Excel  回復(fù)  更多評論   

    2008-06-23 21:54 by DVD比價(jià)
    是非常實(shí)用的,還有XML的輸出。

    # re: Struts2利用stream直接輸出Excel  回復(fù)  更多評論   

    2008-06-25 18:08 by 雨奏
    @云自無心水自閑
    挑一下刺:你這樣輸出的實(shí)際上是一個Tab和回車符分隔的純文本文件哦。盡管能夠輸出數(shù)據(jù),但無法輸出格式(比如使用指定的字體)

    # re: Struts2利用stream直接輸出Excel[未登錄]  回復(fù)  更多評論   

    2008-09-23 16:04 by yang
    為什么我在控制臺上打出了數(shù)據(jù),卻沒有輸出到 Excel 呢?

    # re: Struts2利用stream直接輸出Excel  回復(fù)  更多評論   

    2008-09-23 21:02 by usherlight
    @yang
    可能是你的struts.xml沒有配置好,能貼一下你的配置嗎?

    # re: Struts2利用stream直接輸出Excel  回復(fù)  更多評論   

    2008-09-23 21:04 by usherlight
    @雨奏
    如果要真正輸出Excel,恐怕要使用POI之類的了。
    目前這樣的解決方法,能夠在客戶端將數(shù)據(jù)填充到Excel軟件中,基本上可以滿足初步的要求了。

    # re: Struts2利用stream直接輸出Excel[未登錄]  回復(fù)  更多評論   

    2008-09-25 10:47 by yang
    我的struts.xml:
    <action name="admin_stat" class="statAction">
    <result name="excel" type="stream">
    <param name="contentType">application/vnd.ms-excel</param>
    <param name="inputName">excelStream</param>
    <param name="contentDisposition">filename="stat.xls"</param>
    <param name="bufferSize">1024</param><!-- 10485760=10M -->
    </result>
    </action>

    輸出到控制臺上的 excelString 能清晰地看到數(shù)據(jù)

    # re: Struts2利用stream直接輸出Excel[未登錄]  回復(fù)  更多評論   

    2008-09-25 10:50 by yang
    LZ: 能留個聯(lián)系方式嗎?

    # re: Struts2利用stream直接輸出Excel  回復(fù)  更多評論   

    2008-09-26 10:43 by usherlight
    @yang

    usherlight@sina.com
    如果方便的話,可以看一下你的action源碼嗎?

    # re: Struts2利用stream直接輸出Excel[未登錄]  回復(fù)  更多評論   

    2008-09-26 12:36 by yang
    已經(jīng)發(fā)到你的郵箱,我在CSDN加你了

    # re: Struts2利用stream直接輸出Excel  回復(fù)  更多評論   

    2009-01-14 10:28 by zgk83200
    LZ,我使用了 你的這個方法出了一些奇怪的問題!
    我控制臺的輸出是:
    用戶編號 用戶名 請假日期 開始時(shí)間 時(shí)間長度 請假類別
    zhaojiangmin 趙江民 2009-01-05 08:00:00 3 婚嫁
    3 李四 2008-12-04 12:00:00 6 事假
    N2000 郭晶晶 2008-12-01 08:00:00 12 病假
    abc 成龍 2008-12-01 08:00:00 1 病假
    abc 成龍 2008-12-25 08:00:00 1 事假
    3 李四 2008-12-02 08:00:00 1 病假
    2 張三 2008-12-10 08:00:00 1 病假
    2 張三 2008-12-01 08:00:00 12 病假
    2 張三 2008-12-18 12:00:00 12 病假


    但是 ,我的excel 缺少 最后1行的 最后2個字段的 數(shù)據(jù)

    # re: Struts2利用stream直接輸出Excel  回復(fù)  更多評論   

    2009-01-16 06:34 by usherlight
    奇怪,你查查最后一行最后2個字段數(shù)據(jù)的分隔符是不是TAB?

    # re: Struts2利用stream直接輸出Excel  回復(fù)  更多評論   

    2009-06-23 15:17 by linda
    我也和你遇到了相同的問題,總是到最后一點(diǎn)打印不出來,原因是我構(gòu)造流時(shí),
    excelStream = new ByteArrayInputStream(excelString.getBytes(), 0,
    excelString.length);
    換成:
    excelStream = new ByteArrayInputStream(excelString.getBytes(), 0,
    excelString.getBytes().length);
    就好了,
    留在這里供以后出錯的人來參考。

    # re: Struts2利用stream直接輸出Excel  回復(fù)  更多評論   

    2009-06-23 20:19 by usherlight
    @linda
    謝謝!

    # re: Struts2利用stream直接輸出Excel  回復(fù)  更多評論   

    2011-07-20 14:36 by leongpow
    LZ,加個QQ吧。。

    1047180392

    # re: Struts2利用stream直接輸出Excel  回復(fù)  更多評論   

    2016-04-25 17:53 by sad
    dsaasdsadsadd as
    主站蜘蛛池模板: 亚洲情A成黄在线观看动漫软件| 久久久久久国产a免费观看黄色大片| 亚洲三级中文字幕| 亚洲国产精品一区二区成人片国内 | 一级大黄美女免费播放| 精品国产成人亚洲午夜福利| 亚洲国产精品无码av| 久久久久亚洲AV成人网人人网站| 成人免费无码大片A毛片抽搐| 永久免费视频网站在线观看| 在线毛片片免费观看| 久久久受www免费人成| 曰批免费视频播放免费| 亚洲狠狠色丁香婷婷综合| 亚洲永久在线观看| 亚洲一区二区久久| 亚洲熟妇av一区| 亚洲一级二级三级不卡| 久久亚洲免费视频| 亚洲av无码不卡一区二区三区 | 久久精品国产亚洲av瑜伽| 2019亚洲午夜无码天堂| 亚洲国产成人资源在线软件| 亚洲精品456在线播放| 亚洲欧洲国产精品久久| 亚洲国产精品综合久久2007| 久久亚洲AV无码精品色午夜| 久久久无码精品亚洲日韩按摩| 亚洲av无码乱码国产精品fc2| 国产日产亚洲系列| 国产亚洲美女精品久久久| 红杏亚洲影院一区二区三区| 亚洲日本韩国在线| 亚洲乳大丰满中文字幕| 亚洲乱色熟女一区二区三区丝袜| 浮力影院亚洲国产第一页| 亚洲另类激情综合偷自拍图| 亚洲精品午夜国产VA久久成人| 精品久久久久久亚洲| 亚洲AV无码久久精品成人| 亚洲欧洲国产精品你懂的|