我想用java,在JSP页面弄个浏览按钮,选择文件然后把选择到的文件上传到自己的服务器,tomcat上面,然后根据读取上传的excel文件的内容!求高手!!!!还有个问题,做这个功能所需的JAR包,为什么我有了JXL.JAR包在后台java页面还是导入不了
,比如:import jxl.*;
        import jxl.write.*;
JXL是红色的,我的包也放到了项目的lib目录中!高手们有做的话,给我附带个包,谢谢了!!!!!

解决方案 »

  1.   

    你的包放到了lib目录里面是没用的,要将lib目录的jar加入到classpath当中,加入方法工程名右键-build path-configurate ...-classpath -libraries -add jars ,你自己搜一下加入classpath方法也行
    这样import就正常了
      

  2.   

    用poi吧,读取的效率poi比 jxl高,简单的demo:http://blog.csdn.net/shuwei003/article/details/6741649
    jar包下载地址:
    http://poi.apache.org/download.html
      

  3.   


    是的!上传可以看下struts2的上传控件,或者smartupload也不错,自己google下
      

  4.   

    然后就在action中解析excel就o了
      

  5.   

    @SuppressWarnings({ "unchecked", "rawtypes" })
     public Map getMap() throws BiffException, IOException, DocumentException{
    // HashMap mapGroup = new HashMap();
      getDts();
      HashMap mapPerson = new HashMap();
      File file1 = new File("resource/zu.xls");// 读取组的xls文件
      InputStream is1 = new FileInputStream(file1);
      jxl.Workbook rwb1 = Workbook.getWorkbook(is1);
      Sheet st1 = rwb1.getSheet(0);// 得到excel中的第1张表
      for (int i = 1; i < st1.getRows(); i++) {// 判断有哪些组添加到hashmap中
      Cell cgroup = st1.getCell(1, i);
      String group = cgroup.getContents();
      Cell cperson = st1.getCell(0, i);
      String person = cperson.getContents();
    // mapGroup.put(group, person);
      mapPerson.put(person, group);
      }
      return mapPerson;
     }
      

  6.   

    请问5楼,getDts();这个是什么,没内容,就调用了,麻烦5楼把代码贴全些,谢谢!!!!!
      

  7.   

    各位也可以贴poi的代码,只要是能运行的,可以指定一个文件路径,上传我自己做了,然后读取EXCEL中的内容,到集合中都可以,然后再通过集合显示到页面!
      

  8.   

    http://topic.csdn.net/u/20110830/11/b96a4b05-d775-494b-bb68-fb41e540ac9d.html
    哥们自己写的,你参考下吧。
      

  9.   

    http://blog.csdn.net/tkd03072010/article/details/6692366
    前些日子刚整理的 用jxl实现jsp读取Excel数据
      

  10.   

    还是我自己贴这里吧!没人得出我想要的!package test;import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.sql.SQLException;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.List;import javax.faces.application.Application;
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.jsp.JspFactory;
    import javax.servlet.jsp.PageContext;import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFDateUtil;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.poifs.filesystem.POIFSFileSystem;import com.jspsmart.upload.File;
    import com.jspsmart.upload.Files;
    import com.jspsmart.upload.SmartUpload;
    import com.jspsmart.upload.SmartUploadException;/**
     * author:wx * describe:Reads the Excel example *
     */
    public class ReadExcelServerlet extends HttpServlet {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private String filename = ""; /**
     * * Constructor of the object.
     */
    public ReadExcelServerlet() {
    super();
    } /**
     * Destruction of the servlet. <br>
     * 
     */
    public void destroy() {
    super.destroy();
    }// Just puts "destroy" string in log // Put your code here
    /**
     * doGet
     */
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    doPost(request, response);
    } /**
     * doPost
     */
    public static String doubledate2str(String datestr) {
    String sss = "1900-01-01";
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    Calendar c = Calendar.getInstance();
    try {
    c.setTime(sdf.parse(sss));
    } catch (ParseException e) {
    e.printStackTrace();
    }
    String[] st = datestr.split("\\.");
    if (st.length == 2) {
    int i1 = Integer.parseInt(st[0]);
    String str = "0." + st[1];
    long i2 = (long) (Double.parseDouble(str) * 24 * 3600);
    c.add(Calendar.DAY_OF_MONTH, i1);
    for (int i = 0; i < (i2 / Integer.MAX_VALUE); i++) {
    c.add(Calendar.SECOND, Integer.MAX_VALUE);
    }
    int iii = (int) (i2 % Integer.MAX_VALUE);
    c.add(Calendar.SECOND, iii);
    return sdf.format(c.getTime());
    }
    return "";
    } /**
     * 上传
     * 
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     * @throws SQLException
     */
    public void upload(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException, SQLException {
    req.setCharacterEncoding("GB2312"); SmartUpload smart = new SmartUpload(); PageContext pageContext = JspFactory.getDefaultFactory()
    .getPageContext(this, req, resp, null, true, 8192, true); // 上传初始化
    smart.initialize(pageContext);
    smart.setMaxFileSize(10000000); // 单位应该为kb
    smart.setTotalMaxFileSize(40000000); // 文件总大小
    smart.setAllowedFilesList("csv,xls"); // 允许上传的文件类型
    smart.setDeniedFilesList("exe,html,,");// 禁止上传类型, 两个逗号代表没有后缀名
    // 准备上传
    try {
    smart.upload();
    Date d = new Date();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
    filename = sdf.format(d);// 根据上传的时间修改上传的文件名为自定义格式,避免重复名称
    // ServletContext application = this.getServletContext();
    // 获取文件扩展名
    String ext = smart.getFiles().getFile(0).getFileExt();
    // 保存上传的文件 smart.getFiles().getFile(0).saveAs(
    "/upload/" + filename + "." + ext);
    filename = filename + "." + ext;// 赋值给方法用 } catch (ServletException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (SmartUploadException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } } public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    // -----------------------上传部分----------------------------
    try {
    this.upload(request, response);
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    System.out.println("成功");
    // ------------------------上传部分---------------------------
    response.setContentType("text/html;charset=gb2312"); ServletContext application = this.getServletContext();
    List<Object> list = new ArrayList<Object>();
    String str = ""; try {
    POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(
    application.getRealPath("") + "/upload/" + filename));
    // 创建工作簿
    HSSFWorkbook workBook = new HSSFWorkbook(fs); // 获得Excel中工作表个数 System.out.println("工作表个数 :" + workBook.getNumberOfSheets()
    + "<br>");
    for (int i = 0; i < workBook.getNumberOfSheets(); i++) { System.out.println("<font color='red'> " + i
    + " ***************工作表名称:" + workBook.getSheetName(i)
    + "  ************</font><br>");
    // 创建工作表
    HSSFSheet sheet = workBook.getSheetAt(i);
    int rows = sheet.getPhysicalNumberOfRows(); // 获得行数,不准确,中间有空行有错误
    System.out.println("getPhysicalNumberOfRows总共读取到了几行:" + rows);
    if (rows > 0) {
    sheet.getMargin(HSSFSheet.TopMargin);
    // 还是getLastRowNum()好!应该默认下标是0开始的,测试有7行数据读取到了6,所以<=
    for (int j = 0; j <= sheet.getLastRowNum(); j++) { // 行循环
    HSSFRow row = sheet.getRow(j);
    String value = "";
    if (row != null) {
    int cells = row.getLastCellNum();// 获得列数
    for (short k = 0; k < cells; k++) { // 列循环
    HSSFCell cell = row.getCell(k);
    if (cell != null) { switch (cell.getCellType()) {
    case HSSFCell.CELL_TYPE_NUMERIC:
    if (HSSFDateUtil
    .isCellDateFormatted(cell)) {
    // 如果是date类型则 ,获取该cell的date值
    value = HSSFDateUtil.getJavaDate(
    cell.getNumericCellValue())
    .toString();
    System.out.println("第" + j + "行,第"
    + k + "列值:" + value
    + "<br>");
    } else {// 纯数字
    value = String.valueOf(cell
    .getNumericCellValue());
    System.out.println("第" + j + "行,第"
    + k + "列值:" + value
    + "<br>");
    }
    break;
    // 此行表示单元格的内容为string类型
    case HSSFCell.CELL_TYPE_STRING: // 字符串型
    value = cell.getRichStringCellValue()
    .toString();
    System.out.println("第" + j + "行,第" + k
    + "列值:" + value + "<br>");
    break;
    case HSSFCell.CELL_TYPE_FORMULA:// 公式型
    // 读公式计算值
    value = String.valueOf(cell
    .getNumericCellValue());
    if (value.equals("NaN")) {// 如果获取的数据值为非法值,则转换为获取字符串
    // 
    value = cell
    .getRichStringCellValue()
    .toString();
    }
    // cell.getCellFormula();读公式
    System.out.println("第" + j + "行,第" + k
    + "列值:" + value + "<br>");
    break;
    case HSSFCell.CELL_TYPE_BOOLEAN:// 布尔
    value = " "
    + cell.getBooleanCellValue();
    System.out.println("第" + j + "行,第" + k
    + "列值:" + value + "<br>");
    break;
    // 此行表示该单元格值为空
    case HSSFCell.CELL_TYPE_BLANK: // 空值
    value = "";
    System.out.println("第" + j + "行,第" + k
    + "列值:" + value + "<br>");
    break;
    case HSSFCell.CELL_TYPE_ERROR: // 故障
    value = "";
    System.out.println("第" + j + "行,第" + k
    + "列值:" + value + "<br>");
    break;
    default:
    value = cell.getRichStringCellValue()
    .toString();
    System.out.println("第" + j + "行,第" + k
    + "列值:" + value + "<br>");
    }
    // 理论是从第二行开始找,这样又少判断一行,减少压力,找类似*****.的字符串就转换为日期格式
    if (j >= 1 && value.indexOf(".") >= 4) {
    value = doubledate2str(value);
    }

    str = str + "<td><font size=-1>" + value
    + "</font></td>"; }
    } } list.add(str);
    str = "";
    }
    }
    }
    } catch (Exception ex) {
    ex.printStackTrace();
    }
    System.out.print("<script>alert('解析完毕');</script>");
    System.out.flush();
    System.out.close();
    request.setAttribute("list", list);
    request.getRequestDispatcher("/index.jsp").forward(request, response);
    } public void init() throws ServletException {
    // Put your code here
    }
    }