首页 > 其他分享 >web中使用POI的例子

web中使用POI的例子

时间:2023-06-15 18:03:10浏览次数:33  
标签:web Excel org HSSFCell 例子 POI apache import public


web中使用POI的例子

struts1.x的例子,struts2.x可以参考自己修改



1.action的写法


 



import
   java.io.
  *
  ;
  import
   java.sql.
  *
  ;
  import
   java.util.ArrayList;

  import
   javax.servlet.http.HttpServletRequest;
  import
   javax.servlet.http.HttpServletResponse;

  import
   org.apache.poi.hssf.usermodel.
  *
  ;
  import
   org.apache.struts.action.
  *
  ;
  import
   org.apache.struts.upload.FormFile;
  import
   org.apache.commons.beanutils.BeanUtils;

  public
   
  class
   Action 
  
  {
 /**//*
  * 把数据库中的字段导入到Excel ,并生成Excel文档
  **/
 public ActionForward getDownload(ActionMapping actionMapping,
   ActionForm actionForm, HttpServletRequest request,
   HttpServletResponse response) throws Exception 
{
  Form fm = (Form) actionForm;
  // Excel 文件存放在服务器的相对路径下
  String outputFile = request.getRealPath("/tmp/Excel.xls");
  
  try 
{
   // 创建新的Excel 工作簿
   HSSFWorkbook workbook = new HSSFWorkbook();
   // 在Excel 工作簿中建一工作表
   HSSFSheet sheet = workbook.createSheet("Sheet1");
   // 设置单元格格式(文本)
   HSSFCellStyle cellStyle = workbook.createCellStyle();
   cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("@"));
   
   // 在索引0的位置创建行(第一行)
   HSSFRow row = sheet.createRow((short) 0);
   
   HSSFCell cell1 = row.createCell((short) 0);// 第一列
   HSSFCell cell2 = row.createCell((short) 1);
   HSSFCell cell3 = row.createCell((short) 2);
   // 定义单元格为字符串类型
   cell1.setCellType(HSSFCell.CELL_TYPE_STRING);
   cell2.setCellType(HSSFCell.CELL_TYPE_STRING);
   cell3.setCellType(HSSFCell.CELL_TYPE_STRING);
   
   cell1.setEncoding(HSSFCell.ENCODING_UTF_16);
   cell2.setEncoding(HSSFCell.ENCODING_UTF_16);
   cell3.setEncoding(HSSFCell.ENCODING_UTF_16);
   // 在单元格中输入数据
   cell1.setCellValue("姓名");
   cell2.setCellValue("性别");
   cell3.setCellValue("年龄");
   
   Connection connection = session.connection();
   
   String sql = "Select t.name, t.sex, t.age from table t where t.sex = ?";
   
   try 
{
    PreparedStatement ps = connection.prepareStatement(sql);
    ps.setString(1, fm.getSex());// 传入查询条件
    ResultSet rs = ps.executeQuery();// 查询结果存入rs
    connection.commit();// 执行SQL
    
    while (rs.next()) 
{
    //设置j行从第二行开始
     int j = 1;
     row = sheet.createRow((short) j);
     //设置i列从第二列开始
     for (int i = 1; i <= 3; i++) 
{
      HSSFCell cell = row.createCell((short) (i-1));
      // 设置单元格格式
      cell.setCellStyle(cellStyle);
      cell.setCellType(HSSFCell.CELL_TYPE_STRING);
      cell.setEncoding(HSSFCell.ENCODING_UTF_16);
      cell.setCellValue(rs.getString(i));
     }
     
     j++;
    }
    
    request.setAttribute("message", "文件生成成功!");
   } catch (SQLException e) 
{
    request.setAttribute("message", "创建文件失败!");
    e.printStackTrace();
   }
   // 删除路径下同名的Excel 文件
   File path = new File(outputFile);
   path.delete();
   
   // 新建一输出文件流
   FileOutputStream fOut = new FileOutputStream(outputFile);
   // 把相应的Excel 工作簿存盘
   workbook.write(fOut);
   // 操作结束,关闭文件
   fOut.flush();
   fOut.close();
    //该处如果Excel过大会影响效率,谁有好的想法可以提出来参考(不过从页面下载完后就会清空)
   request.getSession().setAttribute("Download", outputFile);
   
  } catch (Exception ioexception) 
{
   request.setAttribute("message", "创建文件失败!");
   return actionMapping.findForward("outJSP");
  }
  
  return actionMapping.findForward("outJSP");
 }
 
 /**//*
  * 从Excel文件中读取数据,并导入到数据库中
  **/
  public ActionForward getUpload(ActionMapping actionMapping,
   ActionForm actionForm, HttpServletRequest request,
   HttpServletResponse response) throws Exception 
{
  // 获取excel 文件
  Form fm = (Form) actionForm;
  FormFile formfile = fm.getUploadfile();
  InputStream inputstream = formfile.getInputStream();
  fm.clear();// 清空
  Session session = HibernateSession.currentSession();
  ArrayList list = new ArrayList();
  int input = 0; //导入记数
  String name = null;
  String sex = null;
  String age = null;
  
  try 
{
   //通过得到的文件输入流inputstream创建一个HSSFWordbook对象
         HSSFWorkbook hssfworkbook = new HSSFWorkbook(inputstream);
         HSSFSheet hssfsheet = hssfworkbook.getSheetAt(0);//第一个工作表
   HSSFRow hssfrow = hssfsheet.getRow(0);//第一行
   
   //遍历该表格中所有的工作表,i表示工作表的数量 getNumberOfSheets表示工作表的总数
            for (int i = 0; i < hssfworkbook.getNumberOfSheets(); i++) 
{
             hssfsheet = hssfworkbook.getSheetAt(i);
             
             //遍历该行所有的行,j表示行数 getPhysicalNumberOfRows行的总数
                for (int j = 1; j < hssfsheet.getPhysicalNumberOfRows(); j++) 
{
                 hssfrow = hssfsheet.getRow(j);
                 //判断是否还存在需要导入的数据
                    if (hssfrow == null) 
{
                     System.out.println("这里已没有数据,在第"+i+"列,第"+j+"行");
                     break;
                    }
                    /** *//**将EXCEL中的第 j 行,第一列的值插入到实例中*/
                    if (hssfrow.getCell((short) 0) == null) 
{
                     name = "";
                    } else if (hssfrow.getCell((short) 0).getCellType() == 0) 
{
                     name = new Double(hssfrow.getCell((short) 0).getNumericCellValue()).toString();
                    }
                    //如果EXCEL表格中的数据类型为字符串型
                    else 
{
                     name = hssfrow.getCell((short) 0).getStringCellValue().trim();
                    }
                    /** *//**将EXCEL中的第 j 行,第二列的值插入到实例中*/
                    //姓名
                    if(hssfrow.getCell((short) 1) == null)
{
                     sex = "";
                    } else if(hssfrow.getCell((short) 1).getCellType() == 0) 
{
                        sex = new Double(hssfrow.getCell((short) 1).getNumericCellValue()).toString();
                    }
                    //如果EXCEL表格中的数据类型为字符串型
                    else 
{
                        sex = hssfrow.getCell((short) 1).getStringCellValue().trim();
                    }
                    /** *//**将EXCEL中的第 j 行,第三列的值插入到实例中*/
                    //姓名
                    if(hssfrow.getCell((short) 1) == null)
{
                     age = "";
                    } else if(hssfrow.getCell((short) 1).getCellType() == 0) 
{
                        age = new Double(hssfrow.getCell((short) 1).getNumericCellValue()).toString();
                    }
                    //如果EXCEL表格中的数据类型为字符串型
                    else 
{
                        age = hssfrow.getCell((short) 1).getStringCellValue().trim();
                    }
                    
                    name = name.trim();
                    sex = sex.toUpperCase();
                    
                    if (name.equals("")) 
{
                     error.setName(name);
                     error.setMessage("姓名不能为空");
                     
                     list.add(error);
                     continue;
                    } else 
{
                     fm.setName(name);
                     fm.setSex(sex);
                     fm.setAge(age);
                     
                     session.save(fm);
                    }
                    //导入成功加1
                    input++;
                }
            }
            
            session.saveObjs(list.toArray());
        } catch () 
{
         
        }
 }
}



