zoukankan      html  css  js  c++  java
  • java struts jxl 导入导出Excel(无模板)

    jar包:

    import javax.servlet.http.HttpServletResponse;
    
    import java.io.OutputStream;
    import java.io.File;
    import jxl.DateCell;
    import jxl.Sheet;
    import jxl.Workbook;
    import jxl.format.Alignment;
    import jxl.format.Border;
    import jxl.format.BorderLineStyle;
    import jxl.format.VerticalAlignment;
    import jxl.write.Label;
    import jxl.write.WritableCellFormat;
    import jxl.write.WritableFont;
    import jxl.write.WritableSheet;
    import jxl.write.WritableWorkbook;
    import jxl.write.WriteException;
    import jxl.write.biff.RowsExceededException;
    View Code

    一、导入

    jsp:

    <%@page import="com.sdfrdj.share.Constant"%>
    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <html >
    <head>
    <title></title>
    <link href="<%=request.getContextPath()%>/website/enroll/images/style.css" rel="stylesheet" type="text/css" /> 
    <link href="<%=request.getContextPath()%>/comm_images/basic.css" rel="stylesheet" type="text/css"/>
    <script type="text/javascript" src="<%=request.getContextPath()%>/js/jquery.min.js"></script>
    <script src="<%=request.getContextPath() %>/js/main.js" type="text/javascript"></script>
    </head>
    <script type="text/javascript">
        function tips(){
            document.getElementById("tips").style.display="";
            return true;
        }
    </script>
    
    <body>
    
    <s:form action="createTableAction!importTableDataList.action" theme="simple" id="commentForm" method="post" enctype="multipart/form-data" onsubmit="tips()" >
    <table width="100%" border="0" cellspacing="0" cellpadding="0"  class="bg">
      <tr>
        <td ><table width="100%" border="0" cellspacing="0" cellpadding="0"  >
          <tr>
            <td id="qtKey" height="10"></td>
          </tr>
          <tr>
            <td><table width="98%" border="0" align="center" cellpadding="0" cellspacing="0" class="work_bg">
              <tr>
                <td class="titlebg"><table width="98%" border="0" align="center" cellpadding="0" cellspacing="0">
                  <tr>
                    <td class="font_title" align="center">导入</td>
                  </tr>
                </table></td>
              </tr>
              <tr>
                <td  ><table width="100%" border="0" cellspacing="0" cellpadding="0">
                  <tr>
                    <td>
                        <table width="100%" border="0" cellspacing="0" cellpadding="0" class="tab_bg1">
                          <tr>
                              <td align="right" class="tab_bg2"><span class="font_red">*</span><label for="gender">自定义表信息导入</label>:</td>
                              <td align="left" >
                                <s:file type="file" name="excel"  cssClass="input02"></s:file>
                                <input name="createTableColumn.tableName" id="tableName" type="hidden" value="<s:property value ="createTableColumn.tableName"/>"/>
                              </td>
                           </tr>
                        </table>
                    </td>
                  </tr>
                  <tr id="tips" style="display: none;">
                    <td class="gray_bg" align="center" height="10">
                        <font color="red">正在导入中...时间较长,请耐心等待!</font>
                       </td>
                  </tr>
                 
                  <tr>
                    <td class="gray_bg" align="center" height="50"><input type="submit"  id="button3" value="提交" class="btn_blue"  />
                      &nbsp;
                      <input type="submit" name="button" id="button" value="关闭" class="btn_blue"  onclick="window.close();"/> </td>
                  </tr>
                 
                     <tr>
                    <td style="color: red;">
                     <s:actionerror/>
                    </td>
                  </tr>
               
                 
                </table></td>
              </tr>
            </table></td>
          </tr>
          <tr>
            <td height="10"></td>
          </tr>
        </table></td>
      </tr>
    </table>
    </s:form>
    </body>
    </html>
    View Code

    java:

    private File excel;//导入文件
    
    public File getExcel() {
        return excel;
    }
    
    public void setExcel(File excel) {
        this.excel = excel;
    }
    
    
    /**
     * 导入表数据
     * @return
     */
    public String importTableDataList() {
        try {
            if (excel != null) {
                //获取已有的字段
                createTableColumnList = createTableService.selectCreateTableColumnInfo(createTableColumn);
                Map<String, String> columnMap = new HashMap<>();
                Map<String, String> dataTypeMap = new HashMap<>();
                for (CreateTableColumn createTableColumn : createTableColumnList) {
                    columnMap.put(createTableColumn.getColumnComments(), createTableColumn.getColumnName());
                    dataTypeMap.put(createTableColumn.getColumnComments(), createTableColumn.getDataType());
                }
                
                Workbook book = Workbook.getWorkbook(excel);
                Sheet sheet = book.getSheet(0);
                int clos = sheet.getColumns();//得到所有的列
                int rows = sheet.getRows();//得到所有的行
                if (clos < 1 || rows < 2) {
                    this.getRequest().setAttribute("message","文件里面没有数据或者表头,请修改后再导入!");
                    return "failJsp";
                }
                
                //得到表头
                String [] titles=new String[sheet.getColumns()];
                for (int j = 0; j < clos; j++) {
                    titles[j] = sheet.getCell(j, 0).getContents();
                }
                
                //获取上传文件表头对应的数据库列名
                StringBuilder errorStr = new StringBuilder();
                StringBuilder columnNameSql = new StringBuilder();
                columnNameSql.append("COLUMN_ID");
                for (String title : titles) {
                    String columnName = columnMap.get(title);
                    if (StringUtil.isEmp(columnName)) {
                        errorStr.append("文件表头[").append(title).append("],");
                    } else {
                        columnNameSql.append(",").append(columnName);
                    }
                }
                if (errorStr.length() > 0) {
                    errorStr.deleteCharAt(errorStr.length() - 1);
                    errorStr.append("与数据库设置的字段名不对应,请修改后再导入!");
                    
                    this.getRequest().setAttribute("message",errorStr.toString());
                    return "failJsp";
                } else {
                    StringBuilder saveSql = null;
                    StringBuilder columnValueSql = null;
                    SimpleDateFormat dataFormat = new SimpleDateFormat("yyyy-MM-dd");
                    for (int i = 1; i < rows; i++) {
                        saveSql = new StringBuilder();
                        saveSql.append("INSERT INTO ").append(createTableColumn.getTableName()).append("(");
                        columnValueSql = new StringBuilder();
                        columnValueSql.append("SEQ_CREATE_TABLE.NEXTVAL");
                        for (int j = 0; j < clos; j++) {
                            String columnValue = sheet.getCell(j, i).getContents();//第一个是列数,第二个是行数
                            if (StringUtil.isEmp(columnValue)) {
                                columnValueSql.append(",NULL");
                            } else {
                                if ("DATE".equals(dataTypeMap.get(titles[j]))) {
                                    try {
                                        columnValue = dataFormat.format(((DateCell) sheet.getCell(j, i)).getDate());
                                        columnValueSql.append(",TO_DATE('").append(columnValue).append("','YYYY-MM-DD')");
                                    } catch (Exception e) {
                                        columnValueSql.append(",TO_DATE('").append(columnValue).append("','YYYY-MM-DD')");
                                    }
                                } else {
                                    columnValueSql.append(",'").append(columnValue).append("'");
                                }
                            }
                        }
                        saveSql.append(columnNameSql).append(") VALUES(").append(columnValueSql).append(")");
                        
                        Map<String, String> saveSqlMap = new HashMap<>();
                        saveSqlMap.put("CREATE_SQL", saveSql.toString());
                        
                        createTableService.createTable(saveSqlMap);
                    }
                }
            } else {
                this.getRequest().setAttribute("message",Message.TI_SHI_FAIL);
                return "failJsp";
            }
        } catch (Exception e) {
            e.printStackTrace();
            this.getRequest().setAttribute("message","保存失败,请检查数据的有效性!");
            return "failJsp";
        }
        this.getRequest().setAttribute("message", Message.TI_SHI_SUCCESS);
        return "successJsp";
    }
    View Code

    二、导出

    java:

    /**
     * 导出表数据
     * @return
     */
    public String exportTable() { 
        try {
            HttpServletResponse response = ServletActionContext.getResponse();
            createTableService.selectExportTableData(createTableColumn, response);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    
    @Override
    public List<Map<String, Object>> selectExportTableData(CreateTableColumn createTableColumn,
            HttpServletResponse response) throws Exception {
        
        CreateTable queryCreateTable = new CreateTable();
        queryCreateTable.setTableName(createTableColumn.getTableName());
        CreateTable createTable = createTableDao.selectCreateTable(queryCreateTable);
        String excelName = createTable.getTableComments() + "信息";
        
        List<CreateTableColumn> createTableColumnList = createTableDao.selectCreateTableColumnInfo(createTableColumn);
    
        Map<String, Object> paramsMap = new HashMap<>();
        paramsMap.put("tableName", createTableColumn.getTableName());
        List<Map<String, Object>> tableDataList = createTableDao.selectTableDataList(paramsMap);
    
        response.setHeader("Content-disposition",
                "attachment; filename=" + java.net.URLEncoder.encode(excelName+".xls", "utf-8") + ""); // 设定输出文件头
        response.setContentType("application/msexcel");// 定义输出类型
        OutputStream os = response.getOutputStream();
    
        this.createExcel(os, createTableColumnList, tableDataList, excelName);
    
        return tableDataList;
    }
    
    private void createExcel(OutputStream os, List<CreateTableColumn> createTableColumnList,
            List<Map<String, Object>> tableDataList, String excelName) {
    
        try {
            WritableWorkbook book = Workbook.createWorkbook(os);
            WritableFont font = new WritableFont(WritableFont.createFont("宋体_GB2312"), 9, WritableFont.NO_BOLD);// 带有自行的对象
            WritableCellFormat format = new WritableCellFormat(font);
            format.setAlignment(Alignment.CENTRE);// 设置水平对齐方式
            format.setVerticalAlignment(VerticalAlignment.CENTRE);// 垂直对齐
            format.setBorder(Border.ALL, BorderLineStyle.THIN);// 设置边框All代表所有和线条的样式
            format.setWrap(true);// 是否换行
            WritableSheet sheet = null;// 定义一个工作表
            sheet = book.createSheet(excelName, 0);// 创建一个工作表定义名称第一个
            sheet.setColumnView(0, 7);
            if (createTableColumnList != null && createTableColumnList.size() > 0) {
                for (int i = 0; i < createTableColumnList.size(); i++) {
                    sheet.setColumnView(i + 1, 30);
                }
            }
            
            this.createTitle(sheet, createTableColumnList);
            if (tableDataList != null && tableDataList.size() > 0) {
                for (int i = 0; i < tableDataList.size(); i++) {
                    Map<String, Object> map = tableDataList.get(i);
    
                    sheet.addCell(new jxl.write.Number(0, i + 1, i + 1, format));// 序列(Number(列数,行数,序号,format))
                    int c = 0;
                    for (CreateTableColumn createTableColumn : createTableColumnList) {
                        c++;
                        if (StringUtil.isEmp(map.get(createTableColumn.getColumnName()))) {
                            sheet.addCell(new Label(c, i + 1, "", format));
                        } else {
                            if ("DATE".equals(createTableColumn.getDataType())) {
                                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
                                sheet.addCell(new Label(c, i + 1, dateFormat.format(map.get(createTableColumn.getColumnName())), format));
                            } else {
                                sheet.addCell(new Label(c, i + 1, (map.get(createTableColumn.getColumnName())).toString(), format));
                            }
                        }
                    }
                }
            }
            book.write();
            book.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    
    }
    
    private void createTitle(WritableSheet sheet, List<CreateTableColumn> createTableColumnList) throws  RowsExceededException, WriteException {
        //行说明标题
        WritableFont headFont=new WritableFont(WritableFont.createFont("宋体_GB2312"),12,WritableFont.BOLD);
        WritableCellFormat headFormat=new WritableCellFormat(headFont);
        headFormat.setAlignment(Alignment.CENTRE);
        headFormat.setVerticalAlignment(VerticalAlignment.CENTRE); 
        headFormat.setBorder(Border.ALL,BorderLineStyle.THIN);
        headFormat.setWrap(true);
        headFormat.setVerticalAlignment(VerticalAlignment.CENTRE);
        
        
        Label label=new Label(0,0,"序号",headFormat);
        sheet.addCell(label);
        int i = 0;
        for (CreateTableColumn createTableColumn : createTableColumnList) {
            i++;
            label=new Label(i,0,createTableColumn.getColumnComments(),headFormat);
            sheet.addCell(label);
        }
    }
    View Code
  • 相关阅读:
    P3822 [NOI2017]整数
    P4630 [APIO2018] Duathlon 铁人两项
    P3230 [HNOI2013]比赛
    P2570 [ZJOI2010]贪吃的老鼠
    P4576 [CQOI2013]棋盘游戏
    P3256 [JLOI2013]赛车
    P3297 [SDOI2013]逃考
    CF487E Tourists
    设置一个双色球脚本(2)并带颜色输出
    设置一个双色球脚本
  • 原文地址:https://www.cnblogs.com/BobXie85/p/9869171.html
Copyright © 2011-2022 走看看