9.Excel转List

Python Excel转JSON实战:pandas与openpyxl协同处理脏数据 Excel转JSON是企业数据集成中的基础但高危环节,本质是将非结构化表格数据映射为标准API可用的结构化JSON。其技术难点不在语法层面,而在于真实业务Excel普遍存在的合并单元格、混合类型、隐藏格式、公式依赖等脏数据问题。pandas擅长向量化清洗却对结构异常零容忍,openpyxl提供单元格级控制力但开发成本陡增——二者协同分层处理(openpyxl定位+解析,pandas清洗+转换)成为工业级方案的核心范式。该路径兼顾可维护性、可审计性与容错能力,广泛应用于制造业数据中台对接、销售报表自动化、ER 阅读详情

将传入的Excel文件转为List集合

ServiceImpl:

public List<String> importCouponCode(MultipartFile file) {
        List<CouponCodeVO> couponCodeVOList = new ArrayList<>();
        try {
        	// 1.获取券码VO集合
            if(file==null || file.getSize()<=0){
                throw new BsException(CouponContants.C901, ErrorConstant.FORMATE(CouponContants.M901, "文件不能为空"));
            }
            InputStream input = file.getInputStream();
            Map<String, String> field = new HashMap<>(2);
            field.put("券码", "couponCode");
            couponCodeVOList = ExcelUtil.ExeclToList(input,CouponCodeVO.class,field);
        }catch (Exception ex){
            throw new BsException(CouponContants.C901, ErrorConstant.FORMATE(CouponContants.M901, "文件导入异常"));
        }
}

工具类: ExcelUtil

	@SuppressWarnings("AlibabaLowerCamelCaseVariableNaming")
    public static List ExeclToList(InputStream in, Class entityClass, Map<String, String> fields) throws Exception {

        List<Object> resultList = new ArrayList<Object>();

        XSSFWorkbook workbook = new XSSFWorkbook(in);

        // excel中字段的中英文名字数组
        String[] egtitles = new String[fields.size()];
        String[] cntitles = new String[fields.size()];
        Iterator<String> it = fields.keySet().iterator();
        int count = 0;
        while (it.hasNext()) {
            String cntitle = (String) it.next();
            String egtitle = fields.get(cntitle);
            egtitles[count] = egtitle;
            cntitles[count] = cntitle;
            count++;
        }

        // 得到excel中sheet总数
        int sheetcount = workbook.getNumberOfSheets();

        if (sheetcount == 0) {
            workbook.close();
            throw new Exception("Excel文件中没有任何数据");
        }
        sheetcount = 1;//sheet只取1

        // 数据的导出
        for (int i = 0; i < sheetcount; i++) {
            XSSFSheet sheet = workbook.getSheetAt(i);
            if (sheet == null) {
                continue;
            }
            // 每页中的第一行为标题行,对标题行的特殊处理
            XSSFRow firstRow = sheet.getRow(0);
            int celllength = firstRow.getLastCellNum();

            String[] excelFieldNames = new String[celllength];
            LinkedHashMap<String, Integer> colMap = new LinkedHashMap<String, Integer>();

            // 获取Excel中的列名
            for (int f = 0; f < celllength; f++) {
                XSSFCell cell = firstRow.getCell(f);
                excelFieldNames[f] = cell.getStringCellValue().trim();
                // 将列名和列号放入Map中,这样通过列名就可以拿到列号
                for (int g = 0; g < excelFieldNames.length; g++) {
                    colMap.put(excelFieldNames[g], g);
                }
            }
            // 由于数组是根据长度创建的,所以值是空值,这里对列名map做了去空键的处理
            colMap.remove(null);
            // 判断需要的字段在Excel中是否都存在
            // 需要注意的是这个方法中的map中:中文名为键,英文名为值
            boolean isExist = true;
            List<String> excelFieldList = Arrays.asList(excelFieldNames);
            for (String cnName : fields.keySet()) {
                if (!excelFieldList.contains(cnName)) {
                    isExist = false;
                    break;
                }
            }
            // 如果有列名不存在,则抛出异常,提示错误
            if (!isExist) {
                workbook.close();
                throw new Exception("Excel中缺少必要的字段,或字段名称有误");
            }
            // 将sheet转换为list
            for (int j = 1; j <= sheet.getLastRowNum(); j++) {
                XSSFRow row = sheet.getRow(j);
                // 根据Obj创建实体类
                if(row!=null){//过滤空行
                    Object entity =  entityClass.newInstance();
                    // 给对象中的字段赋值
                    for (Map.Entry<String, String> entry : fields.entrySet()) {
                        // 获取中文字段名
                        String cnNormalName = entry.getKey();
                        // 获取英文字段名
                        String enNormalName = entry.getValue();
                        // 根据中文字段名获取列号
                        int col = colMap.get(cnNormalName);
                        // 获取当前单元格中的内容
                        XSSFCell cell = row.getCell(col);
                        cell.setCellType(CellType.STRING);
                        String content = cell.toString().trim();
                        //去除数字的默认小数点 .0
                        int length = content.length();
                        if (length>=2) {  //这里大于等于2是防止有些列只有一个字符,到下面会报错
                            if (content.substring(length-2, length).equals(".0")){
                                content = content.substring(0,length-2);
                            } //通过截取最后两个字符,如果等于.0 就 去除最后两个字符
                        }
                        // 给对象赋值
                        setFieldValueByName(enNormalName, content, entity);
                    }
                    resultList.add(entity);
                }
            }
        }
        workbook.close();
        return resultList;
    }
