OAF将查询结果导出为EXCEL格式文件

PG:创建一个类型为button的按钮,设置按钮的Action Type为firePartialAction和Event为exportexcel(按钮类型不用 submitButton 的原因是 submitButton类型的按钮,在导出后,再往页面添加行或者保存时会提示报浏览器后退的异常 )。


CO:processFormRequest代码:

if ("exportexcel".equals(pageContext.getParameter(EVENT_PARAM))){

      byte abtye0[] = (byte[])am.invokeMethod("export");

      try {

             //获取DataObject

            DataObject dataObject = pageContext.getNamedDataObject("_SessionParameters");

            //根据DataObject获取response

            HttpServletResponse httpservletresponse  = (HttpServletResponse)dataObject.selectValue(null, "HttpServletResponse");

             download(pageContext, httpservletresponse, abtye0);


      } catch (Exception e) {

               e.printStackTrace();

               throw OAException.wrapperException(e);

         }

}


download方法代码:

    public void download(OAPageContext pageContext, 

                         HttpServletResponse response, byte[] abyte0) {


        String fileName = "export";

        //fileName = pageContext.getMessage("CUX", "CUX_SRM_IMPORT_FILE_NAME", null);

        try {

            String charset = 

                pageContext.getProfile("ICX_CLIENT_IANA_ENCODING");

            //设置文件的格式 字符集

            response.setContentType("application/vnd.ms-excel;charset=" + 

                                    charset); //gb2312

            //设置文件大小

            response.setContentLength(abyte0.length);

            //throw new OAException("abyte0.length:"+abyte0.length,OAException.ERROR);

            //通知浏览器文件的名字

            response.setHeader("Content-Disposition", 

                               "attachment;filename=" + fileName + ".xls");

            //获取输出流

            OutputStream toClient = response.getOutputStream();

            //将字符数组写进输出流

            toClient.write(abyte0);

            //强制刷新(页面弹出下载框)

            toClient.flush();

            //关闭输出流

            toClient.close();

        } catch (Exception ex) {

            ex.printStackTrace();

        }

    } //end download()



AM,export代码:

    public byte[] export() {


        byte abyte0[] = null;

        CuxAslVOImpl vo = getCuxAslVO1();

        CuxAslVORowImpl hRow = null;

        int rowcount = vo.getRowCount(); //取当前提取的记录集的记录数


        if (rowcount == 0)

            throw new OAException("没有需要导出的数据", OAException.ERROR);


        RowSetIterator deleteIter = 

            vo.createRowSetIterator("deleteIter"); //建立记录集的指示符

        deleteIter.setRangeStart(0); //设置循环起点,相当于移动指针到第一条记录

        deleteIter.setRangeSize(rowcount); //设置循环次数


        //第一步,创建一个webbook,对应一个Excel文件

        HSSFWorkbook wb = new HSSFWorkbook();

        //第二步,在webbook中添加一个sheet,对应Excel文件中的sheet

        HSSFSheet sheet = wb.createSheet("export");

        //第三步,在sheet中添加表头第0行,注意老版本poi对应Excel的行数列数有限制short

        HSSFRow row = sheet.createRow((int)0);

        //第四步,创建单元格,并设置值表头 设置表头居中

        CellStyle style = wb.createCellStyle();

        style.setAlignment(CellStyle.ALIGN_CENTER); //创建一个剧中格式


        //CSV

        StringBuffer buffer = 

            new StringBuffer("库存组织名称,物料编码,物料描述,供应商编码,供应商名称,供应商地点,状态,是否禁用,结算方式\r\n");

        //Excel

        HSSFCell cell = row.createCell((short)0);

        cell.setCellValue("库存组织名称");

        cell.setCellStyle(style);

        cell = row.createCell((short)1);

        cell.setCellValue("物料编码");

        cell.setCellStyle(style);

        cell = row.createCell((short)2);

        cell.setCellValue("物料描述");

        cell.setCellStyle(style);

        cell = row.createCell((short)3);

        cell.setCellValue("供应商编码");

        cell.setCellStyle(style);

        cell = row.createCell((short)4);

        cell.setCellValue("供应商名称");

        cell.setCellStyle(style);

        cell = row.createCell((short)5);

        cell.setCellValue("供应商地点");

        cell.setCellStyle(style);

        cell = row.createCell((short)6);

        cell.setCellValue("状态");

        cell.setCellStyle(style);

        cell = row.createCell((short)7);

        cell.setCellValue("是否禁用");

        cell.setCellStyle(style);

        cell = row.createCell((short)8);

        cell.setCellValue("结算方式");

        cell.setCellStyle(style);


        for (int i = 0; i < rowcount; i++) {

            row = sheet.createRow((int)i + 1);

            hRow = (CuxAslVORowImpl)deleteIter.getRowAtRangeIndex(i); //取得当前记录


            //第五步,创建单元格,并设置值

            row.createCell((short)0).setCellValue(hRow.getOrganizationName());

            row.createCell((short)1).setCellValue(hRow.getItemNumber());

            row.createCell((short)2).setCellValue(hRow.getItemDesc());

            row.createCell((short)3).setCellValue(hRow.getVendorNumber());

            row.createCell((short)4).setCellValue(hRow.getVendorName());

            row.createCell((short)5).setCellValue(hRow.getVendorSiteCode());

            row.createCell((short)6).setCellValue(hRow.getAslStatus());

            row.createCell((short)7).setCellValue(hRow.getDisableFlag());

            row.createCell((short)8).setCellValue(hRow.getPoSettlementMethod());


            buffer.append(hRow.getOrganizationName() + "," + 

                          hRow.getItemNumber() + "," + hRow.getItemDesc() + 

                          "," + hRow.getVendorNumber() + "," + 

                          hRow.getVendorName() + "," + 

                          hRow.getVendorSiteCode() + "," + 

                          hRow.getAslStatus() + "," + hRow.getDisableFlag() + 

                          "," + hRow.getPoSettlementMethod() + "\r\n");

        }


        //第六步,将文件转换成byte数组

        try {

           

            //这里有两种导出格式,已屏蔽的是CSV,未屏蔽的是EXCEL

            //Excel

            //文件只能转成流,通过byte流转成二进制数组(流无法序列化做成参数传出)

            ByteArrayOutputStream os = new ByteArrayOutputStream();

            //文件写入流

            wb.write(os);

            //流转数组

            abyte0 = os.toByteArray();

            //关闭流

            os.close();


            //            //CSV

            //            //字符直接转byte数组

            //            abyte0 = buffer.toString().getBytes();

        } catch (Exception e) {

            e.printStackTrace();

        }

        deleteIter.closeRowSetIterator();


        return abyte0;


    } //end export()