2.Form的写法



import   org.apache.struts.action.ActionForm;
  import
   org.apache.struts.upload.FormFile;

  public
   
  class
   Form 
  extends
   ActionForm 
  
  {
 // 上传的文件
 private FormFile _flddo;
 
 public void setUploadfile(FormFile formfile) 
{
  _flddo = formfile;
 }
 
 public FormFile getUploadfile() 
{
  return _flddo;
 }
 
 public void clear() 
{
  _flddo = null;
 }
}





3.上传页面Upload.jsp





<%
  
  @ page contentType="text/html; charset=GBK" language="java"
  %>
  
  <%
  
  @ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"
  %>
  

  <
  html
  >
  
   <  html:form 
  action
  ="/Action.do?method=getUpload"
   method
  ="POST"
   enctype
  ="multipart/form-data"
  >
  
    <  html:file 
  property
  ="uploadfile"
   size
  ="80%"
   
  />
  
    <  input 
  type
  ="button"
   value
  ="导 入"
   onclick
  ="upload(this.form)"
   class
  ="buttonGray"
  >
  
   </  html:form
  >
  
  </
  html
  >
  

  <
  script 
  language
  ="javascript"
  >
  
  
function upload(obj)
{
 if(confirm("您现在选择的是XXX,您确定要导入吗?"))
 
{
  var uploadfile = document.all.uploadfile.value;
  if((null == uploadfile) ||( "" == uploadfile))
  
{
   alert("上传文件没有指定!");
   return false;
  }
     obj.action = '<html:rewrite page="/Action.do?method=getUpload"/>';
     obj.submit();
 }
}
  </
  script
  >



