springmvc excel表格数据导入数据库怎么做

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springmvc excel表格数据导入数据库怎么做相关的知识,希望对你有一定的参考价值。

一) 其实这个功能在spring2.x时代就提供了。一直没用过,今天在spring-mvc3.2.x的环境下试验了一次。还算简单易用。
二) 依赖。
spring依赖POI或jExcel来实现对excel输出的支持,前者是apache出品,貌似名气更大,本例使用第一个。

<dependency>  

    <groupId>org.apache.poi</groupId>  

    <artifactId>poi</artifactId>  

    <version>3.7</version>  

</dependency>  

三) spring提供了一个AbstractExcelView作为自己实现的视图的父类。实例代码如下。

package ying.car.view;  

  

import java.text.DateFormat;  

import java.text.SimpleDateFormat;  

import java.util.List;  

import java.util.Map;  

  

import javax.servlet.http.HttpServletRequest;  

import javax.servlet.http.HttpServletResponse;  

  

import org.apache.poi.hssf.usermodel.HSSFDataFormat;  

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.CellStyle;  

import org.apache.poi.ss.usermodel.IndexedColors;  

import org.joda.time.DateTime;  

import org.slf4j.Logger;  

import org.slf4j.LoggerFactory;  

import org.springframework.web.servlet.view.document.AbstractExcelView;  

  

import ying.car.binding.DateRange;  

import ying.car.domain.RefuelingRecord;  

  

