Java实现生成Excel表格并将数据导入及按照Excel模板实现数据导入

Java实现Excel数据导入数据库 在生成Excel前,我们需要理解一下Excel文件的组织形式。在POI中,是这样理解的:一个Excel文件对应一个workbook,一个workerbook是有若干个sheet组成的。一个sheet有多个row,一个row一般存在多个cell。模板的每列属性必须与表字段一一对应我这里项目环境是基于SpringBoot单体式架构,持久层用的公司框架,内置了基于MyBatis-Plus的各种单表操作的方法。导入依赖 4、通过插件生成表对应的实体类 5、自定义编写工具类 这里提供的是一个基础模板,根据业务的需求 阅读详情

背景:项目中用到邮件发送功能,需要将数据导入excel表格然后发送给供应商,第一次做的时候是直接创建了一个excel,领导说比较丑,就找甲方要了个模板,所以本篇文章除了介绍直接生成excel导入数据的功能以外,也介绍按照固定模板的方式导入数据的功能。

1.新生成一个Excel,并将数据导入

package com.tdhc.common.util;

import com.tdhc.common.model.PuEnquiry;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.ByteArrayOutputStream;
import java.util.List;

/**
 * 将对象转换为excel表格,并转化为字节输出流返回
 */
public class CreateExcel {
    public static ByteArrayOutputStream CreateExccel(List<PuEnquiry> list){
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        //创建一个工作薄对象
        Workbook workbook = new XSSFWorkbook();
        // 创建一个表
        XSSFSheet sheet = (XSSFSheet) workbook.createSheet("sheet1");
        //创建首行
        Row row = sheet.createRow(0);

        row.createCell(0).setCellValue("询价单号");
        row.createCell(1).setCellValue("请购单号");
        row.createCell(2).setCellValue("物资名称");
        row.createCell(3).setCellValue("规格型号");
        row.createCell(4).setCellValue("单位");
        row.createCell(5).setCellValue("申报量");
        row.createCell(6).setCellValue("单价");
        row.createCell(7).setCellValue("备货日期");
        row.createCell(8).setCellValue("货物信息/图片");
        row.createCell(9).setCellValue("有效日期");
        row.createCell(10).setCellValue("供应商名称");
        row.createCell(11).setCellValue("公司简称");
        row.createCell(12).setCellValue("电邮地址");
        row.createCell(13).setCellValue("联系人");
        row.createCell(14).setCellValue("联系电话");
        for(int i=1;i<list.size();i++) {
            XSSFRow row1 = sheet.createRow(i);
            row1.createCell(0).setCellValue(list.get(i-1).getEnquirynum());
            row1.createCell(1).setCellValue(list.get(i-1).getDocumentcode());
            row1.createCell(2).setCellValue(list.get(i-1).getMatname());
            row1.createCell(3).setCellValue(list.get(i-1).getSpecification());
            row1.createCell(4).setCellValue(list.get(i-1).getUnit());
            row1.createCell(5).setCellValue(list.get(i-1).getDeclarequantity());
            row1.createCell(6).setCellValue(list.get(i-1).getUnitprice());
            row1.createCell(7).setCellValue(list.get(i-1).getReadydate());
            row1.createCell(8).setCellValue(list.get(i-1).getCargoinfo());
            row1.createCell(9).setCellValue(list.get(i-1).getEffectivedate());
            row1.createCell(10).setCellValue(list.get(i-1).getSupname());
            row1.createCell(11).setCellValue(list.get(i-1).getSupshortname());
            row1.createCell(12).setCellValue(list.get(i-1).getSupemail());
            row1.createCell(13).setCellValue(list.get(i-1).getSuplinkman());
            row1.createCell(14).setCellValue(list.get(i-1).getSuplinkmanphone());
        }
        try {
            workbook.write(baos);
            baos.close();
        }catch (Exception e){
            e.printStackTrace();
        }
        return baos;
    }
}

步骤:创建工作薄–创建表–创建行–创建单元格–操作单元格
备注:不用管方法的返回值及工作流,因为我是为了配合邮件发送excel附件才那么做的,只用关注创建工作簿到setCellValue就可以了。

2.按照固定excel模板导入数据

package com.tdhc.common.util;

import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xssf.usermodel.examples.CreateCell;

import java.io.*;
import java.util.List;

