我的做法:用VC做一个ActiveX控件。

解决方案 »

  1.   

    不是有poi和jxl可以用吗?
    没太明白楼主意思
      

  2.   

    http://www-128.ibm.com/developerworks/cn/java/l-javaExcel/index.html
      

  3.   

    package com.hull.servlet;import jxl.*;
    import jxl.write.*;
    import jxl.format.BorderLineStyle;
    import java.io.*;
    import javax.servlet.http.*;
    import javax.servlet.*;
    import java.sql.ResultSet;
    import java.sql.SQLException;import com.hull.db.pool.SqlServerPool;
    import com.hull.tools.StringConverter;/**
     * <p>Title: hull</p>
     * <p>Description: read and write excel with java</p>
     * <p>Copyright: Copyright (c) 2004</p>
     * <p>Company: hz-group</p>
     * @author wangdong
     * @version 1.0
     */public class JExcel extends HttpServlet{
      private String excelFilePath;
      private WritableWorkbook wbbook;
      //private FileOutputStream os;
      private OutputStream os;
      private WritableCellFormat wcf,wcf_title;
      private WritableSheet ws;
      
      private String title;
      private int sheetid;
      private long shipid;
      
      
      public void init(ServletConfig config) throws ServletException{
        super.init();
        excelFilePath = config.getInitParameter("excelFilePath");
        if(excelFilePath == null){
          throw new ServletException("不能创建excel文件!");
        }
      } 
      
      public void doGet(HttpServletRequest request,HttpServletResponse response)
        throws ServletException,IOException{
        response.setContentType("application/vnd.ms-excel");
        title = request.getParameter("shipname");
        shipid = (new Long(request.getParameter("shipid"))).longValue();
        
        os = response.getOutputStream();
        
        wbbook = Workbook.createWorkbook(os);
        
        sheetid = (wbbook.getSheets()).length;
        
        try{
          wcf = new WritableCellFormat();
          wcf.setAlignment(Alignment.RIGHT);
          wcf.setBorder(Border.ALL,BorderLineStyle.THIN);
          wcf.setWrap(true);
          
          wcf_title = new WritableCellFormat();
          wcf_title.setAlignment(Alignment.CENTRE);
          wcf_title.setBorder(Border.ALL,BorderLineStyle.THIN);
        }
        catch(WriteException e){
        }
        
        ws = wbbook.createSheet(StringConverter.EnToChinese(title),sheetid+1);
        ws.setColumnView(0,20);
        ws.setColumnView(1,20);
        ws.setColumnView(2,20);
        ws.setColumnView(3,20);
        try{
          /**
           * 写标题
           */
          jxl.write.Label labelTitle = new jxl.write.Label(0,0,StringConverter.EnToChinese(title),wcf_title);
          ws.mergeCells(0,0,3,0);
          ws.addCell(labelTitle);
          /**
           * 写入船型内容
           */
          
          SqlServerPool pool = new SqlServerPool();
         int i=0,j=1,work=1;
         String strsql = "select a.*,b.refvalue from shipref a left join refcontent b on b.refid=a.id "+
                         "where a.shipid="+shipid+" order by a.reftype desc";
        
          ResultSet rs = pool.executeQuery(strsql);
          while(rs.next()){
          
            if(rs.getString("reftype").equals("文本")){
              jxl.write.Label typeLabel = new jxl.write.Label(0,j++,rs.getString("refname"),wcf);
              ws.addCell(typeLabel);
              jxl.write.Label valueLabel = new jxl.write.Label(1,j-1,rs.getString("refvalue"),wcf);
              ws.mergeCells(1,j,3,j);
              ws.addCell(valueLabel);
            }
            else{
             if(i%2 == 1){
               jxl.write.Label typeLabel = new jxl.write.Label(0,j,rs.getString("refname"),wcf);
               ws.addCell(typeLabel);
               jxl.write.Label valueLabel = new jxl.write.Label(1,j,rs.getString("refvalue"),wcf);
               ws.addCell(valueLabel);
             }
             else{
               jxl.write.Label typeLabel = new jxl.write.Label(2,j++,rs.getString("refname"),wcf);
               ws.addCell(typeLabel);
               jxl.write.Label valueLabel = new jxl.write.Label(3,j-1,rs.getString("refvalue"),wcf);
               ws.addCell(valueLabel);
             }
             work = j;
            }
            i++;
          }
          
          if(work%2 == 1){
            jxl.write.Label additional1 = new jxl.write.Label(2,work,"",wcf);
            ws.addCell(additional1);
            jxl.write.Label additional2 = new jxl.write.Label(3,work,"",wcf);
            ws.addCell(additional2);
          }
          
          wbbook.write();
          wbbook.close();
          os.flush();
          os.close();
        }
        catch(Exception ex){
        }
      }
    }
      

  4.   

    jxl.*;
    这是一个很强的API,支持xml、cvs导 出,图片插入,表达式 插入等。
      

  5.   

    可以用javascript创建excel对象,由客户端导入数据的。