此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
楼主【jincheng18】截止到2008-07-22 16:40:28的历史汇总数据(不包括此帖):
发帖的总数量:1                        发帖的总分数:0                        每贴平均分数:0                        
回帖的总数量:1                        得分贴总数量:0                        回帖的得分率:0%                       
结贴的总数量:0                        结贴的总分数:0                        
无满意结贴数:0                        无满意结贴分:0                        
未结的帖子数:1                        未结的总分数:0                        
结贴的百分比:0.00  %               结分的百分比:---------------------
无满意结贴率:---------------------无满意结分率:---------------------
如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html

解决方案 »

  1.   

    读到的表单内容按行生成多个相同类放到list里
    生成excel 循环写入list的内容。
      

  2.   

    利用java操作Excel,有个开源的东东-jxl.jar,可以到http://sourceforge.net/project/showfiles.php?group_id=79926下载。一.读取Excel文件内容    /** *//**读取Excel文件的内容
         * @param file  待读取的文件
         * @return
         */
        public static String readExcel(File file)...{
            StringBuffer sb = new StringBuffer();
            
            Workbook wb = null;
            try ...{
                //构造Workbook(工作薄)对象
                wb=Workbook.getWorkbook(file);
            } catch (BiffException e) ...{
                e.printStackTrace();
            } catch (IOException e) ...{
                e.printStackTrace();
            }
            
            if(wb==null)
                return null;
            
            //获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了
            Sheet[] sheet = wb.getSheets();
            
            if(sheet!=null&&sheet.length>0)...{
                //对每个工作表进行循环
                for(int i=0;i<sheet.length;i++)...{
                    //得到当前工作表的行数
                    int rowNum = sheet[i].getRows();
                    for(int j=0;j<rowNum;j++)...{
                        //得到当前行的所有单元格
                        Cell[] cells = sheet[i].getRow(j);
                        if(cells!=null&&cells.length>0)...{
                            //对每个单元格进行循环
                            for(int k=0;k<cells.length;k++)...{
                                //读取当前单元格的值
                                String cellValue = cells[k].getContents();
                                sb.append(cellValue+" ");
                            }
                        }
                        sb.append(" ");
                    }
                    sb.append(" ");
                }
            }
            //最后关闭资源,释放内存
            wb.close();
            return sb.toString();
        }
    二.写入Excel文件这里有很多格式了,比如文本内容加粗,加上某些颜色等,可以参考jxl的api,同时还推荐一篇不错的文章:http://www.ibm.com/developerworks/cn/java/l-javaExcel/?ca=j-t10/** *//**生成一个Excel文件
         * @param fileName  要生成的Excel文件名
         */
        public static void writeExcel(String fileName)...{
            WritableWorkbook wwb = null;
            try ...{
                //首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象
                wwb = Workbook.createWorkbook(new File(fileName));
            } catch (IOException e) ...{
                e.printStackTrace();
            }
            if(wwb!=null)...{
                //创建一个可写入的工作表
                //Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置
                WritableSheet ws = wwb.createSheet("sheet1", 0);
                
                //下面开始添加单元格
                for(int i=0;i<10;i++)...{
                    for(int j=0;j<5;j++)...{
                        //这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行
                        Label labelC = new Label(j, i, "这是第"+(i+1)+"行,第"+(j+1)+"列");
                        try ...{
                            //将生成的单元格添加到工作表中
                            ws.addCell(labelC);
                        } catch (RowsExceededException e) ...{
                            e.printStackTrace();
                        } catch (WriteException e) ...{
                            e.printStackTrace();
                        }                }
                }            try ...{
                    //从内存中写入文件中
                    wwb.write();
                    //关闭资源,释放内存
                    wwb.close();
                } catch (IOException e) ...{
                    e.printStackTrace();
                } catch (WriteException e) ...{
                    e.printStackTrace();
                }
            }
        } 
    三.在一个Excel文件中查找是否包含某一个关键字/** *//**搜索某一个文件中是否包含某个关键字
         * @param file  待搜索的文件
         * @param keyWord  要搜索的关键字
         * @return
         */
        public static boolean searchKeyWord(File file,String keyWord)...{
            boolean res = false;
            
            Workbook wb = null;
            try ...{
                //构造Workbook(工作薄)对象
                wb=Workbook.getWorkbook(file);
            } catch (BiffException e) ...{
                return res;
            } catch (IOException e) ...{
                return res;
            }
            
            if(wb==null)
                return res;
            
            //获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了
            Sheet[] sheet = wb.getSheets();
            
            boolean breakSheet = false;
            
            if(sheet!=null&&sheet.length>0)...{
                //对每个工作表进行循环
                for(int i=0;i<sheet.length;i++)...{
                    if(breakSheet)
                        break;
                    
                    //得到当前工作表的行数
                    int rowNum = sheet[i].getRows();
                    
                    boolean breakRow = false;
                    
                    for(int j=0;j<rowNum;j++)...{
                        if(breakRow)
                            break;
                        //得到当前行的所有单元格
                        Cell[] cells = sheet[i].getRow(j);
                        if(cells!=null&&cells.length>0)...{
                            boolean breakCell = false;
                            //对每个单元格进行循环
                            for(int k=0;k<cells.length;k++)...{
                                if(breakCell)
                                    break;
                                //读取当前单元格的值
                                String cellValue = cells[k].getContents();
                                if(cellValue==null)
                                    continue;
                                if(cellValue.contains(keyWord))...{
                                    res = true;
                                    breakCell = true;
                                    breakRow = true;
                                    breakSheet = true;
                                }
                            }
                        }
                    }
                }
            }
            //最后关闭资源,释放内存
            wb.close();
            
            return res;
        }
     四.往Excel中插入图片图标插入图片的实现很容易,参看以下代码:    /** *//**往Excel中插入图片
         * @param dataSheet  待插入的工作表
         * @param col 图片从该列开始
         * @param row 图片从该行开始
         * @param width 图片所占的列数
         * @param height 图片所占的行数
         * @param imgFile 要插入的图片文件
         */
        public static void insertImg(WritableSheet dataSheet, int col, int row, int width,
                int height, File imgFile)...{
            WritableImage img = new WritableImage(col, row, width, height, imgFile);
            dataSheet.addImage(img);
        } 
      以上代码的注释已经很清楚了,大概也就不用再解释了,我们可以用如下程序验证:        try ...{
                //创建一个工作薄
                WritableWorkbook workbook = Workbook.createWorkbook(new File("D:/test1.xls"));
                //待插入的工作表
                WritableSheet imgSheet = workbook.createSheet("Images",0);
                //要插入的图片文件
                File imgFile = new File("D:/1.png");
                //图片插入到第二行第一个单元格,长宽各占六个单元格
                insertImg(imgSheet,0,1,6,6,imgFile);
                workbook.write();
                workbook.close();
            } catch (IOException e) ...{
                e.printStackTrace();
            } catch (WriteException e) ...{
                e.printStackTrace();
            }
    但是jxl只支持png格式的图片,jpg格式和gif格式都不支持五.插入页眉页脚一般的页眉页脚都分为三个部分,左,中,右三部分,利用如下代码可实现插入页眉页脚    /** *//**向Excel中加入页眉页脚
         * @param dataSheet 待加入页眉的工作表
         * @param left
         * @param center
         * @param right
         */
        public static void setHeader(WritableSheet dataSheet,String left,String center,String right)...{
            HeaderFooter hf = new HeaderFooter();
            hf.getLeft().append(left);
            hf.getCentre().append(center);
            hf.getRight().append(right);
            //加入页眉
            dataSheet.getSettings().setHeader(hf);
            //加入页脚
            //dataSheet.getSettings().setFooter(hf);
        }
    我们可以用如下代码测试该方法:        try ...{
                //创建一个工作薄
                WritableWorkbook workbook = Workbook.createWorkbook(new File("D:/test1.xls"));
                //待插入的工作表
                WritableSheet dataSheet = workbook.createSheet("加入页眉",0);
                ExcelUtils.setHeader(dataSheet, "chb", "2007-03-06", "第1页,共3页");
                workbook.write();
                workbook.close();
            } catch (IOException e) ...{
                e.printStackTrace();
            } catch (WriteException e) ...{
                e.printStackTrace();
            }
      

  3.   

    自己参照APACHE的POI给的一些实例简单拼凑了下:
    <%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" 
    import="java.util.*,java.io.*,java.awt.image.*,javax.imageio.ImageIO,
            org.apache.poi.hssf.util.*,org.apache.poi.hssf.usermodel.*" %>
    <%@include file="html/head.jsp"%>
    <%!String trans(String s) throws Exception {
    return new String(s.getBytes("ISO-8859-1"),"UTF-8");
    }
     %>
    <%
    float price = (Float) session.getAttribute("sessionPrice");
    int num = Integer.parseInt(request.getParameter("mount"));
    float total = price * num;
    String orderNo = (String) session.getAttribute("sessionOrderNo");

    HSSFWorkbook wb = new HSSFWorkbook();
    HSSFSheet sheet = wb.createSheet("大凯产品订单");  
    sheet.setDefaultColumnWidth((short)(48)); 
    sheet.setColumnWidth((short)1,(short)(10000)); 
    HSSFRow row = null;
    HSSFCell cell = null;
    //定义标题字体属性   
    HSSFFont font_Header = wb.createFont();
    font_Header.setFontName("黑体");
    font_Header.setFontHeightInPoints((short) 16);
    font_Header.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
    HSSFCellStyle cellStyle_Header = wb.createCellStyle();
    cellStyle_Header.setAlignment(HSSFCellStyle.ALIGN_LEFT);
    cellStyle_Header.setFont(font_Header);

    //定义题头:1-2行
    row=sheet.createRow((short)0);
    row.setHeight((short)(400));
    cell=row.createCell((short)1);
    cell.setCellStyle(cellStyle_Header);
    cell.setCellValue("北京大凯科技产品订单表"); 

    row=sheet.createRow((short)1);
    row.setHeight((short)(400));   
       cell=row.createCell((short)1);
       cell.setCellStyle(cellStyle_Header);
    cell.setCellValue("订单编号:"+orderNo);  
    //合并1-2行1列,插入公司logo
    sheet.addMergedRegion(new   Region(0,(short)0,1,(short)0));
    try{
    ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
    BufferedImage bufferImg = ImageIO.read(new File(application.getRealPath("/")+"images/dk.jpg"));
    ImageIO.write(bufferImg, "jpg", byteArrayOut);

    HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
    HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 0, 0,(short) 0, 0, (short) 1, 1);
    patriarch.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG)).resize();
    }catch(Exception e){e.printStackTrace();}

    //定义第3行
    row=sheet.createRow((short)2);   
       row.createCell((short)0).setCellValue("产品名称:"); row.createCell((short)1).setCellValue(trans((String) session.getAttribute("sessionProductName"))); 
    //定义第4行
    row=sheet.createRow((short)3);   
       row.createCell((short)0).setCellValue("产品价格:"); row.createCell((short)1).setCellValue(trans(String.valueOf(price))); 
    //定义第5行
    row=sheet.createRow((short)4);   
       row.createCell((short)0).setCellValue("产品数量:"); row.createCell((short)1).setCellValue(String.valueOf(num)); 
    //定义第6行
    row=sheet.createRow((short)5);   
       row.createCell((short)0).setCellValue("联系人:"); row.createCell((short)1).setCellValue(trans(request.getParameter("contact"))); 
    //定义第7行
    row=sheet.createRow((short)6);   
       row.createCell((short)0).setCellValue("联系方式:"); row.createCell((short)1).setCellValue(trans(request.getParameter("tel"))); 
    //定义第8行
    row=sheet.createRow((short)7);   
       row.createCell((short)0).setCellValue("公司名称:"); row.createCell((short)1).setCellValue(trans(request.getParameter("company"))); 
    //定义第9行
    row=sheet.createRow((short)8);   
       row.createCell((short)0).setCellValue("详细地址:"); row.createCell((short)1).setCellValue(trans(request.getParameter("address"))); 
    //定义第10行
    row=sheet.createRow((short)9);   
       row.createCell((short)0).setCellValue("总计(元):"); row.createCell((short)1).setCellValue(String.valueOf(total)); 


    try{
    File file=new File(application.getRealPath("/")+"orders",orderNo+".xls");
    FileOutputStream fileOut = new FileOutputStream(file);
    wb.write(fileOut);
    fileOut.close();
    } catch (IOException io) {
    System.out.println("io erorr : " + io.getMessage());

    out.print("<center><h3>订单已成功提交,稍后自动跳转到</h3></center>");
    response.setHeader("Refresh","2;URL=product.jsp");
    %>
    <%@include file="/html/tail.jsp"%>