public class CreateExcelAsTemp {
    public static ByteArrayOutputStream CreateExcel(List<Person> list) throws IOException {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        // 读取源文件
        FileInputStream fis = new FileInputStream("F:/test.xlsx");
        XSSFWorkbook workBook = new XSSFWorkbook(fis);

        // 进行模板的克隆(接下来的操作都是针对克隆后的sheet)
        XSSFSheet sheet = workBook.cloneSheet(0);
        workBook.setSheetName(1, "询价单"); // 给sheet命名
        workBook.removeSheetAt(0);
        XSSFCellStyle cellStyle = workBook.createCellStyle();
        cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
        cellStyle.setBottomBorderColor(IndexedColors.BLACK.getIndex());//底框黑色
        cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
        cellStyle.setLeftBorderColor(IndexedColors.BLACK.getIndex()); // 左边黑色
        cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
        cellStyle.setTopBorderColor(IndexedColors.BLACK.getIndex());  // 上边黑色
        cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框
        cellStyle.setRightBorderColor(IndexedColors.BLACK.getIndex());  // 右边黑色
        cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 字体居中

        for (int i=10;i<list.size()+10;i++){
            Row row = sheet.createRow(i);

            Cell cell = row.createCell(0);
            cell.setCellStyle(cellStyle);
            cell.setCellValue(i-9);

            Cell cell1 = row.createCell(1);
            cell1.setCellStyle(cellStyle);
            cell1.setCellValue((list.get(i-10).getName()));

            Cell cell2 = row.createCell(2);
            cell2.setCellStyle(cellStyle);
            cell2.setCellValue(list.get(i-10).getAge());

            Cell cell3 = row.createCell(3);
            cell3.setCellStyle(cellStyle);
            cell3.setCellValue(list.get(i-10).getAddress());

            Cell cell4 = row.createCell(4);
            cell4.setCellStyle(cellStyle);
            cell4.setCellValue(list.get(i-10).getBirthday());

            Cell cell5 = row.createCell(5);
            cell5.setCellStyle(cellStyle);
            cell5.setCellValue(list.get(i-10).getBirthday());

            Cell cell6 = row.createCell(6);
            cell6.setCellStyle(cellStyle);
            cell6.setCellValue(list.get(i-10).getAaa());

            Cell cell7 = row.createCell(7);
            cell7.setCellStyle(cellStyle);
            cell7.setCellValue(list.get(i-10).getBbb());

            Cell cell8 = row.createCell(8);
            cell8.setCellStyle(cellStyle);
            cell8.setCellValue(list.get(i-10).getCcc());

            Cell cell9 = row.createCell(9);
            cell9.setCellStyle(cellStyle);
            cell9.setCellValue(list.get(i-10).getDdd());
        }

        try {
            workBook.write(baos);
            baos.close();
            /*FileOutputStream fileOutputStream = new FileOutputStream("F:/aaa.xlsx");
            workBook.write(fileOutputStream);
            fileOutputStream.close();*/
        }catch (Exception e){
            e.printStackTrace();
        }
        return baos;
    }
}

步骤: 从磁盘中读取源文件–根据源文件克隆sheet–操作(之后的类似于第一种操作,多了设置样式的代码是因为我要跟模板对应上,而且setCellValue和SetCellStyle不能同时写在一行,所以后边的而代码看起来比较多)
备注: 克隆完之后的操作类似于第一种操作,这里使用的是克隆的方式,当然也可以使用POI读取之类的方式,达成效果即可。

关于参考的操作单元格的技术博客:
https://www.cnblogs.com/jym-sunshine/p/4917476.html
https://www.cnblogs.com/yanjie-java/p/8329276.html
这两个是对于我来说比较有用的,当然也有其他大佬的博客同样优秀,例子很多,有关的功能可以搜索一下作为参考

java导入Excel表格数据 一、思路是这样的: 1.先做好一个Excel模板供用户下载,例如下图 2.用户使用模板填好数据,上传Excel文件到web后台,后台接收文件。 3.把用户上传的文件进行校验文件格式、字段是否符合要求,符合要求则解析数据,保存到数据库中,不符合要求则提示; 二、代码实现 1.要导入的数据JAVA对象如下: public clas... 阅读详情

相关推荐

读取Excel模板写入内容,并继续使用Java生成Excel表格

Java中可以用代码生成Excel,但是针对比较复杂的Excel用代码生成就会比较麻烦,这就适合使用Excel模板和代码生成两种方式在一起使用。举例:现在要生成如下的Excel实现方式:第一个表格和第二个表格表头使用模板,第二个表格内容和第三个表格使用代码动态生成代码如下://jsonObject 是前台传入的Excel表格内需要的数据public static String exportBase...

ClumsyBirdFighting的博客 6179

