<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 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    Struts2利用stream直接輸出Excel

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

     

    在利用網頁展示查詢結果,經常會遇到要求導出成Excel的需求。采用這種方法可以定制輸出的格式和內容(還不支持合并單元格和公式),生成真正的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  回復  更多評論   

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

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

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

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

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

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

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

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

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

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

    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 能清晰地看到數據

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

    2008-09-25 10:50 by yang
    LZ: 能留個聯系方式嗎?

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

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

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

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

    2008-09-26 12:36 by yang
    已經發到你的郵箱,我在CSDN加你了

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

    2009-01-14 10:28 by zgk83200
    LZ,我使用了 你的這個方法出了一些奇怪的問題!
    我控制臺的輸出是:
    用戶編號 用戶名 請假日期 開始時間 時間長度 請假類別
    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個字段的 數據

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

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

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

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

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

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

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

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

    1047180392

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

    2016-04-25 17:53 by sad
    dsaasdsadsadd as
    主站蜘蛛池模板: 久久久久久免费一区二区三区| 一级毛片免费播放男男| 精品熟女少妇av免费久久| 亚洲日韩精品无码专区网址| 老妇激情毛片免费| 四虎国产精品免费久久影院| 边摸边脱吃奶边高潮视频免费| 波多野结衣一区二区免费视频| 色噜噜噜噜亚洲第一| 免费人成网站在线高清| 高潮毛片无遮挡高清免费 | 91九色视频无限观看免费| 日韩精品一区二区亚洲AV观看| 99re免费99re在线视频手机版| 18gay台湾男同亚洲男同| 久久免费看黄a级毛片| 亚洲一级大黄大色毛片| 最新猫咪www免费人成| 亚洲aⅴ无码专区在线观看| 免费乱码中文字幕网站| jizz在线免费观看| 亚洲国产精品久久久久网站 | 91香蕉成人免费网站| 亚洲午夜精品一区二区麻豆| 国产大片51精品免费观看| 曰韩无码AV片免费播放不卡| 亚洲成AV人片在线播放无码| 亚洲精品视频免费看| 亚洲国产精品成人综合色在线| 亚洲熟女乱综合一区二区| 日韩精品极品视频在线观看免费 | 国产精品亚洲A∨天堂不卡| 99久久精品免费精品国产| 国产精品亚洲精品观看不卡| 亚洲av无码专区在线观看素人| 伊人免费在线观看高清版| 亚洲AV成人一区二区三区在线看 | 亚洲AV本道一区二区三区四区| 美女裸身网站免费看免费网站 | 亚洲综合校园春色| 夜色阁亚洲一区二区三区|