Excel Writer

Excel解析easyexcel工具类

让人想犯罪 __ 提交于 2020-12-05 05:02:40
Excel解析easyexcel工具类 easyexcel解决POI解析Excel出现OOM <!-- https: // mvnrepository.com/artifact/com.alibaba/easyexcel --> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>1.1.1</version> </dependency> 1、ExcelModel——Java模型映射 package com.xinyartech.erp.system.model; import java.io.Serializable; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.metadata.BaseRowModel; import lombok.Data; /** * * * @author Lynch */ @SuppressWarnings( "serial" ) @Data public class ExcelModel extends BaseRowModel implements Serializable{ @ExcelProperty(value =

Python笔记:按不同表名称合并汇总同名工作表到同一个工作簿中

房东的猫 提交于 2020-08-11 18:30:27
虽然用VBA也可以实现“ 将多个 / 不同Excel工作簿中的 / 多个表格 / 按不同工作表名称 / 汇总合并在同一个Excel工作簿中 ”,但是如果数据量过大,VBA用起来就会卡。因为Python可以处理的数据量比较大都不会卡,所以我就喜欢用Python来操作。 示例一: 在 C:\Users\QDM\Desktop\Python 路径下有3个工作簿,它们的数据结构相同,且都位于 Sheet1 中。如以下截图所示: 然后,通过以下这段Python代码,可以实现如下效果: # 导库 import pandas as pd import os # 将待合并的文件都放到同一个文件夹内,文件夹和路径尽量避免包含中文字符 os.chdir(r"C:\Users\QDM\Desktop\Python") # 将要汇总的工作表名称写入列表中 sheetname = ["Sheet1"] with pd.ExcelWriter(r"C:\Users\QDM\Desktop\Python\汇总.xlsx") as writer: for sheet in sheetname: df = pd.concat([pd.read_excel(file,sheet_name = sheet) for file in os.listdir() if file.endswith(".xlsx")]) df

Python笔记:把结果导出到同一个工作簿里的不同工作表中

百般思念 提交于 2020-08-10 01:36:18
有时候,我们在用Python处理数据后会产生多个结果(主要是DataFrame)。这时,我们可以根据自己的实际需求,把各个结果导出到不同的工作簿中,或者 把多个结果导出到同一个工作簿的不同工作表中 。面对这种需求,我们可以使用 ExcelWriter()函数 把多个结果导出到同一个工作簿的不同工作表中。具体思路如下: # 先加载数据 import pandas as pd df = pd.read_excel(r"C:\Users\QDM\Desktop\Python\1.xlsx") df # 聚合求和 df1 = df.groupby(["商品"])["销量"].sum() df1 # 聚合计数 df2 = df.groupby(["商品"])["销量"].count() df2 # 聚合求最大值 df3 = df.groupby(["商品"])["销量"].max() df3 # 声明一个读写对象 # Excelpath 为文件要存储的路径 writer = pd.ExcelWriter(r"C:\Users\QDM\Desktop\Python\excel.xlsx", engine = "xlsxwriter") # 分别将表df1,df2,df3写入到Excel工作簿中的Sheet1,Sheet2,Sheet3中 # 并命名为“一表”、“二表”、“三表” df1.to

利用Python快速进行数据探查

孤者浪人 提交于 2020-07-24 05:56:53
工作中你是否遇见这样的问题: 接手新业务时需要了解数十上百张的数据库表结构; 表中的数据量级均是百万级以上; 希望可以批量快速生成如下表格。 数据探查结果表 如果你遇到了以上的问题,恭喜你,本文可以帮助你解决! 1、解决思路 但有人会有疑问,Python进行数据探查不是非常简单的事吗,一个函数分分钟搞定,还有必要专门介绍吗。如果你这样想就too yong too simple了。 你可以回想下,当我们采用descirbe()函数时,默认的前提是已经将数据读入了Python之中。但你可曾想过,实际工作中数据读入也会成为一种问题。对的,当数据量级一旦达到百万以上甚至更多时,Python读取数据的效率就很低了。读取一张表可能就要半小时以上,几十张表的话差不多就得一天了。这样低效的方法,肯定是不可取的。 本文就是来源于工作中的实际需求,在上述的方式行不通时,我转变思路寻找了另一种方式。具体的逻辑思路如下: 也就是说,为了快速进行探查,我们可以不用进行全表读入,只需对每个表每个字段进行分组查询就可以了。但如何将SQL查询语句进行循环呢?采用字符串的格式化输出! 2、代码实现 首先我们导入相关包 import pymysql import pandas as pd import datetime as dt start=dt.datetime.now() #为了计算程序执行时间

阿里 EasyExcel 使用及避坑

浪子不回头ぞ 提交于 2020-05-01 19:26:20
github地址: https://github.com/alibaba/easyexcel 原本在项目中使用EasyPoi读取excel,后来为了统一技术方案,改用阿里的EasyExcel。EasyExcel和EasyPoi有一定的相似之处。 EasyExcel和EasyPoi效率对比: 因为数据量少,从效率上看几乎没有差别,EasyExcel略胜一筹。 使用maven的方式引用EasyExcel https://mvnrepository.com/artifact/com.alibaba/easyexcel <!-- easyexcel --> < dependency > < groupId > com.alibaba </ groupId > < artifactId > easyexcel </ artifactId > < version > 1.1.2-beat1 </ version > </ dependency > 使用Java模型的方式使用easyexcel Java模型 @Data public class TotalAmount extends BaseRowModel implements Serializable { private Integer id; @ExcelProperty(value ="类型",index = 0 ) private

