java poi excel 导入导出数据

背景:1.pringmvc 框架下 的excel 导入导出

     2.OI 操作office.

页面代码:

    <div class="modal fade bs-example-modal-lg" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel" aria-hidden="true">
      <div class="modal-dialog modal-lg" style="width:400px;">
        <div class="modal-content">
            <div style="height:300px;padding:10px;">
                <h1>批量导入商品信息</h1>
                <div style="margin-top:20px;padding:0px 5px 15px 5px;">
                    <span><strong>1.下载模板 > 2.导入模板 >3.导入完成</strong></span><br/>
                    <span><strong>温馨提示:</strong></span>
                    <div style="line-height:50px;">导入模板格式不能修改,否则会导致导入失败!</div>
                    <a  href="${webRoot}/product/downExcel">下载导入模板</a>
                </div>
                <div>
                    <form action="${webRoot}/product/importExcel" id="excelForm" method="post" enctype="multipart/form-data">
                    <input type="file" name="file" />
                        <div style="text-align:right;padding-right:50px;">
                            <button type="button" id="import" class="btn btn-default" >导入</button>
                            <script>
                                $("#import").click(function(){
                                    $("#excelForm").submit();
                                });
                            </script>
                        </div>
                    </form>
                </div>
            </div>
        </div>
      </div>
    </div>

Controller 代码:

@RequestMapping("importExcel")
    public String addComm(ModelMap model, HttpServletRequest request) {
        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
        MultipartFile file = multipartRequest.getFile("file");
        String[][] result = null;
        ExportUtil exportUtil = new ExportUtil();
        try {
            exportUtil.SaveFileFromInputStream(file.getInputStream(),
                    request.getSession().getServletContext()
                    .getRealPath(File.separator)+"upload", "product.xls");
        File file1 = new File(request.getSession().getServletContext()
                .getRealPath(File.separator)+"upload" + "/product.xls");
            result =exportUtil.getData(file1, 4);
        } catch (Exception ex) {
            System.out.println("上传文件失败");
            ex.printStackTrace();
        }
        if (result == null)
            return null;
        User user = (User)request.getSession().getAttribute("user");
        if(user==null) return "";
        int rowLength = result.length;
        List<Product> proList =exportUtil.doProduct(rowLength, result,user);
        ps.excelAdd(proList);
        return "redirect:/product/getproduct";
    }
    @RequestMapping("downExcel")
    @ResponseBody
    public String downExcel(HttpServletResponse response){
        try {
            ServletOutputStream outputStream = response.getOutputStream();

        String fileName = new String(("商品导入模板").getBytes(), "ISO8859_1");
        response.setHeader("Content-disposition", "attachment; filename=" + fileName + ".xls");// 组装附件名称和格式
        es.exportExcel(outputStream,false);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return "";
    }

    @RequestMapping("exportExcel")
    @ResponseBody
    public String exportExcel(HttpServletResponse response){
        try {
            ServletOutputStream outputStream = response.getOutputStream();

        String fileName = new String(("蓝图进销存商品导出").getBytes(), "ISO8859_1");
        response.setHeader("Content-disposition", "attachment; filename=" + fileName + ".xls");// 组装附件名称和格式
        es.exportExcel(outputStream,true);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return "";
    }

ExportService:

package com.ly.jxc.service;

import java.io.IOException;
import java.util.List;

import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
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.ss.util.CellRangeAddress;
import org.springframework.stereotype.Service;
import com.ly.jxc.dao.ProductClassDAO;
import com.ly.jxc.dao.ProductDAO;
import com.ly.jxc.dao.ProductUnitDAO;
import com.ly.jxc.entity.Product;
import com.ly.jxc.entity.ProductClass;
import com.ly.jxc.entity.ProductUnit;
import com.ly.jxc.util.ExportUtil;

@Service
public class ExportService {
    @Resource
    private ProductUnitDAO pud;
    @Resource
    private ProductClassDAO pcd;
    @Resource
    private ProductDAO pd;
      public void exportExcel(ServletOutputStream outputStream,boolean isDwon)
        {
            List<ProductUnit> puList = pud.getAllUnit();
            List<ProductClass> pcList = pcd.GetAllProductClass();
            // 创建一个workbook 对应一个excel应用文件
            // HSSWorkbook 是03版excel 的个格式,XSSWorkbook 是07以上版本,HSS 和 XSS 开头分别代表03,07可以切换
            HSSFWorkbook workBook = new HSSFWorkbook();
            // 在workbook中添加一个sheet,对应Excel文件中的sheet
            HSSFSheet sheet = workBook.createSheet("商品导入导出");
            //表格默认行宽度
            sheet.setDefaultColumnWidth(15);
            sheet.setDefaultRowHeightInPoints(100);

            ExportUtil exportUtil = new ExportUtil(workBook, sheet);
            //设置单元格格式
            HSSFCellStyle headStyle = exportUtil.getHeadStyle(false);
            HSSFCellStyle bodyStyle = exportUtil.getBodyStyle();
            //创建单元格
            HSSFCell cell = null;
            //合并单元格
            sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 8));
            //创建一行
            HSSFRow descRow = sheet.createRow(0);
            //设置行高 单位是像素
            descRow.setHeightInPoints(80);
            //表示穿件的单元格是在第一行
            cell=descRow.createCell(0);
            //设置单元格格式
            cell.setCellStyle(exportUtil.getHeadStyle(true));
            //设置单元格值
            cell.setCellValue("商品单位和类型填写必须填写对应的数字ID,否则会导入失败!"); 

            // 构建表头
            HSSFRow unitRow = sheet.createRow(1);
            unitRow.setHeightInPoints(40);
            cell=unitRow.createCell(0);
            cell.setCellStyle(headStyle);
            cell.setCellValue("商品单位-ID:");  

            // 构建商品单位数据,动态构建导出数据
            if (puList != null && puList.size() > 0)
            {
                for (int j = 0; j < puList.size(); j++)
                {
                    ProductUnit pu = puList.get(j);
                    cell=unitRow.createCell(j+1);
                    cell.setCellStyle(bodyStyle);
                    cell.setCellValue(pu.getName()+"--"+pu.getpId());
                }
            }
            // 构建商品类型表头 ,动态构建导出数据
            HSSFRow classRow = sheet.createRow(2);
            classRow.setHeightInPoints(40);
            cell=classRow.createCell(0);
            cell.setCellStyle(headStyle);
            cell.setCellValue("商品类型-ID:");
            // 构建商品类型数据
            if (pcList != null && pcList.size() > 0)
            {
                for (int j = 0; j < pcList.size(); j++)
                {
                    ProductClass pc = pcList.get(j);
                    cell=classRow.createCell(j+1);
                    cell.setCellStyle(bodyStyle);
                    cell.setCellValue(pc.getName()+"--"+pc.getProductClass_ID());
                }
            }

                HSSFRow bodyRow = sheet.createRow(3);
                bodyRow.setHeightInPoints(40);

                cell = bodyRow.createCell(0);
                cell.setCellStyle(headStyle);
                cell.setCellValue("条码");  

                cell = bodyRow.createCell(1);
                cell.setCellStyle(headStyle);
                cell.setCellValue("名字");  

                cell = bodyRow.createCell(2);
                cell.setCellStyle(headStyle);
                cell.setCellValue("类别ID");  

                cell = bodyRow.createCell(3);
                cell.setCellStyle(headStyle);
                cell.setCellValue("产品规格"); 

                cell = bodyRow.createCell(4);
                cell.setCellStyle(headStyle);
                cell.setCellValue("产品单位"); 

                cell = bodyRow.createCell(5);
                cell.setCellStyle(headStyle);
                cell.setCellValue("出售价格");  

                cell = bodyRow.createCell(6);
                cell.setCellStyle(headStyle);
                cell.setCellValue("进货价格"); 

                cell = bodyRow.createCell(7);
                cell.setCellStyle(headStyle);
                cell.setCellValue("最低价格");  

                cell = bodyRow.createCell(8);
                cell.setCellStyle(headStyle);
                cell.setCellValue("备注");
                //如果是导出商品,则需要将商品数据写入
                if(isDwon){

                    List<Product> proList = pd.getAllProducts();
                    for (int i = 0; i < proList.size(); i++) {
                            Product p =proList.get(i);
                           HSSFRow dateRow = sheet.createRow(4+i);
                           bodyRow.setHeightInPoints(40);

                           cell = dateRow.createCell(0);
                           cell.setCellStyle(bodyStyle);
                           cell.setCellValue(p.getpId());  

                           cell = dateRow.createCell(1);
                           cell.setCellStyle(bodyStyle);
                           cell.setCellValue(p.getName());  

                           cell = dateRow.createCell(2);
                           cell.setCellStyle(bodyStyle);
                           cell.setCellValue(p.getpList());  

                           cell = dateRow.createCell(3);
                           cell.setCellStyle(bodyStyle);
                           cell.setCellValue(p.getPsID());  

                           cell = dateRow.createCell(4);
                           cell.setCellStyle(bodyStyle);
                           cell.setCellValue(p.getpUtilId()); 

                           cell = dateRow.createCell(5);
                           cell.setCellStyle(bodyStyle);
                           cell.setCellValue(p.getPrice());  

                           cell = dateRow.createCell(6);
                           cell.setCellStyle(bodyStyle);
                           cell.setCellValue(p.getStockPrice());  

                           cell = dateRow.createCell(7);
                           cell.setCellStyle(bodyStyle);
                           cell.setCellValue(p.getLowestPrice());  

                           cell = dateRow.createCell(8);
                           cell.setCellStyle(bodyStyle);
                           cell.setCellValue(p.getRemark());
                    }
                }
            try
            {
                workBook.write(outputStream);
                outputStream.flush();
                outputStream.close();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            finally
            {
                try
                {
                    outputStream.close();
                }
                catch (IOException e)
                {
                    e.printStackTrace();
                }
            }  

        }  

}

辅助类ExportUtil:

package com.ly.jxc.util;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpSession;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFFont;
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.hssf.util.HSSFColor;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.util.CellRangeAddress;

import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.springframework.beans.factory.annotation.Autowired;

import com.ly.jxc.entity.Product;
import com.ly.jxc.entity.User;

public class ExportUtil {

    private HSSFWorkbook wb = null;

    private HSSFSheet sheet = null;
    @Autowired
HttpSession session;
    /**
     * @param wb
     * @param sheet
     */
    public ExportUtil(HSSFWorkbook wb, HSSFSheet sheet) {
        this.wb = wb;
        this.sheet = sheet;
    }

    public ExportUtil() {
    }

    /**
     * 合并单元格后给合并后的单元格加边框
     *
     * @param region
     * @param cs
     */
    public void setRegionStyle(CellRangeAddress region, XSSFCellStyle cs) {
        int toprowNum = region.getFirstRow();
        for (int i = toprowNum; i <= region.getLastRow(); i++) {
            HSSFRow row = sheet.getRow(i);
            for (int j = region.getFirstColumn(); j <= region.getLastColumn(); j++) {
                HSSFCell cell = row.getCell(j);// XSSFCellUtil.getCell(row,
                                                // (short) j);
                cell.setCellStyle(cs);
            }
        }
    }

    /**
     * 设置表头的单元格样式
     *
     * @return
     */
    public HSSFCellStyle getHeadStyle(boolean isalert) {
        // 创建单元格样式
        HSSFCellStyle cellStyle = wb.createCellStyle();
        // 设置单元格的背景颜色为淡蓝色
        if (!isalert)
            cellStyle.setFillForegroundColor(HSSFColor.PALE_BLUE.index);
        else
            cellStyle.setFillForegroundColor(HSSFColor.RED.index);
        cellStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
        // 设置单元格居中对齐
        cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
        // 设置单元格垂直居中对齐
        cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);
        // 创建单元格内容显示不下时自动换行
        cellStyle.setWrapText(true);
        // 设置单元格字体样式
        HSSFFont font = wb.createFont();
        // 设置字体加粗
        font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);
        font.setFontName("宋体");
        if (isalert) {
            font.setColor(HSSFColor.WHITE.index);
        }
        font.setFontHeight((short) 200);
        cellStyle.setFont(font);
        // 设置单元格边框为细线条
        cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);
        cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN);
        cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);
        cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);
        return cellStyle;
    }

    /**
     * 设置表体的单元格样式
     *
     * @return
     */
    public HSSFCellStyle getBodyStyle() {
        // 创建单元格样式
        HSSFCellStyle cellStyle = wb.createCellStyle();

        // 设置单元格居中对齐
        cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
        // 设置单元格垂直居中对齐
        cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);
        // 创建单元格内容显示不下时自动换行
        cellStyle.setWrapText(true);
        // 设置单元格字体样式
        HSSFFont font = wb.createFont();
        // 设置字体加粗
        font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);
        font.setFontName("宋体");
        font.setFontHeight((short) 200);
        cellStyle.setFont(font);
        // 设置单元格边框为细线条
        cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);
        cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN);
        cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);
        cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);

        return cellStyle;
    }

    // 将MultipartFile 转换为File
    public static void SaveFileFromInputStream(InputStream stream, String path,
            String savefile) throws IOException {
        FileOutputStream fs = new FileOutputStream(path + "/" + savefile);
        // System.out.println("------------"+path + "/"+ savefile);
        byte[] buffer = new byte[1024 * 1024];
        int bytesum = 0;
        int byteread = 0;
        while ((byteread = stream.read(buffer)) != -1) {
            bytesum += byteread;
            fs.write(buffer, 0, byteread);
            fs.flush();
        }
        fs.close();
        stream.close();
    }

    /**
     *
     * 读取Excel的内容,第一维数组存储的是一行中格列的值,二维数组存储的是多少个行
     *
     * @param file
     *            读取数据的源Excel
     *
     * @param ignoreRows
     *            读取数据忽略的行数,比喻行头不需要读入 忽略的行数为1
     *
     * @return 读出的Excel中数据的内容
     *
     * @throws FileNotFoundException
     *
     * @throws IOException
     */

    public static String[][] getData(File file, int ignoreRows)throws Exception {
        List<String[]> result = new ArrayList<String[]>();
        int rowSize = 0;
        BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));
        // 打开HSSFWorkbook
        POIFSFileSystem fs = new POIFSFileSystem(in);
        HSSFWorkbook wb = new HSSFWorkbook(fs);
        HSSFCell cell = null;
        for (int sheetIndex = 0; sheetIndex < wb.getNumberOfSheets(); sheetIndex++) {
            HSSFSheet st = wb.getSheetAt(sheetIndex);
            // 第一行为标题,不取
            for (int rowIndex = ignoreRows; rowIndex <= st.getLastRowNum(); rowIndex++) {
                HSSFRow row = st.getRow(rowIndex);
                if (row == null) {
                    continue;
                }
                int tempRowSize = row.getLastCellNum() + 1;
                if (tempRowSize > rowSize) {
                    rowSize = tempRowSize;
                }
                String[] values = new String[rowSize];
                Arrays.fill(values, "");
                boolean hasValue = false;
                for (short columnIndex = 0; columnIndex <= row.getLastCellNum(); columnIndex++) {
                    String value = "";
                    cell = row.getCell(columnIndex);
                    if (cell != null) {
                        // 注意:一定要设成这个,否则可能会出现乱码
                        switch (cell.getCellType()) {
                        case HSSFCell.CELL_TYPE_STRING:
                            value = cell.getStringCellValue();
                            break;
                        case HSSFCell.CELL_TYPE_NUMERIC:
                            if (HSSFDateUtil.isCellDateFormatted(cell)) {
                                Date date = cell.getDateCellValue();
                                if (date != null) {
                                    value = new SimpleDateFormat("yyyy-MM-dd").format(date);
                                } else {
                                    value = "";
                                }
                            } else {
                                value = new DecimalFormat("0").format(cell.getNumericCellValue());
                            }
                            break;
                        case HSSFCell.CELL_TYPE_FORMULA:
                            // 导入时如果为公式生成的数据则无值
                            if (!cell.getStringCellValue().equals("")) {
                                value = cell.getStringCellValue();
                            } else {
                                value = cell.getNumericCellValue() + "";
                            }
                            break;
                        case HSSFCell.CELL_TYPE_BLANK:
                            break;
                        case HSSFCell.CELL_TYPE_ERROR:
                            value = "";
                            break;
                        case HSSFCell.CELL_TYPE_BOOLEAN:
                            value = (cell.getBooleanCellValue() == true ? "Y"
                            : "N");
                            break;
                        default:
                            value = "";
                        }
                    }
                    if (columnIndex == 0 && value.trim().equals("")) {
                        break;
                    }
                    values[columnIndex] = rightTrim(value);
                    hasValue = true;
                }
                if (hasValue) {
                    result.add(values);
                }
            }
        }
        in.close();
        String[][] returnArray = new String[result.size()][rowSize];
        for (int i = 0; i < returnArray.length; i++) {
            returnArray[i] = (String[]) result.get(i);
        }
        return returnArray;
    }

    /**
     *
     * 去掉字符串右边的空格
     *
     * @param str
     *            要处理的字符串
     *
     * @return 处理后的字符串
     */

    public static String rightTrim(String str) {
        if (str == null) {
            return "";
        }
        int length = str.length();
        for (int i = length - 1; i >= 0; i--) {
            if (str.charAt(i) != 0x20) {
                break;
            }
            length--;
        }
        return str.substring(0, length);
    }
    public List<Product> doProduct(int rowLength,String[][] result,User user){
        // 默认从1 开始 本来是为0 剔除掉

                List<Product> proList = new ArrayList<Product>();
                Date date = new Date();
                for (int i = 0; i < rowLength; i++) {
                    Product pro = new Product();

                    for (int j = 0; j < result[i].length; j++) {// 默认从1开始添加
                        // 客户ID 客户名 客户类型 客户电话 客户状态 创建时间 放出时间 跟入时间 跟入人 放出人
                        // 27 法规和热 特级 1212121 1 41773 2014-05-14 10:20:48.0 yq1012
                        // 整理 id 去掉 。 创建时间 换成当前时间,,,放出时间 跟入时间 跟入人 放出人----全不要
                        // 格式如上
                        // System.out.print(result[i][j]+"\t\t");
                        if (j == 0) // 编码
                            pro.setpId(result[i][j]);
                        if (j == 1) // 名字
                            pro.setName(result[i][j]);
                        if (j == 2) // 类别
                            pro.setpList(Integer.parseInt(result[i][j]));
                        if (j == 3) // 商品规格
                            pro.setPsID(result[i][j]);
                        if (j == 4)// 单位
                            pro.setpUtilId(Integer.parseInt(result[i][j]));
                        if (j == 5)// 出售价格
                            pro.setPrice(Double.parseDouble(result[i][j]));
                        if (j == 6) // 进货价格
                            pro.setStockPrice(Double.parseDouble(result[i][j]));
                        if (j == 7)// 最低价格
                            pro.setLowestPrice(Double.parseDouble(result[i][j]));
                        if (j == 8)// 备注
                            pro.setRemark(result[i][j]);

                    }

                    pro.setUserId(user.getUser_Id());
                    proList.add(pro);
                    // crmService.saveCrmUser(crm);
                }
                return proList;
    }

}
时间: 2024-10-06 06:22:23