Java将Excel文件的数据导入到数据库

java将excel文件的数据导入到数据库

qq_46552655的博客 4246

java 导入excel表格(批量导入),下载excel模板,导出表格 加柱形图

表格批量新增实体类 柱形图实体类 controller控制层 前端代码块 记得检查自己的路径 柱形图下的 bk 路径是控制层方法上注解传过去的路径 表格的a链接和from表单的路径也是,记得改成自己的路径其他样式可以不动,创建的html页面记得放在resources下的templates文件夹下,yml配置文件里配置了视图解析器。 效果图

m0_73194691的博客 766

[详细步骤]Java将Excel文件导入到数据库表中、并使用postman测试

file(excel)的文件路径需真实存在,下图进行设置路径、我的excel放在了D:\excel。entity:ExcelEntity(设计此实体类,需要与excel文件一一对应)如果不行设置或路径不存在、会出现以下提示。1、Maven依赖添加。4、postman测试。

Jiang5106的博客 2466

java 通过excel模板创建新文件并将数据导入excel,实现按行、列插入数据

java jxl 通过excel模板创建新文件并将数据导入excel,实现按行、列插入数据

java 生成Excel,可根据模板格式生成 Excel打印专用 报表

java 生成Excel,可根据模板格式生成 Excel打印专用 报表 这个是旧版本的 ,需要新版本的 可以联系我

Java版将EXCEL表数据导入到数据库中

可能很多开发者会面对客户这样的需求,在未使用系统之前,他们很多数据都是保存在Word或者Excel等一些电子表格中,现在他们需要将原来的数据自动导入到系统中去,而不是一条一条地手工录入。我就碰到了这样的需求,经过一番折腾之后,终于实现了,我是采用第三方控件JXL实现的,原理是比较简单的。下面是详细的代码: [java] view plaincopyprint? try 

F & Q的专栏 1016

Transformer模型在语义通信中的实战应用:从信源编码到端到端优化

本文深入探讨了Transformer模型在语义通信中的实战应用,从信源编码到端到端优化。文章分析了Transformer凭借其强大的全局依赖建模能力,如何成为实现高效语义提取与传输的理想架构,并提供了构建可端到端训练系统的具体实现思路与评估方法,旨在为下一代智能通信系统提供技术参考。

o9p0q1的博客 689

Java导出Excel模板,导出数据到指定模板,通过模板导入数据(一)

alibaba的easyexcel使用。导出Excel模板,导出数据到指定模板,通过模板导入数据

Dai_Haijiao的博客 1万+

VoIP概述

VoIP统一通信与VoIPVoIP与传统电话比较VoIP各项产品设备的类型及应用 统一通信与VoIP 统一通信指的是把计算机与传统通信技术统一成一体的新通信模式,融合计算机网络与传统通信网络在一个网络平台上,实现电话、传真、数据传输、音视频会议、呼叫中心、即时通信等众多应用服务 VoIP又称IP电话或IP网络电话,是Voice Over IP的缩写,这种技术通过对语音信号进行编码数字化,压缩处理成压缩帧,然后转换成为IP数据包在TCP/IP网络上进行传输,从而达到了在IP网络上进行语音通信目的 VoIP与传

kaminao的博客 4359

Kerberos基础及KDC服务(理论知识)

kerberos基础理论讲解+KDC服务

Siobhan_Mxin的博客 9711

Java实现Excel导入导出操作详解

java 基于poi的 excel导入导出

acoolper的专栏 2万+

告别机床‘卡顿’!用C语言在STM32上实现连续小线段速度前瞻(附开源代码)

本文详细介绍了如何在STM32上使用C语言实现工业级连续小线段速度前瞻控制器,解决机床运动控制中的卡顿问题。通过轻量级算法框架设计和混合精度计算策略,显著提升加工效率和表面质量。文章包含开源代码和实战案例,帮助开发者快速掌握速度前瞻规划算法在嵌入式系统中的应用。

weixin_42571738的博客 186

Java代码Excel导入模板下载、导入、导出详解(附代码)

@Java代码Excel导入模板下载、导入、导出详解(附代码) Java代码Excel导入模板下载、导入、导出详解(附代码)目录 1、pom文件添加POI依赖; 2、Postman Excel导入模板下载; 3、Excel导入模板下载Java代码详解; 4、Postman Excel导入请求参数; 5、Excel导入Java代码详解; 6、Postman Excel导出请求参数; 7、Excel导...

weixin_45268865的博客 6052

01-认识脑电信号及相关信号的预处理过程