public class RefuelingRecordExcelView extends AbstractExcelView   

  

    private static final Logger LOGGER = LoggerFactory.getLogger(RefuelingRecordExcelView.class);  

    private static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyyMMdd");  

      

    @Override  

    @SuppressWarnings("unchecked")  

    protected void buildExcelDocument(  

            Map<String, Object> model,        // MVC中的M就在这里了  

            HSSFWorkbook workbook,  

            HttpServletRequest request,  

            HttpServletResponse response) throws Exception  

      

     ("yyyy/MM/dd"));  

                LOGGER.debug("end: ", new DateTime(dr.getEnd()).toString("yyyy/MM/dd"));  

              

          

  

        HSSFSheet sheet = workbook.createSheet(DATE_FORMAT.format(dr.getStart()) + "-" + DATE_FORMAT.format(dr.getEnd()));  

  

        setColumnsWidth(sheet);  

        fillTableHeader(workbook, sheet);  

        fillTableBody(workbook, sheet, rrl);  

      

      

    private void setColumnsWidth(HSSFSheet sheet)   

        final int[] warr = new int[]   

            500,  // <空>  

            4500, // 日期  

            4500, // 车辆  

            4500, // 燃油种类  

            4500, // 燃油单价  

            4500, // 加油方式  

            4500, // 加油量  

            3000, // 花费  

            12000  // 备注  

        ;  

        for (int i = 0; i < warr.length; i ++)   

            sheet.setColumnWidth(i, warr[i]);  

          

      

  

    // 填充表格头  

    private void fillTableHeader(HSSFWorkbook workbook, HSSFSheet sheet)   

        final String[] contents = new String[]   

            "日期",  

            "车辆",  

            "燃油种类",  

            "燃油单价(元/升)",  

            "加油方式",  

            "加油量(升)",  

            "花费(元)",  

            "备注"  

        ;  

          

        int r = 1;  

        int c = 1;  

          

        CellStyle style = workbook.createCellStyle();  

        style.setFillForegroundColor(IndexedColors.YELLOW.getIndex());      // 填充黄色  

        style.setFillPattern(CellStyle.SOLID_FOREGROUND);           // 填充方式  

          

        // 设置border  

        style.setBorderLeft(CellStyle.BORDER_THIN);  

        style.setBorderRight(CellStyle.BORDER_THIN);  

        style.setBorderTop(CellStyle.BORDER_THIN);  

        style.setBorderBottom(CellStyle.BORDER_THIN);  

  

        for (int i = 0; i < contents.length; i ++)   

            Cell cell = getCell(sheet, r, c + i);  

            cell.setCellValue(contents[i]);  

            cell.setCellStyle(style);  

          

      

      

    private void fillTableBody(HSSFWorkbook workbook, HSSFSheet sheet, List<RefuelingRecord> records)   

        // 通用style  

        CellStyle style = workbook.createCellStyle();  

        style.setFillForegroundColor(IndexedColors.WHITE.getIndex());       // 填充白色  

        style.setFillPattern(CellStyle.SOLID_FOREGROUND);                   // 填充方式  

        style.setBorderLeft(CellStyle.BORDER_THIN);  

        style.setBorderRight(CellStyle.BORDER_THIN);  

        style.setBorderTop(CellStyle.BORDER_THIN);  

        style.setBorderBottom(CellStyle.BORDER_THIN);  

          

        // 日期style  

        CellStyle dateStyle = workbook.createCellStyle();  

        dateStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());       // 填充白色  

        dateStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);                   // 填充方式  

        dateStyle.setBorderLeft(CellStyle.BORDER_THIN);  

        dateStyle.setBorderRight(CellStyle.BORDER_THIN);  

        dateStyle.setBorderTop(CellStyle.BORDER_THIN);  

        dateStyle.setBorderBottom(CellStyle.BORDER_THIN);  

        dateStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy"));  

          

        int r = 2;  

        int c = 1;  

        Cell cell = null;  

          

        for (int i = 0; i < records.size(); i ++)   

            RefuelingRecord rr = records.get(i);  

              

            // 日期  

            cell = getCell(sheet, r, c + 0);  

            if (rr.getDate() != null)  

            cell.setCellValue(rr.getDate());  

            cell.setCellStyle(dateStyle);  

  

            // 车辆  

            cell = getCell(sheet, r, c + 1);  

            if (rr.getVehicle().getNickname() != null)  

            cell.setCellValue(rr.getVehicle().getNickname());  

            cell.setCellStyle(style);  

              

            // 燃油种类  

            cell = getCell(sheet, r, c + 2);  

            if (rr.getGasType() != null)   

                String s = null;  

                switch (rr.getGasType())   

                case _0: s  = "0号柴油"; break;  

                case _93: s = "93号汽油"; break;  

                case _97: s = "97号汽油"; break;  

                case _98: s = "98号汽油"; break;  

                  

                cell.setCellValue(s);  

              

            cell.setCellStyle(style);  

              

            // 单价  

            cell = getCell(sheet, r, c + 3);  

            if (rr.getPriceOfGas() != null)  

            cell.setCellValue(rr.getPriceOfGas());  

            cell.setCellStyle(style);  

              

            // 加油方式  

            cell = getCell(sheet, r, c + 4);  

            if (rr.getRefuelingType() != null)   

                String s = null;  

                switch (rr.getRefuelingType())   

                case FIXED_CUBAGE:  

                    s = "固定容积"; break;  

                case FIXED_MONEY:  

                    s = "固定金额"; break;  

                case FULL:  

                    s = "加满"; break;  

                  

                cell.setCellValue(s);  

              

            cell.setCellStyle(style);  

              

            // 加油量  

            cell = getCell(sheet, r, c + 5);  

            if (rr.getCubageOfGas() != null)  

            cell.setCellValue(rr.getCubageOfGas());  

            cell.setCellStyle(style);  

              

            // 花费  

            cell = getCell(sheet, r, c + 6);  

            if (rr.getSumOfMoney() != null)  

            cell.setCellValue(rr.getSumOfMoney());  

            cell.setCellStyle(style);  

              

            // 备注  

            cell = getCell(sheet, r, c + 7);  

            if (rr.getComment() != null)  

            cell.setCellValue(rr.getComment());  

            cell.setCellStyle(style);  

  

            r ++;  

          

      

  

   cell.setCellStyle(style);

// 燃油种类
cell = getCell(sheet, r, c + 2);
if (rr.getGasType() != null)
String s = null;
switch (rr.getGasType())
case _0: s  = "0号柴油"; break;
case _93: s = "93号汽油"; break;
case _97: s = "97号汽油"; break;
case _98: s = "98号汽油"; break;

cell.setCellValue(s);

cell.setCellStyle(style);

// 单价
cell = getCell(sheet, r, c + 3);
if (rr.getPriceOfGas() != null)
cell.setCellValue(rr.getPriceOfGas());
cell.setCellStyle(style);