4.下载页面Download.jsp




<%
 
 @ page contentType="text/html; charset=GBK"
 %>
 
 <%
 
 @ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" 
 %>
 
 <%
 
 @ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" 
 %>
 

 <%
 
 
//获取下载文件
 String download = (String) request.getSession().getAttribute("Download");
//清空文件
 request.getSession().removeAttribute("Download");
 %>
 

 <
 html
 >
 
 下传文件  < a  href
 ="<%=download %>"
  name
 ="下载"
 >
 下载
 </
 a
 >
 
 </
 html
 >

标签:web,Excel,org,HSSFCell,例子,POI,apache,import,public
From: https://blog.51cto.com/u_16065168/6493876

相关文章

  • c# WebUploader 分块上传
    ​ASP.NET上传文件用FileUpLoad就可以,但是对文件夹的操作却不能用FileUpLoad来实现。下面这个示例便是使用ASP.NET来实现上传文件夹并对文件夹进行压缩以及解压。ASP.NET页面设计:TextBox和Button按钮。​编辑TextBox中需要自己受到输入文件夹的路径(包含文件夹),通过Button实......
  • web基础与HTTP协议
    目录一、DNS二、域名三、web基础四、HTTP五、总结        摘要:简单叙述web基础,网页的概念,域名解析,域名结构,HTML超文本传输语言,cookie和session扩展 一、DNS1.DNS概念内网和外网无法通信,为了内网可以和外网通信,dns技术解决问题,可......
  • Web 前端框架市场统计
    根据  w3techs所做的统计1,有17.8%的网站没有使用javascript库。在使用js库的web网站中,Jquery占据了大部分,Bootstrap, React,Ajax, Vue,Angular排行如下:其他还有一些js库占据剩下的1%: 对于React,Angular,Vue的统计比较2如下:React占据所有已知使用js的网站......
  • WebRtc链接
    1.FEC原理及其实现https://blog.csdn.net/tonychan129/article/details/1205397262.webrtcQOS方法(汇总篇)https://blog.csdn.net/tonychan129/article/details/1205819013.WebRTC架构分析-WebRTC的线程模型https://blog.csdn.net/tonychan129/article/details/1255858034.WebR......
  • .net WebUploader 分块上传
    ​ 一、概述 所谓断点续传,其实只是指下载,也就是要从文件已经下载的地方开始继续下载。在以前版本的HTTP协议是不支持断点的,HTTP/1.1开始就支持了。一般断点下载时才用到Range和Content-Range实体头。HTTP协议本身不支持断点上传,需要自己实现。 二、Range  用于请求头......
  • Nginx支持web界面执行bash|python等系统命令和脚本
    ##关闭防火墙##(centos6)serviceiptablesstopchkconfigiptablesoff##(centos7)systemctlstopfirewalldsystemctldisablefirewalld#关闭selinuxsed-i's/SELINUX=enforcing/SELINUX=disabled/'/etc/selinux/configsetenforce0#已有epel源的跳过此步骤,直接安装......
  • 本地下载 web file操作
    functiondownload(){constlink=document.createElement('a')link.href=window.location.origin+`/static/doc/${this.type}.docx`+'?auth='+getToken()constfileName='20230615.docx'link.download=fil......
  • c#.net WebUploader 分块上传
    ​ 以ASP.NETCoreWebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API,包括文件的上传和下载。 准备文件上传的API #region 文件上传  可以带参数        [HttpPost("upload")]        publicJsonResultuploadProject(I......
  • web网络通信
    WEB通信流程静态数据:png,css,js,gif,mp4动态数据:从mysql数据库中读取出来的数据访问DNS服务器,通过DNS获取相应的域名对应IP通过IP对应服务器后,简历TCP连接等浏览器发送完HTTPRequest包后,服务器接收到请求包后才开始处理请求包服务器调用自身服务,返回HTTPResponse(......
  • 采用注解方式-HTTP Status 404 – Not Found 或者 采用web
    采用注解方式->HTTPStatus404–NotFound或者采用web.xml方式->cannotresolvetheclassinthetag运行一个简单的servlet程序,分别采用了两种方式对servlet进行映射,均报错。1⃣️采用Annotation方式@WebServlet(name="DownloadServlet",urlPatterns="/download"......