来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24627116/viewspace-2652473/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/24627116/viewspace-2652473/

学生管理类(设计型题目) (1)创建C# 控制台应用程序L4_3。 (2)在程序中创建一个学生Student,包含以下成员:  定义私有字段:学号s_no,姓名s_name, 班级s_class,成绩s_score。  定义Student类的构造函数,初始化4个私有字段。  定义四个公有属性S_no,S_name,S_class以及S_score,分别用于封装对各字段读写访问。 (3)再定义一个StudentInfo类,用于对学生信息进行管理:该类包括下列成员:  存放学生信息的Student[]类型的私有字段成员m_list ;  存储学生最大数量的私有字段m_maxcapacity;  存储当前学生数量的私有字段m_length;  带参数的构造函数,根据指定长度对各私有字段进行初始化。  定义类的只读公有属性:Maxcapcity属性、Currentlength属性、 Restlength属性,分别用于返回列表的最大容量、已存信息的容量、剩余的最大容量。  定义一个索引函数,用于实现根据学生的学号对信息进行读、写访问。(无论读或写操作都要求先判断学生是否存在)。  定义公有方法AddInfo(返回类型为bool),用于向学生信息列表中添加学生信息(需要判断添加操作能否进行,即列表是否已满)。  定义一个公有方法DeleteInfo返回类型为bool),用于根据学生学号删除信息。(需要判断学生是否存在) (4)在外部类中进行StudentInfo类的各种功能进行测试。
1、已知一个链表中存储了若干名学生的信息,每名学生的信息包括:学号、英语成绩、数学成绩、计算机成绩。 现编写一个函数search(),要求对输入的无序学号进行排序,然后采用折半查找方法查找输入学生学号,并输出该学生各科成绩。 2、设计一个学生类(CStudent),它具有私有数据成员是:学号、姓名、数学、外语和计算机课程的成绩。要求能实现求三门课总成绩和平均成绩,并能设置和显示学生信息 (类声明和成员函数定义分离)。设计一个友元函数,按照成绩从高到低的顺序输出姓名、学号和成绩信息。 3、实现雇员管理,类Employee需存储雇员的姓名。这种信息对于所有雇员(包括Employee的派生类的雇员)是很普遍的。现在假设从雇员类Employee派生出了小时工类HourlyWorker、计件工类PieceWorker、老板类Boss和销售员类CommissionWorker。小时工每周工作40小时,超过40小时部分的报酬是平时的1.5倍;计件工是按生产的工作件数计算报酬的,每件的报酬是固定的,假设他只生成一种类型的工件,因而类PieceWorker的private数据成员是生产的工件数量和每件的报酬;老板每周有固定的薪水;销售员每周有小部分固定的基本工资加上其每周销售额的固定百分比。设计和规划该类体系,并分别产生每个基类及派生类对象,并显示该员工的工资。 4、约瑟夫生死者游戏 每30个旅客同乘一条船,因为严重超载,加上风高浪大,危险万分;因此船长告诉乘客,只有将全船一半的旅客投入海中,其余人才能幸免遇难。无奈,大家只得同意这种办法,并议定30个人围成一圈,由第一个人数起,依次报数,数到第9人,便把他投入大海中,然后再从他的下一个人数起,数到第9人,再将他扔进大海中,如此循环地进行,直到剩下15个乘客为止。问哪些位置是将是被扔下大海的位置。 5、求二叉树上结点的路径 要求在采用链式存储结构存储的二叉树上,以bt指向根结点,p指向任一给定的结点,编程实现求出从根节点到给定结点之间的路径。 6、图的操作 (1)写出将一个无向图的邻接矩阵转换成邻接表的算法 (2)设计一个算法,判断无向图G是否连通。若连通则返回1; 返回0。 7、内部排序算法的性能分析 要求:(1)对冒泡排序、直接排序、简单选择排序、快速排序、希尔排序、堆排序算法进行比较; (2)待排序表的表长不小于100,表中数据随机产生,至少用5组不同数据作比较,比较指标有:关键字参加比较次数和关键字的移动次数(关键字交换记为3次移动); (3)输出各种算法的排序结果和比较结果。 8.2、通讯录管理系统 编程实现通讯录管理系统,要求该系统能够完成通讯信息的建立、查询、插入、删除等基本功能。程序运行后至少给出下面7个菜单项的选择并分别实现其功能: 0、 通讯录的建立 1、通讯录信息输出 2、 通讯者结点信息的删除 3、通讯者结点信息的查询 4、 通讯者结点信息的插入 5、通讯录信息更改 6、 退出通讯录管理系统 设计的任务要求,通讯录中每个学生的基本信息应包括姓名、地址、电话等基本信息,采用链表存储结构。(复习c语言结构体和链表知识)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值