// 加油方式
cell = getCell(sheet, r, c + 4);
if (rr.getRefuelingType() != null)
String s = null;
switch (rr.getRefuelingType())
case FIXED_CUBAGE:
s = "固定容积"; break;
case FIXED_MONEY:
s = "固定金额"; break;
case FULL:
s = "加满"; break;

cell.setCellValue(s);

cell.setCellStyle(style);

// 加油量
cell = getCell(sheet, r, c + 5);
if (rr.getCubageOfGas() != null)
cell.setCellValue(rr.getCubageOfGas());
cell.setCellStyle(style);

// 花费
cell = getCell(sheet, r, c + 6);
if (rr.getSumOfMoney() != null)
cell.setCellValue(rr.getSumOfMoney());
cell.setCellStyle(style);

// 备注
cell = getCell(sheet, r, c + 7);
if (rr.getComment() != null)
cell.setCellValue(rr.getComment());
cell.setCellStyle(style);

r ++;




四) Controller中返回逻辑视图名 (代码片段)

Java代码  

@RequiresUser       // 安全框架用元注释  

@RequiresRoles("ROLE_USER")  

@RequestMapping(value = "/list/excel", method = RequestMethod.GET)  

public String listByExcel(  

        @DateRangeFormat(pattern = "yyyy-MM-dd") @RequestParam("dateRange") DateRange dateRange,  

        ModelMap modelMap  

    )  

  

      

  

    // 放入model  

    modelMap.put("dateRange", dateRange);  

    modelMap.put("refuelingRecordList", gasService.findRefuelingRecordByDateRange(currentUserId, dateRange));  

      

    return "refueling-record-list"; // 最终返回逻辑视图名  

  

五) 为spring-mvc配置多个视图解析器。

<bean class="org.springframework.web.servlet.view.XmlViewResolver">  

    <property name="order" value="1" /> <!-- order很重要 -->  

    <property name="location" value="classpath:/META-INF/views.xml" />  

</bean>  

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  

    <property name="order" value="9999" />  

    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />  

    <property name="prefix" value="/WEB-INF/jsp/"/>  

    <property name="suffix" value=".jsp"/>  

六) 效果图

参考技术A 采用POI或JXL对Excel进行读取,具体代码使用你可以百度查询POI解析EXCEL的相关内容。
1、上传EXCEL文件至后台服务器;
2、通过POI解析EXCEL文件;
3、把解析好的内容进行验证判断;
4、封装内容到POJO;
5、对POJO进行持久化。本回答被提问者采纳

如何把网络的网页表格数据导入到Excel表中

将网络上面的网页表格数据导入Excel表格的方法如下(以Excel 2010为例):

    打开Excel表格,点击【数据】,【自网站】;

    在地址栏上面输入来自网站数据的网址链接(可以直接复制浏览器上面的网页地址后进行粘贴),之后按下回车键或点击【转到】;

    待网页上面的数据显示出来后,点击【导入】;

    选择导入的位置并点击【确定】;

    导入完成。

参考技术A

“把网页表格数据导入到Excel表中”的操作步骤是:

1、以Excel 2016为例,打开Excel工作表;

2、在“数据”选项下的“获取外部数据”中,选择“自网站”,然后在“新建Web查询”的地址栏,输入网页数据所在的网址链接,按“转到”;

3、单击“导入”数据左上角的“导入”按钮;

4、将数据纳入“导入”对象;

5、按“导入”,在弹出的“导入数据”编辑框中,点击“属性”;

6、在“外部数据区域属性”对话框中,勾选“允许后台刷新”及“刷新频率”,确定;

7、再点“确定”后,网页数据开始导入Excel工作表,且每隔间隔时间更新一遍。

参考技术B 打开excel文件后,点击数据---自网站--输入网址 选择需要的网页数据,完成后点击“导入‘ 问题解决

以上是关于springmvc excel表格数据导入数据库怎么做的主要内容,如果未能解决你的问题,请参考以下文章

arcgis10.3挂接表格出现连接到数据库失败 常规功能故障 外部数据库驱动程序意外错误 怎解决

springMVC jxl数据库导入Excel文件

如何将Excel中一个表格的数据导入到另一个表格

如何把网络的网页表格数据导入到Excel表中

如何把excel表格数据导入到数据库

怎样将Excel数据批量导入到word表格中