java poi excel 导入导出数据的相关文章

java jxl excel 导入导出的 总结(建立超链接,以及目录sheet的索引)

最近项目要一个批量导出功能,而且要生成一个单独的sheet页,最后后面所有sheet的索引,并且可以点击进入连接.网上搜索了一下,找到一个方法,同时把相关的excel导入导出操作记录一下!以便以后使用! 简单先写一下目录的建立的主要代码,测试用的 List ls = new ArrayList();//报表名称列表  ls.add("BB_BB03");  ls.add("BB_BB05");  ls.add("BB_BB06"); try { 

POI Excel导入导出

一.导出到Excel 基本思路:点击导出后生成临时.xls文件,返回文件名,供用户下载,下载完后删除文件 带查询的导出(前端EasyUI),如下为导出界面图 下面为导出按钮绑定的函数: var exportCondition={};//导出条件//导出功能 function outputData(){ $.ajax({ type: "POST", url: path+"/main/inputAndOutput/output", data: exportConditi

java中excel导入\导出工具类

1.导入工具 1 package com.linrain.jcs.test; 2 3 4 import jxl.Cell; 5 import jxl.Sheet; 6 import jxl.Workbook; 7 import jxl.write.Label; 8 import jxl.write.WritableSheet; 9 10 import java.io.InputStream; 11 import java.lang.reflect.Field; 12 import java.te