pandas高级操作:list 转df、重采样 文章目录list转数据框(Dataframe)pandas读取无头csv重新采样pandas 读取 excel list转数据框(Dataframe) # -*- coding:utf-8 -*- # /usr/bin/python # 字典转数据框(Dataframe) from pandas.core.frame import DataFrame a=[1,2,3,4]#列表a b=[5,6,7,8]#列表b c={"a" : a, "b" : b}#将列表a,b转换成字典 data=DataFr 阅读详情

相关推荐

Java实现Excel文件Sheet导出至List的完整技术方案

要是Sheet名字带日期怎么办?比如“订单数据_202404”、“订单数据_202405”……写个正则匹配就行:// 使用示例findSheetByNamePattern(workbook, "订单.*\\d{4}").ifPresent(sheet -> System.out.println("找到了:" + sheet.getSheetName()));是不是瞬间感觉自由多了?Start[遍历所有Sheet] --> Count{总数N}

weixin_28713083的博客 789

将Excel文件一键解析为list对象集合

throw new Exception("第"+cellNu+"列格式不正确,不支持公式数据读取");titleMap.put("订单编号", "virtualAccountAppId");titleMap.put("新网客户虚户", "virtualAccountNo");checkMap.put("virtualAccountAppId","订单编号");checkMap.put("virtualAccountNo","新网客户虚户");throw new Exception("创建工作簿失败");

wzNewFace0609的博客 2515

从业10年的AI应用架构师:企业AI平台运营的4个核心经验,值得收藏

去年年底,我在某大型制造企业做AI咨询时,遇到了这样的场景:这不是个例。我接触过的10家企业中,有7家的AI平台都陷入了“技术自嗨”的陷阱——技术团队追求模型精度、功能完备性,却忽略了业务到底需要什么。如果你也遇到过类似问题:比如“模型准确率很高,但业务不买账”“AI项目上线后没人用”“投入产出比极低”,那么这篇文章的4个经验,可能会帮你避开这些坑。很多企业认为,AI平台就是“买一套工具+部署几个模型”。但实际上,企业AI平台的本质是“技术与业务的连接生态”:根据Gartner的报告,80%的企业AI项目失

AI 原生应用开发的博客 709

【Excel导入】将excel转化list对象数组的导入的排坑+简单实现

业务场景:其实在前面的文章里就有一些关于文件导入、读取的,但像OA业务的交互中,也不妨有许多表格导入的场景。

真的好想再回到那时,可现在能做的只有补救。————个人博客:https://w7h1te.github.io/ 1947

从虚拟机到双系统:手把手教你为Gromacs搭建最强Linux环境(含WSL2、Ubuntu22.04配置)

