精华内容
下载资源
问答
  • java 读取excel数据 poi导入...1、在实际开发中,可能有需求需要将excel导入到业务系统中,具体实现可以使用Apache poi 来实现。 2、依赖pom如下: <dependency> <groupId>org.apache.poi</gro...

                 java 读取excel数据 poi导入excel 数据 java实现导入excel数据

    一、说明

    1、在实际开发中,可能有需求需要将excel导入到业务系统中,具体实现可以使用Apache poi 来实现。

    2、依赖pom如下:

         <dependency>
    	    <groupId>org.apache.poi</groupId>
    	    <artifactId>poi</artifactId>
    	    <version>3.15</version>
    	</dependency>
        
    	<dependency>
    	    <groupId>org.apache.poi</groupId>
    	    <artifactId>poi-ooxml</artifactId>
    	    <version>3.15</version>
    	</dependency>

    二、代码实现

    1、创建ExcelImport 类,实现excel数据导入

    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.InputStream;
    import java.text.DecimalFormat;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    
    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.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.DateUtil;
    import org.apache.poi.xssf.usermodel.XSSFCell;
    import org.apache.poi.xssf.usermodel.XSSFRow;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    import org.springframework.web.multipart.MultipartFile;
    
    /**
     * description: Excel 数据导入
     * @version v1.0
     * @author w
     * @date 2020年3月30日下午9:46:27
     **/
    public class ExcelImport {
    
    	private ExcelImport INSTANSE = new ExcelImport();
    	
    	/**
    	 * excel 2003 suffix
    	 */
    	private static final String EXCEL_XLS_SUFFIX = ".xls" ; 
    	
    	/**
    	 * excel 2007 或以上 suffix
    	 */
    	private static final String EXCEL_XLSX_SUFFIX = ".xlsx";
    	
    	/**
    	 * 分隔符 "."
    	 */
    	public static final String POINT = ".";  
    	
    	/**
    	 * description: 读取excel数据 
    	 * @param file
    	 * @return List<List<Object>>
    	 * @version v1.0
    	 * @author w
    	 * @date 2020年3月31日 下午3:36:39
    	 */
    	public static List<List<Object>> importFile (File file) throws Exception{
    		if(file == null) {
    			return null ;
    		}
    		if(file.getName().endsWith(EXCEL_XLS_SUFFIX)) {
    			return readXls(new FileInputStream(file));
    		}
    		if(file.getName().endsWith(EXCEL_XLSX_SUFFIX)) {
    			return readXlsx(new FileInputStream(file));
    		}
    		throw new RuntimeException("文件不对,必须是excel文件,后缀名以:"+EXCEL_XLS_SUFFIX + " 或者 "+ EXCEL_XLSX_SUFFIX);
    	}
    	
    	/**
    	 * description: 导入excel --- 支持web
    	 * @param fileName
    	 * @param inputStream
    	 * @throws Exception
    	 * @return List<List<Object>>
    	 * @version v1.0
    	 * @author w
    	 * @date 2020年3月31日 下午4:51:01
    	 */
    	public static List<List<Object>> importFile (MultipartFile multipartFile) throws Exception{
    		if(multipartFile == null) {
    			return null ;
    		}
    		if(multipartFile.getOriginalFilename().endsWith(EXCEL_XLS_SUFFIX)) {
    			return readXls(multipartFile.getInputStream());
    		}
    		if(multipartFile.getOriginalFilename().endsWith(EXCEL_XLSX_SUFFIX)) {
    			return readXlsx(multipartFile.getInputStream());
    		}
    		throw new RuntimeException("文件不对,必须是excel文件,后缀名以:"+EXCEL_XLS_SUFFIX + " 或者 "+ EXCEL_XLSX_SUFFIX);
    	}
    	
    	
    	/**
    	 * description: 读取03版excel
    	 * @param file
    	 * @return List<List<Object>>
    	 * @version v1.0
    	 * @author w
    	 * @date 2020年3月31日 下午3:38:44
    	 */
    	private static List<List<Object>> readXls(InputStream inputStream) throws Exception {
    		List<List<Object>> list = new ArrayList<>();
    		// 读取excel 
    		HSSFWorkbook workbook = new HSSFWorkbook(inputStream);
    		// 获取sheet 页数量
    		int sheets = workbook.getNumberOfSheets();
    		for(int num = 0 ; num < sheets ; num++ ) {
    			HSSFSheet sheet = workbook.getSheetAt(num);
    			if(null == sheet) {
    				continue ;
    			}
    			// sheet 页的总行数
    			int rows = sheet.getLastRowNum();
    			// startRow 开始读取的行数 --- 第二行开始读
    			for( int startRow = 1 ;startRow <= rows  ; startRow ++) {
    				HSSFRow row = sheet.getRow(startRow);
    				List<Object> rowList = new ArrayList<>();
    				if(null != row) {
    					// row 行中的 单元格总个数
    					short cells = row.getLastCellNum();
    					for(int x = 0 ; x <= cells ; x++) {
    						HSSFCell cell = row.getCell(x);
    						if(null == cell) {
    							rowList.add("");
    						}else {
    							rowList.add(getXlsValue(cell));
    						}
    					}
    					list.add(rowList);
    				}
    			}
    		}
    		return list;
    	}
    	
    	/**
    	 * description: 获取 03 版 excel数据 
    	 * @param cell
    	 * @return String
    	 * @version v1.0
    	 * @author w
    	 * @date 2020年3月31日 下午3:54:14
    	 */
    	private static String getXlsValue(HSSFCell cell) {
    		if ( cell.getCellType() == cell.CELL_TYPE_BOOLEAN) {  
                return String.valueOf(cell.getBooleanCellValue());  
            } else if (cell.getCellType() == cell.CELL_TYPE_NUMERIC) {  
                String cellValue = "";  
                if(HSSFDateUtil.isCellDateFormatted(cell)){                  
                    Date date = HSSFDateUtil.getJavaDate(cell.getNumericCellValue());  
                    cellValue = new SimpleDateFormat("yyyy/MM/dd").format(date);  
                }else{  
                    DecimalFormat df = new DecimalFormat("#.##");  
                    cellValue = df.format(cell.getNumericCellValue());  
                    String strArr = cellValue.substring(cellValue.lastIndexOf(POINT)+1,cellValue.length());  
                    if(strArr.equals("00")){  
                        cellValue = cellValue.substring(0, cellValue.lastIndexOf(POINT));  
                    }    
                }  
                return cellValue;  
            } else {  
    	       	// 其他类型的值,统一设置为 string 
    	       	// http://blog.csdn.net/ysughw/article/details/9288307 
            	cell.setCellType(Cell.CELL_TYPE_STRING);
               return String.valueOf(cell.getStringCellValue());  
            }  
    	}
    
    	/**
    	 * description: 读取07或以上版本的 excel 
    	 * @param file
    	 * @throws Exception
    	 * @return List<List<Object>>
    	 * @version v1.0
    	 * @author w
    	 * @date 2020年3月31日 下午4:01:25
    	 */
    	private static List<List<Object>> readXlsx(InputStream inputStream) throws Exception {
    		List<List<Object>> list = new ArrayList<>();
    		// 读取excel ,封装到 XSSFWorkbook 对象 
    		XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
    		int sheets = workbook.getNumberOfSheets();
    		for(int num = 0 ;num < sheets ; num++) {
    			XSSFSheet sheet = workbook.getSheetAt(num);
    			if(null == sheet) {
    				continue ;
    			}
    			// 获取sheet页的总行数
    			int rows = sheet.getLastRowNum();
    			for(int startRow = 1 ; startRow <= rows ; startRow++ ) {
    				// startRow 开始读取的行数, 从第二行开始读取
    				XSSFRow row = sheet.getRow(startRow);
    				List<Object> rowList = new ArrayList<>();
    				if(null != row) {
    					// 获取行总单元格个数
    					short cells = row.getLastCellNum();
    					for(int x = 0 ; x < cells ; x++) {
    						XSSFCell cell = row.getCell(x);
    						if(cell == null) {
    							rowList.add("");
    						}else {
    							rowList.add(getXlsxValue(cell));
    						}
    					}
    					list.add(rowList);
    				}
    			}
    		}
    		return list;
    	}
    
    	/**
    	 * description: 获取07或以上版本 excel 数据
    	 * @param cell
    	 * @return Object
    	 * @version v1.0
    	 * @author w
    	 * @date 2020年3月31日 下午4:09:03
    	 */
    	private static Object getXlsxValue(XSSFCell cell) {
    		if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) {
    			return String.valueOf(cell.getBooleanCellValue());
    		} else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
    			String cellValue = "";
    			if (DateUtil.isCellDateFormatted(cell)) {
    				Date date = DateUtil.getJavaDate(cell.getNumericCellValue());
    				cellValue = new SimpleDateFormat("yyyy/MM/dd").format(date);
    			} else {
    				DecimalFormat df = new DecimalFormat("#.##");
    				cellValue = df.format(cell.getNumericCellValue());
    				String strArr = cellValue.substring(cellValue.lastIndexOf(POINT) + 1, cellValue.length());
    				if (strArr.equals("00")) {
    					cellValue = cellValue.substring(0, cellValue.lastIndexOf(POINT));
    				}
    			}
    			return cellValue;
    		} else {
    			// 其他类型的值,统一设置为 string 
            	// http://blog.csdn.net/ysughw/article/details/9288307 
    			//cell.setCellType(Cell.CELL_TYPE_STRING);
    			return String.valueOf(cell.getStringCellValue());
    		}
    	}
    }

    2、测试,直接本地测试 :

    @Test
    public void test() {
        String path = "F:\\poi导出2.xlsx" ;
        File file = new File(path);
        try {
            List<List<Object>> importFile = ExcelImport.importFile(file);
            System.out.println(importFile);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

     

    3、查看控制中输出的数据和excel中的是否一致。

     

    三、总结

    1、本示例使用的是 poi 3.15版的,其他版本可能需要做部分调整。

    2、对于导入excel数据类型转换,不一定考虑到全部,请根据实际业务情况调整。

    3、web情况下导入,请自行创建页面测试,ExcelImport 类中已经提供对应的方法支持。

    4、需要源码请私聊我,谢谢。

     

     

    展开全文
  • 本地windows7系统导入正常,在部署到服务器window2003系统不能导入并有如下报错:   检索 COM 类工厂中CLSID {000209FF-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误:80070005。   ...

    本文参考:http://www.cnblogs.com/Sue_/articles/2123372.html

                        http://blog.csdn.net/ganmk/article/details/2297968


    本地windows7系统导入正常,在部署到服务器window2003系统上不能导入并有如下报错:

     

    检索 COM 类工厂中CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误:80070005。

     

    具体解决方法如下:

    1:在服务器上安装office的word软件.

    2:在"开始"->"运行"中输入dcomcnfg.exe启动"组件服务"

    3:依次双击"组件服务"->"计算机"->"我的电脑"->"DCOM配置"

    4:在"DCOM配置"中找到"Microsoftword文档",在它上面点击右键,然后点击"属性",弹出"Microsoft word文档属性"对话框

    5:点击"标识"标签,选择"交互式用户"

    6:点击"安全"标签,在"启动和激活权限"上点击"自定义",然后点击对应的"编辑"按钮,在弹出的"安全性"对话框中填加一个"NETWORK SERVICE"用户(点击“高级”按钮查找,不是手动输入),并给它赋予"本地启动"和"本地激活"权限.

    7:依然是"安全"标签,在"访问权限"上点击"自定义",然后点击"编辑",在弹出的"安全性"对话框中也填加一个"NETWORK SERVICE"用户(点击“高级”按钮查找,不是手动输入),然后赋予"本地访问"权限.

     

    按照上面的步骤做完之后可能还会报下面这样一个错:

    检索 COM 类工厂中CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误:8000401a。

     

    8.运行dcomcnfg打开组件服务,

    9.依次展开"组件服务"->"计算机"->"我的电脑"->"DCOM配置"

    10.找到"Microsoft Excel应用程序"或"MicrosoftWord应用程序",

    11.右键打开属性对话框,点击"标识"选项卡,

    12.点"下列用户",把管理员的用户密码正确填写进去...

    13.点击"安全"选项卡,

    14.依次把"启动和激活权限","访问权限","配置权限",都选择为自定义,

     


     

    如果上面这些步骤都做完之后还没有解决问题,就需要在config文件中<system.web>节点下添加如下一句话

    <identityimpersonate="true" userName="服务器登录名" password="服务器登录密码"/>

    服务器登录名和服务器登录密码要与上面第12步输入的用户名,密码相一致。

    展开全文
  • ElementUI导入Excel文件

    2021-01-21 20:38:59
    最近用ElementUI做管理系统需要把excel数据导入系统内,我想这是一个很常见的功能点,把它分享出来,希望对大家有所帮助:) 实现效果 实现步骤 1.定义导入组件 <el-upload :show-file-list="false" accept...

    功能介绍

    最近用ElementUI做管理系统需要把excel数据导入到系统内,我想这是一个很常见的功能点,把它分享出来,希望对大家有所帮助:)

    实现效果

    在这里插入图片描述

    实现步骤

    1.定义导入组件

    <el-upload
               :show-file-list="false"
               accept="application/vnd.ms-excel"
               action="http://localhost:9000/api/student/upload"
               :on-success="fileUploadSuccess"
               :on-error="fileUploadError"
               :disabled="fileUploadBtnText == '正在导入'"
               :before-upload="beforeFileUpload"
               style="display: inline; margin-left:10px;"
               >
        <el-button
                   type="success"
                   :icon="uploadBtnIcon"
                   :loading="fileUploadBtnText == '正在导入'"
                   ><i class="fa fa-lg fa-level-up"></i>{{ fileUploadBtnText }}
        </el-button>
    </el-upload>
    

    2.定义导入相关方法

    • 先是定义2个变量
      fileUploadBtnText: “导入数据”,

    uploadBtnIcon: “el-icon-upload2”,

    fileUploadSuccess() {
          this.enabledUploadBtn = true;
          this.uploadBtnIcon = "el-icon-upload2";
          this.fileUploadBtnText = "导入数据";
          this.$message.success("数据导入成功!");
          this.getStudentList();
        },
        fileUploadError() {
          this.enabledUploadBtn = true;
          this.uploadBtnIcon = "el-icon-upload2";
          this.fileUploadBtnText = "导入数据";
        },
        beforeFileUpload(file) {
          this.enabledUploadBtn = false;
          this.uploadBtnIcon = "el-icon-loading";
          this.fileUploadBtnText = "正在导入";
        },
    

    3.定义导入接口

    这里以springboot接口为准

    @RequestMapping("/upload")
    @ResponseBody
    public Result<String> uploadFile(MultipartFile file, HttpServletResponse response) {
        //解析excel文件
        List<ArrayList<String>> rows = ExcelUtil.analysis(file);
        List<Student> list = new ArrayList<>();
        if(rows.size()>0){
            //2.插入数据
            Student entity = null;
            int size=0;
            String gradeName; // 班级名称
            Integer gradeId;
            for (int i = 0;i<rows.size();i++){
                entity = new Student();
                List<String> row = rows.get(i);
                size = row.size();
    
                // 不足9个列的 补全
                for (int j = size; j < 9; j++) {
                    row.add("");
                }
    
                // 学号
                entity.setStudentNo(row.get(0));
                // 姓名
                entity.setStudentName(row.get(1));
                entity.setGender(row.get(2).equals("女")?"F":"M");
                entity.setIdno(row.get(3));
                entity.setPhone(row.get(4));
                entity.setAddress(row.get(5));
                gradeName = row.get(6);
                gradeId = getGradeIdByName(gradeName);
                if(gradeId == null){
                    continue;
                }
                entity.setGradeId(gradeId);
                entity.setEnrollDate(DateUtil.format(row.get(7),"yyyy-MM-dd"));
                entity.setRemark(row.get(8));
    
                list.add(entity);
            }
        }
    
        studentService.saveBatch(list);
    
        return ResultUtil.ok("导入成功!");
    }
    
    展开全文
  • java之poi操作excel-批量导入导出

    万次阅读 多人点赞 2016-10-23 16:52:05
    上一篇博文介绍了poi操作excel的基本读写操作后,接下来,介绍一下在项目中的实际用途:批量导入、批量导出功能。因为重点知识介绍批量导入导出excel功能,故而项目整体的搭建后台用jdbc与struts2,前端页面用jquery...

        上一篇博文介绍了poi操作excel的基本读写操作后,接下来,介绍一下在项目中的实际用途:批量导入、批量导出功能。因为重点知识介绍批量导入导出excel功能,故而项目整体的搭建后台用jdbc与struts2,前端页面用jquery-easyui实现(其实也可以整合到ssm或者ssh中,而这一点现在我已经实现了,即基于SSM的博客以及视频教程我已经发布在我最新的博客中,欢迎观看,其中,视频教程地址:https://edu.csdn.net/course/detail/8894  欢迎支持!!)。

        首先,看一下,项目的整体结构图:

           

     

         首先,当然是放入jar包啦,可以来这我这里下载:poi批量导入导出的jar包

         加入jquery-easyui-1.3.3,可以到easyui官网下载,配置web.xml:

     

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee"
    	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    	id="WebApp_ID" version="2.5">
    	<display-name>PoiDemo</display-name>
    	<welcome-file-list>
    		<welcome-file>index.htm</welcome-file>
    	</welcome-file-list>
    	<filter>
    		<filter-name>StrutsPrepareAndExecuteFilter</filter-name>
    		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
    		</filter-class>
    	</filter>
    	<filter-mapping>
    		<filter-name>StrutsPrepareAndExecuteFilter</filter-name>
    		<url-pattern>/*</url-pattern>
    	</filter-mapping>
    </web-app>


        src目录下建立各个包,具体我就不说了,看上面的图即可。新建struts.xml:

     

     

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
    
    <struts>
    	
    	<package name="userInfo" namespace="/" extends="struts-default">
    		<action name="user" class="com.steadyjack.action.UserAction">
    		</action>
    
    	</package>
         
    </struts>

        接下来,介绍com.steadyjack.util下的各个工具类,有一些比较简单,我就不详细说了,注释写得很清楚了!

     

        DateUtil.java:

     

    package com.steadyjack.util;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    /**
     * 简单日期处理工具
     * @author 钟林森
     *
     */
    public class DateUtil {
    
    	public static String formatDate(Date date,String format){
    		String result="";
    		SimpleDateFormat sdf=new SimpleDateFormat(format);
    		if(date!=null){
    			result=sdf.format(date);
    		}
    		return result;
    	}
    	
    	
    	public static Date formatString(String str,String format) throws Exception{
    		SimpleDateFormat sdf=new SimpleDateFormat(format);
    		return sdf.parse(str);
    	}
    	
    	public static void main(String[] args) throws Exception{
    		Date date=formatString("1993/10/12", "yyyy/MM/dd");
    		String str=formatDate(date, "yyyy-MM-dd");
    		System.out.println(str);
    	}
    }
    


        DbUtil.java:

     

     

    package com.steadyjack.util;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    
    /**
     * 数据库链接工具
     * @author 钟林森
     *
     */
    public class DbUtil {
    
    	private String dbUrl="jdbc:mysql://localhost:3306/db_poi";
    	private String dbUserName="root";
    	private String dbPassword="123456";
    	private String jdbcName="com.mysql.jdbc.Driver";
    	
    	public Connection getCon()throws Exception{
    		Class.forName(jdbcName);
    		Connection con=DriverManager.getConnection(dbUrl,dbUserName,dbPassword);
    		return con;
    	}
    	
    	public void closeCon(Connection con)throws Exception{
    		if(con!=null){
    			con.close();
    		}
    	}
    }
    


         excel导入导出工具类,这个很重要,ExcelUtil.java:

     

     

     

     

    package com.steadyjack.util;
    
    import java.io.InputStream;
    import java.sql.ResultSet;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFDateUtil;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.poifs.filesystem.POIFSFileSystem;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.ss.usermodel.Sheet;
    import org.apache.poi.ss.usermodel.Workbook;
    
    /**
     * Excel文件处理工具类: 包括填充数据到普通excel、模板excel文件,单元格格式处理
     * @author 钟林森
     *
     */
    public class ExcelUtil {
    
    	/**
    	 * 填充数据到普通的excel文件中
    	 * @param rs
    	 * @param wb
    	 * @param headers
    	 * @throws Exception
    	 */
    	public static void fillExcelData(ResultSet rs,Workbook wb,String[] headers)throws Exception{
    		Sheet sheet=wb.createSheet();
    		Row row=sheet.createRow(0);
    		
    		//先填充行头 : "编号","姓名","电话","Email","QQ","出生日期"
    		for(int i=0;i<headers.length;i++){
    			row.createCell(i).setCellValue(headers[i]);
    		}
    		
    		//再填充数据
    		int rowIndex=1;
    		while(rs.next()){
    			row=sheet.createRow(rowIndex++);
    			for(int i=0;i<headers.length;i++){
    				Object objVal=rs.getObject(i+1);
    				if (objVal instanceof Date) {
    					row.createCell(i).setCellValue(DateUtil.formatDate((Date)objVal,"yyyy-MM-dd"));
    				}else{
    					row.createCell(i).setCellValue(objVal.toString());
    				}
    			}
    		}
    	}
    	
    	/**
    	 * 填充数据到模板excel文件
    	 * @param rs
    	 * @param templateFileName
    	 * @return
    	 * @throws Exception
    	 */
    	public static Workbook fillExcelDataWithTemplate(ResultSet rs,String templateFileName)throws Exception{
    		//首先:从本地磁盘读取模板excel文件,然后读取第一个sheet
    		InputStream inp=ExcelUtil.class.getResourceAsStream("/com/steadyjack/template/"+templateFileName);
    		POIFSFileSystem fs=new POIFSFileSystem(inp);
    		Workbook wb=new HSSFWorkbook(fs);
    		Sheet sheet=wb.getSheetAt(0);
    		
    		//开始写入数据到模板中: 需要注意的是,因为行头以及设置好,故而需要跳过行头
    		int cellNums=sheet.getRow(0).getLastCellNum();
    		int rowIndex=1;
    		while(rs.next()){
    			Row row=sheet.createRow(rowIndex++);
    			for(int i=0;i<cellNums;i++){
    				Object objVal=rs.getObject(i+1);
    				if (objVal instanceof Date) {
    					row.createCell(i).setCellValue(DateUtil.formatDate((Date)objVal,"yyyy-MM-dd"));
    				}else{
    					row.createCell(i).setCellValue(objVal.toString());
    				}
    			}
    		}
    		return wb;
    	}
    	
    	/**
    	 * 处理单元格格式的简单方式
    	 * @param hssfCell
    	 * @return
    	 */
    	public static String formatCell(HSSFCell hssfCell){
    		if(hssfCell==null){
    			return "";
    		}else{
    			if(hssfCell.getCellType()==HSSFCell.CELL_TYPE_BOOLEAN){
    				return String.valueOf(hssfCell.getBooleanCellValue());
    			}else if(hssfCell.getCellType()==HSSFCell.CELL_TYPE_NUMERIC){
    				return String.valueOf(hssfCell.getNumericCellValue());
    			}else{
    				return String.valueOf(hssfCell.getStringCellValue());
    			}
    		}
    	}
    	
    	/**
    	 * 处理单元格格式的第二种方式: 包括如何对单元格内容是日期的处理
    	 * @param cell
    	 * @return
    	 */
    	public static String formatCell2(HSSFCell cell) {
    		if (cell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN) {
    			return String.valueOf(cell.getBooleanCellValue());
    		} else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
    			
    			//针对单元格式为日期格式
    			if (HSSFDateUtil.isCellDateFormatted(cell)) {
    				SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    				return sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue())).toString();
    			}
    			return String.valueOf(cell.getNumericCellValue());
    		} else {
    			return cell.getStringCellValue();
    		}
    	}
    
    	/**
    	 * 处理单元格格式的第三种方法:比较全面
    	 * @param cell
    	 * @return
    	 */
    	public static String formatCell3(HSSFCell cell) {
    		if (cell == null) {
    			return "";
    		}
    		switch (cell.getCellType()) {
    		case HSSFCell.CELL_TYPE_NUMERIC:
    
    			//日期格式的处理
    			if (HSSFDateUtil.isCellDateFormatted(cell)) {
    				SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    				return sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue())).toString();
    			}
    
    			return String.valueOf(cell.getNumericCellValue());
    
    			//字符串
    		case HSSFCell.CELL_TYPE_STRING:
    			return cell.getStringCellValue();
    
    			// 公式
    		case HSSFCell.CELL_TYPE_FORMULA:
    			return cell.getCellFormula();
    
    			// 空白
    		case HSSFCell.CELL_TYPE_BLANK:
    			return "";
    
    			// 布尔取值
    		case HSSFCell.CELL_TYPE_BOOLEAN:
    			return cell.getBooleanCellValue() + "";
    			
    			//错误类型
    		case HSSFCell.CELL_TYPE_ERROR:
    			return cell.getErrorCellValue() + "";
    		}
    
    		return "";
    	}
    }
    


        将jdbc查询得到的ResultSet转为JsonArray工具类JsonUtil.java:

     

     

    package com.steadyjack.util;
    
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.util.Date;
    
    import net.sf.json.JSONArray;
    import net.sf.json.JSONObject;
    
    /**
     * jdbc 的结果集ResultSet转化为JsonArray工具 
     * @author 钟林森
     *
     */
    public class JsonUtil {
    
    	/**
    	 * 把ResultSet集合转换成JsonArray数组
    	 * @param rs
    	 * @return
    	 * @throws Exception
    	 */
    	public static JSONArray formatRsToJsonArray(ResultSet rs)throws Exception{
    		ResultSetMetaData md=rs.getMetaData();
    		int num=md.getColumnCount();
    		JSONArray array=new JSONArray();
    		while(rs.next()){
    			JSONObject mapOfColValues=new JSONObject();
    			for(int i=1;i<=num;i++){
    				
    				Object strVal=rs.getObject(i);
    				if (strVal instanceof Date) {
    					mapOfColValues.put(md.getColumnName(i),DateUtil.formatDate((Date)strVal,"yyyy-MM-dd"));
    				}else{
    					mapOfColValues.put(md.getColumnName(i),strVal);
    				}
    			}
    			array.add(mapOfColValues);
    		}
    		return array;
    	}
    }
    


         ResponseUtil.java:

     

     

    package com.steadyjack.util;
    
    import java.io.OutputStream;
    import java.io.PrintWriter;
    
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.poi.ss.usermodel.Workbook;
    
    /**
     * 将数据写回页面 jquery-ajax交互工具类
     * @author 钟林森
     *
     */
    public class ResponseUtil {
    
    	/**
    	 * 将数据写回页面 用于jquery-ajax的异步交互
    	 * @param response
    	 * @param o
    	 * @throws Exception
    	 */
    	public static void write(HttpServletResponse response,Object o)throws Exception{
    		response.setContentType("text/html;charset=utf-8");
    		PrintWriter out=response.getWriter();
    		out.print(o.toString());
    		out.flush();
    		out.close();
    	}
    	
    	/**
    	 * 将excel文件写回客户端浏览器 用于下载
    	 * @param response
    	 * @param wb
    	 * @param fileName
    	 * @throws Exception
    	 */
    	public static void export(HttpServletResponse response,Workbook wb,String fileName)throws Exception{
    		response.setHeader("Content-Disposition", "attachment;filename="+new String(fileName.getBytes("utf-8"),"iso8859-1"));
    		response.setContentType("application/ynd.ms-excel;charset=UTF-8");
    		OutputStream out=response.getOutputStream();
    		wb.write(out);
    		out.flush();
    		out.close();
    	}
    
    }
    


        StringUtil.java:

     

     

    package com.steadyjack.util;
    
    /**
     * 简单字符串处理工具
     * @author 钟林森
     *
     */
    public class StringUtil {
    
    	public static boolean isEmpty(String str){
    		if("".equals(str)||str==null){
    			return true;
    		}else{
    			return false;
    		}
    	}
    	
    	public static boolean isNotEmpty(String str){
    		if(!"".equals(str)&&str!=null){
    			return true;
    		}else{
    			return false;
    		}
    	}
    }
    


         接下来,是com.steadyjack.model中的User与PageBean:

     

     

    package com.steadyjack.model;
    
    import java.util.Date;
    
    public class User {
    
    	private int id;
    	private String name;
    	private String phone;
    	private String email;
    	private String qq;
    	
    	private Date birth;
    	
    	public User() {
    	}
    	
    	public User(String name, String phone, String email, String qq) {
    		this.name = name;
    		this.phone = phone;
    		this.email = email;
    		this.qq = qq;
    	}
    	
    	public User(String name, String phone, String email, String qq, Date birth) {
    		super();
    		this.name = name;
    		this.phone = phone;
    		this.email = email;
    		this.qq = qq;
    		this.birth = birth;
    	}
    
    	public int getId() {
    		return id;
    	}
    	public void setId(int id) {
    		this.id = id;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public String getEmail() {
    		return email;
    	}
    	public void setEmail(String email) {
    		this.email = email;
    	}
    	public String getQq() {
    		return qq;
    	}
    	public void setQq(String qq) {
    		this.qq = qq;
    	}
    	public String getPhone() {
    		return phone;
    	}
    	public void setPhone(String phone) {
    		this.phone = phone;
    	}
    
    	public Date getBirth() {
    		return birth;
    	}
    
    	public void setBirth(Date birth) {
    		this.birth = birth;
    	}
    	
    }
    

     

    package com.steadyjack.model;
    
    public class PageBean {
    
    	private int page; // 第几页
    	private int rows; // 每页的记录数
    	private int start; // 起始页
    	
    	public PageBean(int page, int rows) {
    		super();
    		this.page = page;
    		this.rows = rows;
    	}
    	public int getPage() {
    		return page;
    	}
    	public void setPage(int page) {
    		this.page = page;
    	}
    	public int getRows() {
    		return rows;
    	}
    	public void setRows(int rows) {
    		this.rows = rows;
    	}
    	
    	public int getStart() {
    		return (page-1)*rows;
    	}
    }
    


         接下来是UserDao(其实,也开发了增删改查的功能,但在这里就不贴出来了,有意者可以加上面的qq联系)

     

     

    package com.steadyjack.dao;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    
    import com.steadyjack.model.PageBean;
    import com.steadyjack.model.User;
    
    public class UserDao {
    
    	public ResultSet userList(Connection con,PageBean pageBean)throws Exception{
    		StringBuffer sb=new StringBuffer("select * from t_user");
    		if(pageBean!=null){
    			sb.append(" limit ?,?");			
    		}
    		PreparedStatement pstmt=con.prepareStatement(sb.toString());
    		if(pageBean!=null){
    			pstmt.setInt(1, pageBean.getStart());
    			pstmt.setInt(2, pageBean.getRows());
    		}
    		return pstmt.executeQuery();
    	}
    	
    	public int userCount(Connection con)throws Exception{
    		String sql="select count(*) as total from t_user";
    		PreparedStatement pstmt=con.prepareStatement(sql);
    		ResultSet rs=pstmt.executeQuery();
    		if(rs.next()){
    			return rs.getInt("total");
    		}else{
    			return 0;
    		}
    	}
    	
    	
    	
    	public int userAdd(Connection con,User user)throws Exception{
    		String sql="insert into t_user values(null,?,?,?,?,?)";
    		PreparedStatement pstmt=con.prepareStatement(sql);
    		pstmt.setString(1, user.getName());
    		pstmt.setString(2, user.getPhone());
    		pstmt.setString(3, user.getEmail());
    		pstmt.setString(4, user.getQq());
    		
    		//java.util.date转为 java.sql.date
    		pstmt.setDate(5, new java.sql.Date(user.getBirth() .getTime()));
    		
    		return pstmt.executeUpdate();
    	}
    }
    


         然后注意com.steadyjack.template下有个 “用户模板文件.xls”,这个可以自己制作:

     

     

        最后是重头戏了UserAction.java:

     

    package com.steadyjack.action;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.sql.Connection;
    import java.sql.ResultSet;
    
    import net.sf.json.JSONArray;
    import net.sf.json.JSONObject;
    
    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 org.apache.poi.ss.usermodel.Workbook;
    import org.apache.struts2.ServletActionContext;
    
    import com.opensymphony.xwork2.ActionSupport;
    import com.steadyjack.dao.UserDao;
    import com.steadyjack.model.PageBean;
    import com.steadyjack.model.User;
    import com.steadyjack.util.DateUtil;
    import com.steadyjack.util.DbUtil;
    import com.steadyjack.util.ExcelUtil;
    import com.steadyjack.util.JsonUtil;
    import com.steadyjack.util.ResponseUtil;
    import com.steadyjack.util.StringUtil;
    
    public class UserAction extends ActionSupport {
    
    	/**
    	 * 
    	 */
    	private static final long serialVersionUID = 1L;
    
    	private String page;
    	private String rows;
    	private String id;
    	private User user;
    	private String delId;
    	
    	private File userUploadFile;
    	
    	public String getPage() {
    		return page;
    	}
    	public void setPage(String page) {
    		this.page = page;
    	}
    	public String getRows() {
    		return rows;
    	}
    	public void setRows(String rows) {
    		this.rows = rows;
    	}
    	
    	public String getDelId() {
    		return delId;
    	}
    	public void setDelId(String delId) {
    		this.delId = delId;
    	}
    	public User getUser() {
    		return user;
    	}
    	public void setUser(User user) {
    		this.user = user;
    	}
    	
    	
    	public String getId() {
    		return id;
    	}
    	public void setId(String id) {
    		this.id = id;
    	}
    
    	public File getUserUploadFile() {
    		return userUploadFile;
    	}
    	public void setUserUploadFile(File userUploadFile) {
    		this.userUploadFile = userUploadFile;
    	}
    
    	DbUtil dbUtil=new DbUtil();
    	UserDao userDao=new UserDao();
    	
    	//获取用户列表
    	public String list()throws Exception{
    		Connection con=null;
    		PageBean pageBean=new PageBean(Integer.parseInt(page),Integer.parseInt(rows));
    		try{
    			con=dbUtil.getCon();
    			JSONObject result=new JSONObject();
    			JSONArray jsonArray=JsonUtil.formatRsToJsonArray(userDao.userList(con, pageBean));
    			int total=userDao.userCount(con);
    			result.put("rows", jsonArray);
    			result.put("total", total);
    			ResponseUtil.write(ServletActionContext.getResponse(),result);
    		}catch(Exception e){
    			e.printStackTrace();
    		}finally{
    			try {
    				dbUtil.closeCon(con);
    			} catch (Exception e) {
    				e.printStackTrace();
    			}
    		}
    		return null;
    	}
    	
    	//导出用户  : 普通excel导出
    	public String export()throws Exception{
    		Connection con=null;
    		try {
    			con=dbUtil.getCon();
    			Workbook wb=new HSSFWorkbook();
    			String headers[]={"编号","姓名","电话","Email","QQ","出生日期"};
    			ResultSet rs=userDao.userList(con, null);
    			ExcelUtil.fillExcelData(rs, wb, headers);
    			ResponseUtil.export(ServletActionContext.getResponse(), wb, "用户excel表.xls");
    		} catch (Exception e) {
    			e.printStackTrace();
    		}finally{
    			try {
    				dbUtil.closeCon(con);
    			} catch (Exception e) {
    				e.printStackTrace();
    			}
    		}
    		return null;
    	}
    	
    	//用户导出 : 采用预先设置好的excel模板文件进行导出
    	public String export2()throws Exception{
    		Connection con=null;
    		try {
    			con=dbUtil.getCon();
    			ResultSet rs=userDao.userList(con, null);
    			Workbook wb=ExcelUtil.fillExcelDataWithTemplate(rs, "用户模板文件.xls");
    			ResponseUtil.export(ServletActionContext.getResponse(), wb, "利用模版导出用户excel表.xls");
    		} catch (Exception e) {
    			e.printStackTrace();
    		}finally{
    			try {
    				dbUtil.closeCon(con);
    			} catch (Exception e) {
    				e.printStackTrace();
    			}
    		}
    		return null;
    	}
    	
    
    	//excel文件导入,批量导入数据
    	public String upload()throws Exception{
    		//此时的Workbook应该是从 客户端浏览器上传过来的 uploadFile了,其实跟读取本地磁盘的一个样
    		POIFSFileSystem fs=new POIFSFileSystem(new FileInputStream(userUploadFile));
    		HSSFWorkbook wb=new HSSFWorkbook(fs);
    		HSSFSheet hssfSheet=wb.getSheetAt(0);
    		
    		if(hssfSheet!=null){
    			//遍历excel,从第二行开始 即 rowNum=1,逐个获取单元格的内容,然后进行格式处理,最后插入数据库
    			for(int rowNum=1;rowNum<=hssfSheet.getLastRowNum();rowNum++){
    				HSSFRow hssfRow=hssfSheet.getRow(rowNum);
    				if(hssfRow==null){
    					continue;
    				}
    				
    				User user=new User();
    				user.setName(ExcelUtil.formatCell(hssfRow.getCell(0)));
    				user.setPhone(ExcelUtil.formatCell(hssfRow.getCell(1)));
    				user.setEmail(ExcelUtil.formatCell(hssfRow.getCell(2)));
    				user.setQq(ExcelUtil.formatCell(hssfRow.getCell(3)));
    				
    				//对于单元格日期需要进行特殊处理
    				user.setBirth(DateUtil.formatString(ExcelUtil.formatCell2(hssfRow.getCell(4)), "yyyy-MM-dd"));
    				Connection con=null;
    				try{
    					con=dbUtil.getCon();
    					userDao.userAdd(con, user);
    				}catch(Exception e){
    					e.printStackTrace();
    				}finally{
    					dbUtil.closeCon(con);
    				}
    			}
    		}
    		JSONObject result=new JSONObject();
    		result.put("success", "true");
    		ResponseUtil.write(ServletActionContext.getResponse(), result);
    		return null;
    	}
    	
    }
    


         最后有一个WebContent目录下template文件夹有个userTemplateFile.xls,跟“用户模板文件.xls”是一模一样的,只是换个名字而已。

     

         最后当然是页面了crud1.html:

     

    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<title>poi操作excel</title>
    	<link rel="stylesheet" type="text/css" href="jquery-easyui-1.3.3/themes/default/easyui.css">
    	<link rel="stylesheet" type="text/css" href="jquery-easyui-1.3.3/themes/icon.css">
    	<script type="text/javascript" src="jquery-easyui-1.3.3/jquery.min.js"></script>
    	<script type="text/javascript" src="jquery-easyui-1.3.3/jquery.easyui.min.js"></script>
    	<script type="text/javascript" src="jquery-easyui-1.3.3/locale/easyui-lang-zh_CN.js"></script>
    	<script>
    		var url;
    		function deleteUser(){
    			var row=$('#dg').datagrid('getSelected');
    			if(row){
    				$.messager.confirm("系统提示","您确定要删除这条记录吗?",function(r){
    					if(r){
    						$.post('user!delete',{delId:row.id},function(result){
    							if(result.success){
    								$.messager.alert("系统提示","已成功删除这条记录!");
    								$("#dg").datagrid("reload");
    							}else{
    								$.messager.alert("系统提示",result.errorMsg);
    							}
    						},'json');
    					}
    				});
    			}
    		}
    		
    		function newUser(){
    			$("#dlg").dialog('open').dialog('setTitle','添加用户');
    			$('#fm').form('clear');
    			url='user!save';
    		}
    		
    		
    		function editUser(){
    			var row=$('#dg').datagrid('getSelected');
    			if(row){
    				$("#dlg").dialog('open').dialog('setTitle','编辑用户');
    				$("#name").val(row.name);
    				$("#phone").val(row.phone);
    				$("#email").val(row.email);
    				$("#qq").val(row.qq);
    				url='user!save?id='+row.id;
    			}
    		}
    		
    		
    		function saveUser(){
    			$('#fm').form('submit',{
    				url:url,
    				onSubmit:function(){
    					return $(this).form('validate');
    				},
    				success:function(result){
    					var result=eval('('+result+')');
    					if(result.errorMsg){
    						$.messager.alert("系统提示",result.errorMsg);
    						return;
    					}else{
    						$.messager.alert("系统提示","保存成功");
    						$('#dlg').dialog('close');
    						$("#dg").datagrid("reload");
    					}
    				}
    			});
    		}
    		
    		
    		function exportUser(){
    			window.open('user!export');
    		}
    	
    		function exportUser2(){
    			window.open('user!export2');
    		}
    		
    		function openUploadFileDialog(){
    			$("#dlg2").dialog('open').dialog('setTitle','批量导入数据');
    		}
    		
    		function downloadTemplate(){
    			window.open('template/userTemplateFile.xls');
    		}
    		
    		function uploadFile(){
    			$("#uploadForm").form("submit",{
    				success:function(result){
    					var result=eval('('+result+')');
    					if(result.errorMsg){
    						$.messager.alert("系统提示",result.errorMsg);
    					}else{
    						$.messager.alert("系统提示","上传成功");
    						$("#dlg2").dialog("close");
    						$("#dg").datagrid("reload");
    					}
    				}
    			});
    		}
    		
    	</script>
    </head>
    <body>
    	<table id="dg" title="用户管理" class="easyui-datagrid" style="width:700px;height:365px"
                url="user!list"
                toolbar="#toolbar" pagination="true"
                rownumbers="true" fitColumns="true" singleSelect="true">
            <thead>
                <tr>
                	<th field="id" width="50" hidden="true">编号</th>
                    <th field="name" width="50">姓名</th>
                    <th field="phone" width="50">电话</th>
                    <th field="email" width="50">Email</th>
                    <th field="qq" width="50">QQ</th>
                    <th field="birth" width="50">出生日期</th>
                </tr>
            </thead>
        </table>
        <div id="toolbar">
            <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-add" plain="true" onclick="newUser()">添加用户</a>
            <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-edit" plain="true" onclick="editUser()">编辑用户</a>
            <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-remove" plain="true" onclick="deleteUser()">删除用户</a>
            <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-export" plain="true" onclick="exportUser()">导出用户</a>
            <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-export" plain="true" onclick="exportUser2()">用模版导出用户</a>
            <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-import" plain="true" onclick="openUploadFileDialog()">用模版批量导入数据</a>
        </div>
    	
    	<div id="dlg" class="easyui-dialog" style="width:400px;height:250px;padding:10px 20px"
                closed="true" buttons="#dlg-buttons">
            <form id="fm"  method="post">
            	<table cellspacing="10px;">
            		<tr>
            			<td>姓名:</td>
            			<td><input id="name"  name="user.name" class="easyui-validatebox" required="true" style="width: 200px;"></td>
            		</tr>
            		<tr>
            			<td>联系电话:</td>
            			<td><input id="phone"  name="user.phone" class="easyui-validatebox" required="true" style="width: 200px;"></td>
            		</tr>
            		<tr>
            			<td>Email:</td>
            			<td><input id="email"  name="user.email" class="easyui-validatebox" validType="email" required="true" style="width: 200px;"></td>
            		</tr>
            		<tr>
            			<td>QQ:</td>
            			<td><input id="qq" name="user.qq" class="easyui-validatebox" required="true" style="width: 200px;"></td>
            		</tr>
            		<tr>
            			<td>出生日期:</td>
            			<td><input id="birth" name="user.birth" class="easyui-validatebox" required="true" style="width: 200px;"></td>
            		</tr>
            	</table>
            </form>
    	</div>
        
    	<div id="dlg-buttons">
    		<a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-ok" onclick="saveUser()">保存</a>
    		<a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-cancel" onclick="javascript:$('#dlg').dialog('close')">关闭</a>
    	</div>
    	
    	
    	<div id="dlg2" class="easyui-dialog" style="width:400px;height:180px;padding:10px 20px"
                closed="true" buttons="#dlg-buttons2">
            <form id="uploadForm" action="user!upload" method="post" enctype="multipart/form-data">
            	<table>
            		<tr>
            			<td>下载模版:</td>
            			<td><a href="javascript:void(0)" class="easyui-linkbutton"  onclick="downloadTemplate()">下载模板文件</a></td>
            		</tr>
            		<tr>
            			<td>上传文件:</td>
            			<td><input type="file" name="userUploadFile"></td>
            		</tr>
            	</table>
            </form>
    	</div>
        
    	<div id="dlg-buttons2">
    		<a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-ok" onclick="uploadFile()">上传</a>
    		<a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-cancel" onclick="javascript:$('#dlg2').dialog('close')">关闭</a>
    	</div>
    	
    </body>
    </html>
    


        其中,添加、删除、修改的功能已经实现了,但代码我就不贴出来了,因为我重点是介绍批量导入导出excel。

     

        当然啦,需要新建一个数据库db_poi,新建一个数据库表t_user:

     

    DROP TABLE IF EXISTS `t_user`;
    CREATE TABLE `t_user` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(20) DEFAULT NULL,
      `phone` varchar(20) DEFAULT NULL,
      `email` varchar(20) DEFAULT NULL,
      `qq` varchar(20) DEFAULT NULL,
      `birth` datetime DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=65 DEFAULT CHARSET=utf8;
    
    
    INSERT INTO `t_user` VALUES ('51', '钟林森', '12121212', 'linsenzhong@126.com', '121212121212122', '2016-10-11 22:36:57');
    INSERT INTO `t_user` VALUES ('54', 'steadyjack', '11111', '1111@126.com', '1111122222121212', '2016-10-28 22:37:06');
    INSERT INTO `t_user` VALUES ('55', '钟林森', '22222', '2222@126.com', '2222211111121212', '2016-10-20 22:37:09');
    INSERT INTO `t_user` VALUES ('56', '钟稳杰', '33333', '3333@126.com', '3333322222121212', '2016-10-13 22:37:12');
    


        在tomcat跑起来,下面是运行效果:

     

     

        点击“导出用户”,即可下载得到“用户excel表.xls”,打开来瞧瞧,是否跟上图的数据一致:

     

        发现一致是一致,但是就是丑陋了点。接下来,我们“用模板导出用户”,可以得到比较好看的数据:

     

         最后,点击“用模板批量导入数据”:

     

        可以先下载模板文件,填写好数据之后,再回来这里“选择文件”,上传填写好数据的那个excel文件,下面是我弄好的几条数据:

     

        最后,上传这个文件,导入进去,再回来首页看看:

     

       

        关于导入,目前还没有去深入搞:“判断一些是否合法,如何将不合法的数据再导入完成之后提示或者展示给用户观看。。。”这些,自己也在搞中,有兴趣的,可以加qq交流!个人QQ:1948831260

    展开全文
  • java实现excel表格导入数据库表

    万次阅读 多人点赞 2018-11-07 15:07:14
    导入excel就是一个上传excel文件,然后获取excel文件数据,然后处理数据并插入到数据库的过程 一、上传excel 前端jsp页面,我的是index.jsp 在页面中我自己加入了一个下载上传文件的功能,其中超链接就是下载 ...
  • 接到一个需求,要将用户从一个系统导出...这个首先想到遍历用户给的excel列名称对比系统要求的excel模板所要具有的列(某些列数据可以空但不能缺少系统模板要求的列)。  这里操作excel的框架是POI3.12版本看代...
  • EasyExcel实现Excel文件的导入导出

    千次阅读 2020-09-25 00:59:42
    在我们日常的开发过程中经常会使用Excel文件的形式来批量地上传下载系统数据,我们最常用的工具是Apache poi,但是如果数据到底上百万时,将会造成内存溢出的问题,那么我们怎么去实现百万数据批量导入导出。...
  • 用C#代码写一个数据库导入系统,只是将excel表导入到SQL2008数据库中, 我用的是offices 2010 前台是一个fileupload控件,一个button控件,选择excel文件,点击button按钮,直接把excel表中的内容导入到SQL数据库...
  • Excel、csv导入到Hive中。 数据导入
  • 碰到问题:使用plsql通过odbc导入excel数据时发生了一个错误,如下图所示 错误提示:驱动程序和应用程序之间的体系结构匹配。 问题分析:系统是win10 64位、excel驱动默认也是64位,但plsql是32位。所以解决办法...
  • 朋友让我帮忙,希望解决用友财务软件导出Excel文件与防伪税控开票系统之间的文件转换和导入。简单地用Excel宏实现了一下,使用方法很简单。 1、打开Excel,注意要启用宏! 2、将用友Excel数据复制到本...
  • 导入EXCEL 时间数据小数 问题

    千次阅读 2017-04-07 20:36:22
    同事在做将EXCEL导入数据库功能时发现一个奇怪的问题:在EXCEL中,有一列数据明明呈现出时间格式,比如:18:35,但导到数据库中,居然一串长长的小数:0.7743055555555556,我靠,这是什么鬼。后来发现,原来EXCEL...
  • Excel数据批量导入到数据库

    千次阅读 2019-09-30 14:51:51
    我们今天就给大家介绍一个用途非常广泛的功能:批量导入,在很多系统中,这也是必须实现的功能。而且当Excel表结构越复杂时,实现的难度就越高。 不管项目如何复杂,原理却基本相同,一般是前台页面选择Excel文件,...
  • 本篇文章给大家带来的内容是关于js如何来导出以及导入excel?js导入导出excel的方法(纯代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 js-xlsx 介绍 由SheetJS出品的js-xlsx是一款非常...
  • BS-Excel模板批量导入

    千次阅读 热门讨论 2016-12-18 10:34:19
    批量导入应该是每款MIS系统必备的功能,这样可以减少很多重复性的工作,今天分享一下如何用数据库自带的BulkInsert进行批量导入(方法有很多,这算比较简便的一种),下面便从前台到后台走一遍: 第一步:有个批量...
  • EXCEL数据导入TIPTOP ERP 系统

    千次阅读 2012-10-08 14:35:43
    测试系统TIPTOP GP 3.0 主要用到DDE API 函数 描述 DDEConnect This function opens a DDE connection DDEExecute This function executes a command in the specified program ...
  • Flask学习-设备管理系统3:从excel导入设备信息 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境 主机:win10 python版本:python3.4 开发环境:PyCharm5.0.2 说明生产部有需求,从excel表格...
  • 用C#将一个EXCEL导入到DATASET中(使用Microsoft.Jet.OleDb.4.0),但是读出来的时候发现有些数据没有导入,不同的EXCEL情况也一样,有的EXCEL是纯数字没有导入进去,有的是纯字符没有导入进去,有的整个列都没...
  • 我们经常有通过文件导入数据的需求,比如批量导入会员、导入配置、导入其他系统的数据。 通过Excel方式导入会比较麻烦,要导入类库,可以考虑把Excel转成CSV文件。 Excel-&gt;另存-&gt;文件类型 CSV UTF...
  • WMS系统开发总结-导入EXCEL数据

    千次阅读 2017-06-26 00:21:31
    库房系统,同ERP同步数据是常见的事情,大部分时候是通过EXCEL导入数据,导入的数据可能有商品资料、库位、往来单位、部门、地点、库区等,这些信息导入的字段有多有少,可以定义一个类,里面类属性名是bak1,bak...
  • 本文章是从浏览器端,选择Excel文件,上传到服务器,保存一个excel 文件,然后将服务器上的Excel文件导入进数据库。
  • 本内容来自: Vue+Element前端导入导出Excel
  • Excel导入DataTable

    千次阅读 2011-07-27 15:55:42
    很多时候,我们需要操作Excel中的数据。而要操作Excel中的数据,首先要解决的问题就是把Excel中的数据导入到程序的... 这里介绍一种常用的Excel导入DataTable的方法。Excel其实也是一种数据库,既然是数据库,就可以
  • EXCEL任意格式文件导入
  • php的excel数据批量导入

    千次阅读 2016-04-03 15:43:54
    数据导入必须按照指定的格式系统识别,因此可两个大的步骤:一.导入模板下载 二.数据导入 一.模板下载 (创建export.php文件,存放模板代码) 1.下载导入PHPExcel库 点击连接,进入下载界面. 下载完毕,解压并记下...
  • 项目里需要导入了,正好 3.1 版本,也支持导入了,补充下 excel 导入的翻译文档。(工作比较忙,大概过了一遍,可能有不少错误的地方) 1.5分钟快速入门 在 app/Import 创建一个导入类 ...
  • 用函数ALSM_EXCEL_TO_INTERNAL_TABLE或者TEXT_CONVERT_XLS_TO_SAP将EXCEL数据转换成内表数据,再用BDC批导或者BAPI导入系统,生成业务数据。
  • 2.2、HTTPRequest 读取Excel InputStream方式导入读取Excel文件内容 2.2、导出数据内容到Excel之中 2.3、如果导入文件需要读取多个表并且有关联关系实现 3、成果展现 4、总结 5、参考文章 1、使用场景 目前...
  • java实现Excel数据导入到数据库

    千次下载 热门讨论 2014-05-31 23:59:34
    java实现Excel数据导入到数据库,如果数据库中存在就更新。 数据库数据导入Excel表中。
  • Excel批量导入数据库

    千次阅读 多人点赞 2011-09-05 08:30:31
    在上个系统中需要用到Excel整体导入的功能整体的核心思路如下: 1、 首先将需要导入Excel上传至服务器 2、 为了避免文件名重复,重命名上传的Excel文件 3、 将上传的Excel文件读入DataTable中 4、 将...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 42,779
精华内容 17,111
关键字:

为什么excel不能导入系统