java实现excel表格导出数据

/** * 导出清单 eb中 firstRow(EntityBean) 列表第一行数据,键值对(不包含序号)例:("name","姓名") * data(EntityBean[]) 列表数据 * * @author zhaojq */ public PR exportData(EntityBean eb) { if (eb == null) { return new PR(0, "参数为空", null); } try { // 创建表格文件 S

java poi excel导入模板设置下拉框

import org.apache.poi.hssf.usermodel.DVConstraint; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFDataValidation; import org.apache.poi.hssf.usermodel.HSSFFo

java poi Excel导入 整数浮点数转换问题解决

/**     * 获取单元格数据     */    protected static String getCellValue(Cell cell) {        String cellValue = "";        if (cell != null) {            switch (cell.getCellType()) {            case Cell.CELL_TYPE_STRING:                cellValue = cel

Java - Excel 导入 导出,报无效数据

用Java,做了套后台账号管理系统,内有Excel导入导出模块 后台管理员登录后,可以通过<input type="file">,读取指定格式的Excel工作薄 系统会解析读取到的Excel,获取工作薄中,各工作表的数据 当然,如果 上传文件,不是Excel文件,则会显示上传失败 或是 是Excel文件,但其内工作表的数据不符合要求,则会将不符合要求的数据行,自动过滤掉 问题来了: 记得以前测试的时候,是没问题的,但今天,把导出文件,再次导入时,就一直报无效数据 (别提当时

一个基于POI的通用excel导入导出工具类的简单实现及使用方法

前言: 最近PM来了一个需求,简单来说就是在录入数据时一条一条插入到系统显得非常麻烦,让我实现一个直接通过excel导入的方法一次性录入所有数据.网上关于excel导入导出的例子很多,但大多相互借鉴.经过思考,认为一百个客户在录入excel的时候,就会有一百个格式版本,所以在实现这个功能之前,所以要统一excel的格式.于是提供了一个通用excel模版的下载功能.当所有客户用模版录入好数据再上传到系统,后端对excel进行解析,然后再持久化到数据库. 概述: 此工具类的几大特点 1.基本导入导出

POI实现excel导入导出

1.分析excel import org.apache.poi.hssf.usermodel.*; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.util.Ce