本文详细指导如何在Windows系统下为Gromacs分子动力学模拟搭建高性能Linux环境,涵盖WSL2和Ubuntu22.04双系统配置。通过对比虚拟机、WSL2和原生Linux的性能数据,提供GPU加速、内存优化等实用技巧,帮助科研人员提升计算效率。

weixin_30861797的博客 269

SAP VF01开票报错:出口贸易数据不完整

找了半天资料,最后发现是没有维护凭证抬头的数据;由于我不是SD模块顾问,整体流程使用的是原本环境里面的数据,用新建工厂引用,所以也不知道为啥会出发这个贸易业务。正常传到FICO模块,生成会计凭证、获利分析、利润中心及CO凭证。需要维护这三个字段后才能正常转到FI生成会计凭证。VF01开票报错:出口贸易数据不完整。

MaiKouBei的博客 1538

excel数据转list

转自:https://blog.csdn.net/mrb1289798400/article/details/77366210 工作中需要将一个产品excel数据转化为一种grammar规则文件,就需要获取到excel的数据进行处理,现在总结下思路; 这里注明:尽量使用Apache公司下的poi包 原因: apache公司继续在维护; 支持2007版本以后的excel; javabean...

qq_36688928的博客 2608

python爬虫抖音 个人资料 仅供学习参考 切勿用于商业

本文仅供学习参考 切勿用于商业 本次爬取使用fiddler+模拟器(下载抖音APP)+pycharm 1. 下载最新版本的fiddler(自行百度下载),以及相关配置 1.1.依次点击,菜单栏-Tools-Options-HTTPS,如图1红框打钩,HTTPS旁边Connections配置,如图2红框打钩 1.2.再次点击HTTPS栏,点击Actions选择第二个…to ...

dbva7063的博客 1491

【Python】打开excel转为list

打开excel转为list

weixin_39407597的博客 878

人工智能机器学习基础篇】——深入详解强化学习 基础知识,理解马尔可夫决策过程(MDP)、策略、价值函数等关键概念

人工智能机器学习基础篇】——深入详解强化学习 基础知识,理解马尔可夫决策过程(MDP)、策略、价值函数等关键概念

编程技术探索者,分享C/C++、C#、Java、数据库等开发经验,聚焦实战技巧与AI兴趣,助力编程爱好者成长。 1925

硬件工程师笔记——三极管Multisim电路仿真实验汇总

NPN型三极管:由N型半导体、P型半导体和N型半导体组成,即NPN结构。 PNP型三极管:由P型半导体、N型半导体和P型半导体组成,即PNP结构。 三极管的工作原理基于电流的控制和放大,其核心是基区对电流的控制作用。 将三极管等效为两个串联的二极管进行等效分析

XU157303764的博客 2635

java注解实现通用Excel中文表格转实体对象列表,支持中文表头,Excel批量导入,excel转实体对象,excel读取,java读取excel

java注解实现通用Excel中文表格转实体对象列表,支持中文表头,在Excel数据导入使用的通用工具类,代码简洁优雅

GIS数据批量处理、质检工具开发 8917

【图论】系列(七)图论的中心性度量方法及重要性评价指标

图论中的中心性度量方法是用来衡量图中各个节点(或顶点)相对重要性的指标。

qq_30066733的博客 1075

java list 转excel_List集合导出成Excel表格

package job.util;import java.io.FileOutputStream;import java.io.OutputStream;import java.lang.reflect.Method;import java.text.SimpleDateFormat;import java.util.Date;import java.util.List;import java.u...

weixin_36285230的博客 1749

某招标公告网和vcaptcha验证码识别逆向

本文分析了某验证码系统的加密流程及破解思路。首先通过反混淆技术定位到加密函数,拆解了包含指纹函数、环境参数等组成的加密字符串。研究发现验证码生成涉及canvas指纹、环境检测等反爬机制,可通过模拟浏览器环境绕过。验证过程需要解密图片顺序,通过work2.js计算还原图片位置,再结合滑动轨迹、时间等参数生成验证请求。文章仅提供技术研究思路,强调需遵守法律法规,严禁非法破解信息系统。完整流程包括环境模拟、加密参数还原、图片处理和轨迹生成等步骤,成功率较高。

码王吴彦祖的博客 577

visio安装包

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

(poi)Excel转List,List转Excel,输入日期为当年的第几天