EasyExcel工具类,使用示例

允我心安 提交于 2020-05-01 15:56:32
工具类: 1、ExcelUtil.java public class ExcelUtil<T> { /*** * 读取Excel方法 */ public static <T extends BaseRowModel> ArrayList<T> readExcel(MultipartFile excel, Class<T> clazz) { try { InputStream in = new BufferedInputStream(excel.getInputStream()); GeneralExcelListener<T> listener = new GeneralExcelListener<>(); ExcelReader excelReader = new ExcelReader(in, ExcelTypeEnum.XLS, listener); excelReader.read(new Sheet(1, 1, clazz)); return listener.getSuccessDatas(); } catch (Exception e) { return new ArrayList<T>(); } } /** * 导出 Excel :一个 sheet,带表头 * * @param response HttpServletResponse * @param list

Spring Boot 入门(十二):报表导出,对比poi、jxl和esayExcel的效率

ⅰ亾dé卋堺 提交于 2020-04-30 22:02:10
本片博客是紧接着 Spring Boot 入门(十一):集成 WebSocket, 实时显示系统日志 写的 关于poi、jxl和esayExcel的介绍自行百度。 jxl最多支持03版excel,所以单个sheet页面最多只能导出65536条数据。 我直接将excel导入到浏览器并打开,以下统计导出时长指将数据从数据库查询,并写入到excel的过程。不包括打开excel所消耗的时间 为了接近真实场景,我建了一个表,一共有32个字段,其中2个id:一个自增长、一个UUID,10个int型字段,10个String字段,10个datatime字段;导出的excel包含了32个字段 我每次导出一个excel后,直接将jvm的内存清空,再进行下一个excel的导出,保证导出excel不受其它线程的影响 我只是为了比较性能,所以没有对excel的样式进行过多的渲染 poi方式,我使用的是刷新硬盘的方式,数据量大于设置的值,就将内存中的数据刷新到硬盘,降低OOM的概率,同时也增加了导出效率 1.pom依赖 以下是poi、jxl和esayExcel的全部依赖 1 <!-- begin poi --> 2 < dependency > 3 < groupId > org.apache.poi </ groupId > 4 < artifactId > poi </ artifactId > 5 <

如何实现前端异步调用导出Excel?

生来就可爱ヽ(ⅴ<●) 提交于 2020-04-28 15:11:45
今天分享JBolt极速开发平台中使用的异步下载文件的解决方案。 需求场景: 列表查询界面有一个【导出Excel】按钮,需要点击按钮,弹出loading信息框,异步调用后台action,得到数据库数据后生成Excel数据然后响应发送到前端,异步请求拿到数据后,当做文件下载下来。 重点: 异步请求,导出Excel,前端拿到后做成文件下载 解决方案: 1、前端异步请求 点击按钮的时候,执行一个异步请求,去访问Action <button type="button" onclick="ajaxDownload('admin/user/exportExcel')">导出Excel</button> //异步下载 function ajaxDownload(url,fileName){ var xhr = new XMLHttpRequest(); xhr.timeout=jboltAjaxTimeout; xhr.open('GET', url, true); xhr.responseType = "blob"; // 返回类型blob //定义请求完成的处理函数 xhr.onload = function () { // 请求完成 if (this.status === 200) { // 返回200 var blob = this.response; var reader = new

pandas ExcelWriter定制格式(定制表头、渲染颜色等,非ExcelWriter标准的创建模式)

孤街浪徒 提交于 2020-02-29 16:51:10
  ExcelWriter这个插件有个坑,就是已经设置好的格式是无法更改( 原因详见这里 )的。而且有如下问题:1、 无法分别给一个单元格写入值和样式 . 对于单个单元格, 必须在写入值的同时为单元格写入样式. 关于这个, 可以用 set_column 和 set_row 解决, 它们的实质是设置该列/行的默认样式 。2、 无法同时给一个单元格套用两种样式 。   因此,由pandas转成excel的时候,必须将格式清除,尤其是表头的格式,代码如下: import pandas.io.formats.excel pandas.io.formats.excel.header_style = None   标准的保存pandas表到excel的形式为: writer = pd.ExcelWriter(output_prefix + cv_excel_file_name) df.to_excel(writer, 'Sheet1') # 这里假设df是一个pandas的dataframe writer.save() writer.close()   如果要定制输出的excel格式,那么得在to_excel和save之间添加代码: writer = pd.ExcelWriter(output_prefix + cv_excel_file_name) df.to_excel(writer,

如何下载股票的历史收盘价 股票历史收盘价下载方法

左心房为你撑大大i 提交于 2020-01-10 10:49:14
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 不想写代码的话,翻到文章底部有现成的下载工具。 除了通过第三方接口获取股票的历史收盘价之外,我们还可以自己通过抓取的方式获取。 我们以某财经网站为例,股票的历史收盘价是这样的: 从图片上能看出,股票历史收盘价是按照年-季度的方式加载的,每年的每个季度的链接都是不一样的。 简单列一下: 根据年、季度来拼接出来历史收盘价的链接。例如2020年1季度和2020年2季度的链接是不一样的,但是链接中也只有这两个数字不一样,其它都相同。 解析出每天的历史收盘价 保存到Excel或者数据库 import requests,re,pandas # 这里年月都可以用datatime来实现,这里就直接写出来了。 year = [2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020] month = [1,2,3,4] base_url = 'https://www.baidu.com/' # 假设要抓取的网站是百度 one_list = [] arry_list = [] for y in year: for m in month: y_m =f'{y}-{m}' response = requests.get(f'{base_url}?{y_m}') #