脑电信号处理过程脑电实验为什么要预处理预处理方法降采样如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 脑电实验 本博客主要是记录基于脑电信号的情绪识别方法的研究...

脑机交流者的博客 7658

【UE5】RTS游戏的框选功能+行军线效果实现

步骤: 一、项目准备; 二、框选NPC并移动到指定地点; 三、框选效果; 四、行军线效果

ChaoChao66666的博客 2378

【导入】Java实现把Excel表格数据导入到指定JSP页面并展示

先看下效果图 第一步,点击下载,进行下载模板 第二步,打开模板删除测试数据后,根据格式填入相应的数据并保存 第三步,回到操作页面点击下一步,点击 文件上传按钮 ,选择刚刚编辑的文件,确定,下一步按钮就会变成 提交 按钮 第四步,点击提交按钮后,出现如下图,则导入成功 第五步,点击确认 后 ,最终效果如下 具体实现代码如下 JavaScript代码 ...

一见你就笑 5985

基于NRF52833芯片的DW3000 SPI驱动接口代码实现

详细介绍基于NRF52833、nRF52820 、nRF52832 nRF52840 芯片的DW3000 硬件驱动接口代码

DT程序员的博客 1217

Java实现根据excel模板导出数据(适合导出结构复杂的excel)

根据模板导出excel适用于结构复杂的excel表格数据导出,提前定义好excel模板,设置好变量,然后导出数据到excel模板中。 在idea中创建一个excel文件 打开创建好的文件province.xls,开始定义模板,设置变量用${}形式,此处的变量要和后边java代码中的model类的字段要一致,这样才能把具体数据输出到excel模板对应的位置。 导入依赖 <!-- jxls poi --> <dependency> <groupId>org.jxl

angang12的博客 2万+

OpenCV实现文档扫描OCR识别(基于Python + OpenCV,含完整代码)

在当今数字化时代,文档处理的自动化需求日益增长。文档扫描OCR(Optical Character Recognition,光学字符识别)技术成为了将纸质文档转换为可编辑电子文本的关键手段。通过Python与OpenCV库的结合,我们能够实现高效、准确的文档扫描OCR识别。这一技术在办公自动化、数字图书馆、档案管理等众多领域都有着广泛的应用。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2031

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

java手动/按模板生成word与excel

使用Apache poi或easypoi生成word,使用Apache poi或easyexcel或jxls生成excel

weixin_71543277的博客 6983

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Java中使用POI进行Excel导入、导出、以及模板下载整理

Java,POI,导入、导出、下载

刘百汇的博客 7539

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

java导入excel中的附件,java的导入excle/java中如何导入Excel,并给出模板

java中如何导入Excel,并给出模板一般使用jxl或poi需要相关jarpoi的直接去Apache去下载就行了下面写意个jxl子String fi = "Excel文件路径";//设置字WorkbookSettings workbooksetting = new WorkbookSettings();workbooksetting.setEncoding("GBK");//构造Workbook...

weixin_39860636的博客 1559

Java用POI实现根据Excel表格模板生成新的Excel并实现数据输出

一、模板excel结果excel二、项目所需jar包poi-3.11-20141221.jarpoi-examples-3.11-20141221.jarpoi-excelant-3.11-20141221.jarpoi-ooxml-3.11-20141221.jarpoi-ooxml-schemas-3.11-20141221.jarpoi-scratchpad-3.11-20141221.ja...

weixin_39324977的博客 3万+

java 导入excel表格(批量导入),下载excel模板,导出表格

1.导入excel表格(批量导入) 如图,给id=83和id=84的老师导入工作时间。 导入的excel模板如下 注意导入excel表格时关于日期时间类的的数据要设置对应的格式。 后台接口 /** * 导入老师时间 * @param file * @param request * @return */ @PostMapping(...

rookieTa的博客 2680

Chimm.Excel——使用 Java 基于 excel 模板操作表格的生成

1. 项目介绍 Chimm.Excel 是什么? 该程序是一个基于 Apache POI 和 Antlr4 打造的 excel 生成的 Java 工具,主要作用在于减少了开发人员通过程序生成表格的工作量,提高了工作效率。 Chimm.Excel 的优势是什么? 和网上部分的开源软件的区别是,该程序是基于 excel 模板进行工作的,并非基于注解。也就是说,我们首先需要在 office 中编写好我们的 excel 模板才行,优势在于,我们可以直接在 ...

吃茫茫的博客 1034
上一篇: Java实现邮件发送及带有附件的邮件发送
下一篇: Idea快捷键大全
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值