首先:pom.xml导入所需依赖 #配置mybatis <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> ...

qq_34545939的博客 405

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【ITOO 1】将List数据导出Excel表

需求描述:在课表导入的时候,首先给用户提供模板(excel),然后将用户填写好的数据读取到list集合中。再进行判空处赋值处理,以及去重处理。这篇博客,主要介绍读取excel表和导出excel表的方法。 一、读取Excel数据到list /** * 把输入流文件转变成list集合 * * @param inExcelFile * @return */ publ

该怎么解释?我懒得解释 5334

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

如何从Excel中把数据导入到SharePoint List(Import Excel data to SharePoint List)

SharePoint列表功能强大是众所周知的,但是存在一个缺陷,不能与Excel很好的关联。这应该是SharePoint中缺失的功能。虽然在新建列表时,用户可以选择从电子表单自定义创建,但是编辑列表时,却没有从电子表单导入数据到已存在的列表中这个选项,可以在Spreadsheet中编辑。搜索了一下,百度没有完美的解决方案,最后在CodePlex网站上找到一篇文章(Import Excel data...

weixin_30466039的博客 2757

python将list写入excel_Python 将list写入Excel文件

Python 将list写入Excel文件# 把二维列表存入excel中def writeToExcel(file_path, new_list):# total_list = [['A', 'B', 'C', 'D', 'E'], [1, 2, 4, 6, 8], [4, 6, 7, 9, 0], [2, 6, 4, 5, 8]]wb = openpyxl.Workbook()ws = wb.a...

weixin_39878716的博客 8550

python工具箱—Excel与List互转

环境信息 python版本:3.7.3 第三方模块:openpyxl openpyxl安装依赖:openpyxl-2.6.3.tar.gz, jdcal-1.4.1.tar.gz, et_xmlfile-1.0.1.tar.gz #脚本 下面的脚本可以作为模块拿来即用。脚本包含两个函数: excel2list : 用于将excel内容转换为python的list(二维); list2excel ...

bin_sea的专栏 4983

EXCEL扩展API使用手册

EXCEL扩展API使用手册 一、使用说明: 1、 打开EXCEL。 2、 右键点击SHEET1,选择“查看代码”,如下图 3、 点击“工具栏”中的“模块”,如下图: 4、 点击左侧“模块1”,打开后,将API代码粘贴至“模块1”内。 二、API代码: Function FIND_LIST(find_str, list) For Each mylist In list ...

weixin_44499757的博客 9738

java将excel转成json_Java读取Excel文件转换成JSON并转成List——(七)

Jar包实体类1 packagebean;23 public classQuestion {45 private String timu; //题干6 private String leixing; //类型7 private String axuanxiang; //A选项8 private String bxuanxiang; //B选项9 pr...

weixin_35836405的博客 267

封装了一个NPOI操作类 WriteToDownLoad方法对DataTable和List写入Excel

1using System;   2using System.Collections.Generic;   3using System.Linq;   4using System.Text;   5using System.Web;   6using System.IO;   7using NPOI.HSSF.UserModel;   8using NPOI.HPSF;   9us

程序与人生 2208

JavaWeb的数据库转list集合再转成excel导出

javaweb的list集合转Excel导出 汇总今日所学,关于java的Excel导出过程 环境是spring boot的框架。 第一步: 首先在pom.xml里面增加依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi&l...

weixin_38538103的博客 388

List集合导出成Excel表格

需要的jar包:poi-3.14.jar , dom4j-1.6.1.jar , xmlpull_1_0_5.jar , xstream-1.4.8.jar List集合导出成Excel表格 实体类package job.util;/** * * @className Employee * @deprecated 导出的实体 * @author pengfei.xiong * @da

BIGBEAR的博客 1万+

将List数据保存到Excel中

1 import java.io.File;   2 import java.io.IOException;   3 import java.util.Arrays;   4 import java.util.HashMap;   5 import java.util.Iterator;   6 import java.util.List;   7 import java.util.M

aolei_vcf的专栏 1936
上一篇: 17.分布式自增ID雪花算法
下一篇: 将List集合导出为Excel
cuichen97
博客等级 码龄7年 34粉丝 209原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值