欢迎关注个人微信公众号:
小哈学Java , 文末
分享阿里 P8 高级架构师吐血总结的 《Java 核心知识整理&面试.pdf》资源链接 !!
个人网站: https://www.exception.site/essay/how-to-create-complex-style-excel-with-freemark
一、背景
小哈最近这段时间开始负责一个新的产品:下载中心。啥玩意这是?
产品的目的其实就是统一管控各业务组文件下载功能(包括一些海量数据的导出,文件合并上传等),项目组不用自己再去实现各式各样的文件(PDF, Word, Excel)生成, 统一对接下载中心,由下载中心统一完成文件的生成、合并、上传、下载流程。
问题来了,这里面包括一些复杂文件的生成,如带有复杂样式的 Excel 文件,比如下面这个样子的:
这种复杂样式的 Excel, 如果说放到各个业务线去实现还是好办的,因为站在各个业务组的角度,场景变化不会太多,按照文件格式,代码写死即可。
但是站在下载中心的角度,因为需要对接各个业务中心,每个业务中心生成的样式都不一样,不可能每个业务组接进来,我都得定制的写一套生成代码吧!这显然也不合常理!
那么,有没有什么一劳永逸的办法呢?答案是肯定的!
二、实现思路
要说实现方式,你的脑海里可能第一会想到传统的 Apache poi,jxl ,亦或者是阿里出品 EasyExcel 等等。
PS: 关于阿里的 EasyExcel, 小哈之前有分享过 ,没看过的小伙伴们,可以看下《 7 行代码优雅地实现 Excel 文件生成&下载功能》。
对于这种复杂样式,要是用 Apache poi, jxl, 阿里 EasyExcel 去实现,不可避免的,代码肯定会非常繁琐。
有没有啥优雅(偷懒的)的方式呢?
其实我们可以通过视图引擎 Freemark、Velocity 来帮我们生成复杂样式 Excel 文件,无需关心花里胡哨的复杂样式,只关注于填充数据即可。接下来,我们以 Freemark 作为示例来讲解,如何生成这个复杂样式的 Excel 文件。
拓展阅读:
什么是 Freemark ?
FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
其实,对于Java 后端来说,它更常被用来服务端动态渲染 html 页面返回给浏览器。前些年还比较火热,近些年因为前后端分离的火热,也开始慢慢淡出视野了。
三、快速上手
3.1 添加依赖
org.springframework.boot
spring-boot-starter-freemarker
注意: 小哈这里基于 Spring Boot 写的测试代码,版本号可以无需指定,否则,你需要手动指定好版本号。
3.2 导出 xml 模板文件
首先,将复杂样式的 Excel 文件另存为 .xml
视图模板,如下图所示:
打开 xml 模板文件,可以清晰的看到里面定义了各种节点,节点描述了整个 Excel 的样式结构, 如下图所示:
3.3 填充占位符
再回过头来看下之前那个复杂 Excel 文件, 观察一下哪些单元格的值需要动态设置:
图中用红色特意标注出来了。
在刚刚另存为的 xml 模板文件中填写 freemark 表达式,考虑到这里只是个示例 Demo, 仅仅选取几个示例单元格来填写占位符,如下所示:
订单标题:
其他需要动态填充的单元格:
PS: xml 文件中,
|
节点代表一行,
|
代表一个单元格。
在需要动态填充数据的地方,加上相关 freemark 表达式,如 ${commodity.name!}
,如下所示:
1 |
${commodity.name!} |
|
${commodity.num!} |
${commodity.num1!} |
22 |
44 |
55 |
盒 |
${commodity.price!} |
${commodity.price2!} |
${commodity.price3!} |
${commodity.timestamp} |
${commodity.createTime?string('yyyy-MM-dd HH:mm:ss')} |
|
按照服务端数据模型的定义,填写好相应的字段名称,再对照下后台 Commodity 商品类的定义:
这个商品类中,我们定义了不同类型的字段,如 String、int、Integer、Double、Float、
金额类型 BigDecimal
、日期类型 Date
等,用以测试对不同数据类型的兼容性。
确认相关属性字段名无误后,再来看下 freemark 生成 Excel 的核心代码:
package site.exception.springbootfreemarkexcel;
import freemarker.template.Configuration;
import freemarker.template.Template;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import site.exception.springbootfreemarkexcel.entity.Commodity;
import java.io.File;
import java.io.FileWriter;
import java.math.BigDecimal;
import java.util.*;
/**
* @author 犬小哈 (微信公众号: 小哈学Java)
* @site www.exception.site
* @date 2019/5/21
* @time 上午10:57
* @discription
**/
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBootFreemarkExcelApplicationTests {
@Test
public void createExcelByFreemark() throws Exception {
Configuration configuration = new Configuration(Configuration.VERSION_2_3_28);
// 设置模板文件的父目录
configuration.setDirectoryForTemplateLoading(new File("/Users/a123123/Work/tmp_files"));
// 加载模板文件
Template template = configuration.getTemplate("/excel_template.xml", "UTF-8");
// 数据准备,可以是从数据库中查询,这里为了方便演示,手动 new 了
Map data = new HashMap<>();
data.put("title", "测试标题1");
List commodities = new ArrayList<>();
Commodity commodity = Commodity.builder()
.name("name1").num(11).num1(111)
.price(new BigDecimal(11.1)).price2(new Double(11.11))
.price3(new Float(11.1111))
.createTime(new Date())
.timestamp(System.currentTimeMillis())
.build();
commodities.add(commodity);
// 生成 excel 文件
template.process(data, new FileWriter("/Users/a123123/Work/tmp_files/excelByFreemark.xls"));
}
}
可以看到生成复杂样式的 Excel 的代码非常简洁。关于每一行代码什么意思,注释已经说得很清楚了,这里就不加以说明了。
运行单元测试,看下效果:
完美,在需要填充内容的地方都已经动态设置上了内容。
四、多行数据如何生成?
如何做到动态生成多行呢?其实也很简单,重新打开刚刚修改的 xml 模板文件,在需要动态生成多行的地方,添加 freemark 循环表达式即可:
PS: 关于 Freemark 更多表达式的使用,小伙伴们可以自行在各大搜索引擎中搜索,因为如何使用 Freemark 不是本文关注的重点~
上图中,我们对后台的 commodities
字段做了循环,所以对应的,后台代码也需要做相关修改:
我们在 commodities
中添加了两个商品对象。赶快代码跑起来,看看效果!
别急,还有个地方需要做下修改,不然会报错!!
找到 节点,有个属性叫 ExpandedRowCount
, 它定义了表格行的总数,如果数值与实际的行数对应不上的话,会出问题。
这里我们添加 Freemark 表达式,总行数为商品 commodites
集合的大小加上 16, 注意:16 为除了动态生成的行数外,固定不变的行数大小,小伙伴们如果使用的是不同的 xml 模板,需要自行确认好这个数值的大小。
修改完了以后,再次运行单元测试,效果如下:
OK! 大功告成!
五、局限性
通过视图解析器来生成 Excel 的确很优雅(偷懒),同时兼具灵活性。但是它同样存在一些局限性!小伙伴们在技术选型时,需要结合实际的业务场景审视它是否适合。
目前个人测试结果是,在 MAC 系统上仅支持生成 03 版本 Excel, 07 版本存在打不开的情况;
视图引擎生成文件无法往 Excel 里面追加数据,所以仅仅适用于数据量不大的个性化 Excel 生成,否则写入大批量数据时,存在内存溢出(OOM)的情况发生;
MAC 系统存在生成的 Excel 文件无法编辑保存的情况:
小哈在测试中发现,生成 excel 在 MAC 系统上存在编辑后,无法保存的情况;而 Windows 系统 Microsoft Excel 和 WPS 均能够正常编辑保存;
六、总结
本文中,小哈给大家介绍了如何通过视图引擎优雅的生成 Excel 文件,演示了相关示例代码,以及它的相关局限性,希望大家看完本文后能够有所收获,下期见哟~
GitHub 示例代码
https://github.com/weiwosuoai/spring-boot-tutorial/tree/master/spring-boot-freemark-excel
免费分享 | 面试&学习福利资源
最近在网上发现一个不错的 PDF 资源《Java 核心知识&面试.pdf》分享给大家,不光是面试,学习,你都值得拥有!!!
获取方式: 关注公众号: 小哈学Java , 后台回复资源 ,既可免费无套路获取资源链接 ,下面是目录以及部分截图:
重要的事情说两遍,关注公众号: 小哈学Java , 后台回复资源 ,既可免费无套路获取资源链接 !!!
欢迎关注微信公众号: 小哈学Java
你可能感兴趣的:(excel,freemarker)
python 读excel每行替换_Python脚本操作Excel实现批量替换功能
weixin_39646695
python 读excel每行替换
Python脚本操作Excel实现批量替换功能大家好,给大家分享下如何使用Python脚本操作Excel实现批量替换。使用的工具Openpyxl,一个处理excel的python库,处理excel,其实针对的就是WorkBook,Sheet,Cell这三个最根本的元素~明确需求原始excel如下我们的目标是把下面excel工作表的sheet1表页A列的内容“替换我吧”批量替换为B列的“我用来替换的
办公党必备!Excel文件批量加密神器!一键保护你的重要数据
阿幸软件杂货间
Excel excel
软件介绍今天推荐的这一款专为Excel文件设计的批量加密工具,能够帮助用户快速、高效地为多个Excel文件设置密码保护,有效防止数据泄露。软件特点本地化离线处理支持批量操作完全免费软件操作选择你需要加密的文件和路径,设置密码进行加密即可软件下载夸克网盘迅雷网盘UC网盘
Pandas:数据科学的超级瑞士军刀
科技林总
DeepSeek学AI 人工智能
**——从零基础到高效分析的进化指南**###**一、Pandas诞生:数据革命的救世主****2010年前的数据分析噩梦**:```python#传统Python处理表格数据data=[]forrowincsv_file:ifrow[3]>100androw[2]=="China":data.append(float(row[5])#代码冗长易错!```**核心痛点**:-Excel处理百万行崩
【免费下载】 Aspose for Java:解锁无水印、无限制的文档处理能力
房征劲Kendall
AsposeforJava:解锁无水印、无限制的文档处理能力【下载地址】AsposeforJava-去除水印和数量限制AsposeforJava-去除水印和数量限制Aspose是一个著名的文档处理库,专为Java应用程序设计,支持多种文档格式的操作,如Word、Excel、PDF等项目地址:https://gitcode.com/open-source-toolkit/56c82项目介绍在现代企业
使用Python操作Excel,删重复数据及keep参数用法并保存的例子
白帽黑客艾登
python excel 开发语言 Python编程 Python学习 技能分享
01Ex按列标题删重复的数据解析:我们使用了pandas库读取Excel文件,并使用drop_duplicates()函数删除重复数据。其中,subset参数指定了删除重复数据的列(列名),keep参数指定了保留哪个重复记录(默认为第一个记录)。inplace=True参数表示在原始数据上进行操作。最后,我们使用to_excel()函数将处理后的数据,保存到一个新的Excel文件中,其中index
批量二维码生成器 v3.2.0:绿色便携,WIFI 码 / Excel 导入够实用
潇洒飘逸的阿楠
经验分享
做活动时总被二维码绊住:要给50个参会者做专属码,在线工具怕信息存云端,手动一个个生成,改备注格式能错三次——试了这个v3.2.0绿色版,发现批量处理时藏着几个顺手的细节。下载地址:夸克网盘分享备用地址:迅雷云盘输家里的WIFI名和密码,生成的码客人扫一下就连上,不用再扯着嗓子喊“密码是小写字母加数字”;上周帮咖啡店做,把码印在杯套上,熟客说比问店员省事。把客户姓名和编号填进表格,批量生成后,备注
百旺金赋航天金税发票清单接口软件使用指南
本文还有配套的精品资源,点击获取简介:《百旺金赋航天金税发票清单接口软件详解与核心组件解析》详细介绍了该软件的便捷性和功能,它能将Excel销售清单转换成XML格式,简化发票开具流程。该软件通过动态链接库(DLL)文件实现高效数据转换,并支持与金税系统的对接,提升企业财务效率并确保数据安全性。1.百旺金赋航天金税发票清单接口软件概述软件应用背景百旺金赋航天金税发票清单接口软件作为一种财务信息化工具
Python操作excel,工作效率提高篇_python对xlsx文档进行操作怎么提速
2401_84266286
程序员 python excel 网络
上面的代码是对工作簿最基本的操作,新建工作簿和保存工作簿,还有关闭当前工作簿。importosfile_path='table'file_list=os.listdir(file_path)foriinfile_list:print(i)列出文件夹下所有文件和子文件夹的名称,这是方便总结和查看文件的。importxlwingsasxwapp=xw.App(visible=False,add_boo
day12-逻辑函数(IF、And、Or)
鱼和熊掌兼得
今天想来说说我的学习收获,以下为一些心得和感悟。时间过的很快,目前已经完成了一半的打卡,回头想想,由一开始的觉得很容易呀,到现在觉得有些吃力。短短10几天的时间,我觉得自己的收获很大。越是将课程学习下去,越能体会储君老师说的那句话,越是碎片化时代,越需要系统性学习。因为,在以前我的Excel学习是非常的零散,基本上是需要用的时候,就从网上学习一点,导致我什么都知道皮毛,但是没有系统性的了解。这是第
2025年云服务器怎么选?云服务器性价比指南
telunxiaosu1
服务器 运维 阿里云 华为云 京东云
写作初衷:作为一个购买多年云服务器经历的爱好者,最喜欢看各厂商的优惠活动,反复比较各厂商的优惠,找到最具性价比的那一款。我就像一个互联网的猹,在京东云、阿里云、腾讯云的官网里反复对比、反复横跳,但不得不说,这个过程还是比较累的,尤其是网上的众多活动叠加,新客专享,生怕自己被背刺。所以,写下这篇文章,制成excel汇总表,供大家参考,包括了京东云、阿里云、腾讯云、华为云4大厂商(别的小厂怕跑路hhh
Hutool Java工具类库-ExcelUtil
〃冷·夏ぐ
Hutool java excel
目录依赖:ExcelReader(Excel读取):1.从文件中读取Excel为ExcelReader2.从流中读取Excel为ExcelReader3.读取指定的sheet4.读取Excel中所有行和列,都用列表表示5.读取为Map列表,默认第一行为标题行,Map中的key为标题,value为标题对应的单元格值6.读取为Bean列表,Bean中的字段名为标题,字段值为标题对应的单元格值Excel
影刀RPA_批量添加用户至企业微信_源码解读
RPA+AI十二工作室
影刀 python 开发语言 影刀 rpa 企业微信 自动化
一、项目简介本项目是一个基于影刀RPA(RoboticProcessAutomation)开发的自动化工具,主要功能是通过手机号码批量添加用户至企业微信。项目利用企业微信客户端自动化操作,实现了从手机号导入、去重处理到批量发送好友请求的全流程自动化。项目特点:支持通过数据表格或Excel导入手机号自动去重和格式清洗企业微信窗口自动化控制操作结果分类统计与导出二、项目结构xbot_robot/├──
年月日_怎样在excel日期表格中提取年月日等信息?
weixin_39566882
年月日
“hello小伙伴们大家好,我是归一。本节内容我将继续给大家介绍ExcelPowerQuery数据处理实用的18种方法中的第11招——提取日期信息。下面,我们开始今天的学习吧~”#表格制作excel##在家办公日记##在家办公日记#01业务问题:如何提取日期中的年月日和季度?下面,我们来看这样一个问题:现有一张销售数据表,其中有一个订单日期字段,由于我们想要查看每个月、每个季度的销售情况,所以还需
Excel身份证里提取出生年月日
狼头龙
excel
Excel身份证里提取出生年月日如果身份证号码在A2单元格,出生年月日要在C2中显示,那么C2中写入一下代码:=TEXT(MID(A2,7,8),“0000年00月00日”)其中A2为身份证号所在的单元格。
Excel根据身份证号提取信息
念念不忘 必有回响
excel学习 excel
概览本篇文章主要对根据身份证号码提取出生年月日、年龄、性别、退休年龄这三项进行讲解。一.提取出生年月日公式:=TEXT(MID(B2,7,8),“0000-00-00”)MID(B2,7,8):表示从单元格B2中的字符串(这里是身份证号),从第7个字符开始,提取长度为8个字符的子串。通常这8个字符就是包含出生年月日的信息;TEXT(…,“0000-00-00”):使用TEXT函数将提取出来的出生年
EXCEL——提取身份证中的出生年月日
William.csj
# EXCEL excel
1.用到的函数: TEXT MID2.函数语法:TEXT: 语法格式:TEXT(value,format_text) 其中,value为数字值。format_text为设置单元格格式中自己所要选用的文本格式。MID: 函数的语法格式:MID(text,start_num,num_chars) 其中,text为字符串,start_num为开始截取位置,num_chars为截取字符个数。3
提取excel中的年月日
在Excel中提取出生日期,可以通过公式将年龄描述转换为时间差,再用当前日期减去时间差。以下是分步解决方案:步骤1:准备辅助列(提取年、月、日)假设年龄数据在A列(A2开始),在B、C、D列分别提取年/月/日:列公式B2(年)=IFERROR(IF(FIND("岁",A2),--LEFT(A2,FIND("岁",A2)-1),0),0)C2(月)=IFERROR(IF(FIND("个月",A2),
RAGFlow 框架调研报告
it_czz
架构
RAGFlow框架调研报告1.概述RAGFlow是一个开源的检索增强生成(RAG)框架,专注于深度文档理解和高精度检索。它通过先进的文档解析能力和可视化调试功能,为企业提供了一个强大的知识库问答解决方案。1.1核心特性深度文档处理:内置DeepDoc引擎,支持复杂文档解析高精度检索:提供可视化分块和引用追踪多模态支持:支持文本、图片、PDF、Excel等多种格式开源自托管:完全开源,支持私有化部署
Excel 面试 05 查找函数组合 INDEX-MATCH
练习两年半的工程师
Excel excel
Excel的INDEX-MATCH是一种强大的函数组合,用于查找和返回表格中的值。相比于传统的VLOOKUP或HLOOKUP,它更灵活且高效,尤其在需要双向查找或处理动态列时表现出色。INDEX-MATCH基本原理INDEX函数:返回数组中指定位置的值。语法:INDEX(array,row_num,[column_num])array:要从中取值的范围或数组。row_num:指定返回值的行号。co
离线环境下如何优雅地部署 Mentor Questa
CFAteam
EDA工具安装指南 EDA 服务器 运维 fpga开发
MentorQuesta(前称ModelSimSE)是SiemensEDA旗下的重要数字仿真平台,被广泛用于ASIC和FPGA的功能验证、测试平台搭建和UVM流程开发。相比SynopsysVCS和CadenceXcelium,Questa更注重仿真引擎的灵活性与图形交互性。但在实际部署中,很多客户面临着“无法联网”或“内网部署”场景,如:高校教学机房受网络限制企业设计环境为内网隔离区军工科研单位需
第二周复盘
Yu頔
Yu頔第二周复盘(一)本周目标1、思维导图制作(至少四个)2、掌握每天EXCEL课程的知识3、输出(至少5篇)4、录制翻转课堂(至少2个)(二)行动1、EXCEL课程学习时间:60分钟/每天质量:熟练度较好2、思维导图制作时间:30分钟/每天质量:一般3、输出时间:完成三天质量:较差,主要是复制打卡内容4、录制翻转课堂完成两个翻转课堂的录制(三)未完成原因1、时间安排不当:主要在晚上打卡,时间紧导
【Java实例】服务器IP一站式管理
科马
java java 服务器 tcp/ip spring cloud spring boot spring
统一管理服务器IP、账户与访问权限的一站式解决方案在实际运维或开发工作中,我们常常面临以下问题:多台服务器IP分散管理,Excel记录混乱;登录账户密码分发不规范,存在泄露风险;运维人员频繁远程登录操作,缺乏统一权限审计;无法实时了解服务器运行状态和资源使用情况;登录方式不统一,甚至需要人工提供临时口令;因此,我设计并开发了一个「服务器IP地址统一管理与访问控制系统」,目标是:✅统一管理服务器资产
C# ML.NET回归模型:用代码预测未来的“魔法”!
墨夶
C#学习资料 c# .net 回归
**预测未来?不,是让数据替你说话!**想象一下:你坐在办公室里,老板突然问:“下个月的销售额能到多少?”你盯着Excel表格,头大如斗,公式写了一行又一行,结果还是不准!客户问:“我们产品价格怎么定最合适?”你却只能靠“感觉”回答!ML.NET回归模型就是你的“神兵利器”!它能:✅预测数值型目标:销售额、房价、车费……统统拿下!✅自动调优模型:不用手动调参,AI帮你选最优方案!✅无缝集成C#:不
使用exceljs导出luckysheet表格 纯前端 支持离线使用
一.技术exceljs,luckysheet二.实现参考网上博文exceljs对导出lucksheet表格的实现,发现存在一些问题并给予修复:1.字体颜色、字号,加粗等适配的问题.2.单元格对齐方式不生效;3.单元格边框无法绘制;4.单元格边框颜色及线型错乱;5.单元格列宽处理;6.合并单元格导出错乱;7.其他的一些BUG三.注意事项1、由于luckysheet在网页端和excel分辨率无法保持完
Excel——重复值处理
识别重复行的三种方法方法1:COUNTIF公式法在E2单元格输入公式:=COUNTIF($B$2:$B2,B2)>1下拉填充至所有数据行结果为TRUE的即为重复行(会标出第二次及以后出现的重复项)方法2:排序+IF公式法按商机号排序(数据→排序)在E2输入:=IF(B2=B1,"重复","")下拉填充,标记"重复"的即为重复行方法3:数据透视表法选择数据区域→插入→数据透视表将"商机号"拖到行区域
[ Pyqt连接数据库/excel ] : 在Pyqt中使用python连接数据库+excel读写并导入mysql+系统登录界面+pyqt多窗口切换。
rqtz
PyQt系列 项目开发 pyqt mysql excel python 数据库
前言:首先本文是自己的智能车系统项目的第三篇文章,换句话说,本文是基于前两篇文章的一个拓展,前两篇文章连接:一:智能车上位机系统,pyqt下的socket通信,python实现服务器+客户端,文本+视频不定长字节传输,超详细,小白都能看懂_pyqtsocket上位机显示波形-CSDN博客二:PyQt5使用matplotlib画图,并嵌入qt控件中,涉及使用消息队列与共享内存来进行进程间通信或线程间
python小工具合集
Aronup
python excel 开发语言
小工具合集1.python切分excel2.python检查excel输出每列最大长度[目录下所有文件or目录下每个文件]1.python切分excel"""@Project:pythonProject@File:splitFile.py@IDE:PyCharm@Author:alice@Date:2025/3/2113:48"""importpandasaspdimportosdefsplit_
如何在Excel中进行数据透视表的刷新和自动刷新
Excel客旅
1.创建完数据透视表后,如果原始数据有更新,数据透视表也要进行相应的刷新,这样才能保证数据分析的及时性和有效性。如图根据此原始数据已创建好其数据透视表。2.当原始数据有变动,比如学生B2的英语成绩给错了,需要改成65,但是数据透视表里的数据不会自动更新。3.点击数据透视表,在“数据透视表工具”下的“分析”找到“刷新”,点击一下,就可以更新数据了。4.为了防止在更新数据源而忘记及时刷新数据透视表的情
SpringBoot整合Fastexcel/EasyExcel导出Excel导出单个图片
java初学者分享
excel
整个工具的代码都在Gitee或者Github地址内gitee:solomon-parent:这个项目主要是总结了工作上遇到的问题以及学习一些框架用于整合例如:rabbitMq、reids、Mqtt、S3协议的文件服务器、mongodb、xxl-job、powerjob还有用Dockercompose部署各类中间组件。如果大家有什么想要弄成通用组件的,可以给我留言,我可以研究下github:http
SAP全自动化工具开发:Excel自动上传与邮件通知系统
pk_xz123456
python 自动化 excel 运维 分类 深度学习 人工智能 windows
SAP全自动化工具开发:Excel自动上传与邮件通知系统前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家,觉得好请收藏。点击跳转到网站。1.项目概述在现代企业资源规划(ERP)系统中,SAP作为行业领先的解决方案,其自动化处理能力对企业运营效率至关重要。本文将详细介绍如何使用Python开发一个全自动化工具,实现Excel数据自动上传至SAP系统,并在操作完成后发送
Java实现的简单双向Map,支持重复Value
superlxw1234
java 双向map
关键字:Java双向Map、DualHashBidiMap
有个需求,需要根据即时修改Map结构中的Value值,比如,将Map中所有value=V1的记录改成value=V2,key保持不变。
数据量比较大,遍历Map性能太差,这就需要根据Value先找到Key,然后去修改。
即:既要根据Key找Value,又要根据Value
PL/SQL触发器基础及例子
百合不是茶
oracle数据库 触发器 PL/SQL编程
触发器的简介;
触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行。因此触发器不需要人为的去调用,也不能调用。触发器和过程函数类似 过程函数必须要调用,
一个表中最多只能有12个触发器类型的,触发器和过程函数相似 触发器不需要调用直接执行,
触发时间:指明触发器何时执行,该值可取:
before:表示在数据库动作之前触发
[时空与探索]穿越时空的一些问题
comsci
问题
我们还没有进行过任何数学形式上的证明,仅仅是一个猜想.....
这个猜想就是; 任何有质量的物体(哪怕只有一微克)都不可能穿越时空,该物体强行穿越时空的时候,物体的质量会与时空粒子产生反应,物体会变成暗物质,也就是说,任何物体穿越时空会变成暗物质..(暗物质就我的理
easy ui datagrid上移下移一行
商人shang
js 上移下移 easyui datagrid
/**
* 向上移动一行
*
* @param dg
* @param row
*/
function moveupRow(dg, row) {
var datagrid = $(dg);
var index = datagrid.datagrid("getRowIndex", row);
if (isFirstRow(dg, row)) {
Java反射
oloz
反射
本人菜鸟,今天恰好有时间,写写博客,总结复习一下java反射方面的知识,欢迎大家探讨交流学习指教
首先看看java中的Class
package demo;
public class ClassTest {
/*先了解java中的Class*/
public static void main(String[] args) {
//任何一个类都
springMVC 使用JSR-303 Validation验证
杨白白
spring mvc
JSR-303是一个数据验证的规范,但是spring并没有对其进行实现,Hibernate Validator是实现了这一规范的,通过此这个实现来讲SpringMVC对JSR-303的支持。
JSR-303的校验是基于注解的,首先要把这些注解标记在需要验证的实体类的属性上或是其对应的get方法上。
登录需要验证类
public class Login {
@NotEmpty
log4j
香水浓
log4j
log4j.rootCategory=DEBUG, STDOUT, DAILYFILE, HTML, DATABASE
#log4j.rootCategory=DEBUG, STDOUT, DAILYFILE, ROLLINGFILE, HTML
#console
log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
log4
使用ajax和history.pushState无刷新改变页面URL
agevs
jquery 框架 Ajax html5 chrome
表现
如果你使用chrome或者firefox等浏览器访问本博客、github.com、plus.google.com等网站时,细心的你会发现页面之间的点击是通过ajax异步请求的,同时页面的URL发生了了改变。并且能够很好的支持浏览器前进和后退。
是什么有这么强大的功能呢?
HTML5里引用了新的API,history.pushState和history.replaceState,就是通过
centos中文乱码
AILIKES
centos OS ssh
一、CentOS系统访问 g.cn ,发现中文乱码。
于是用以前的方式:yum -y install fonts-chinese
CentOS系统安装后,还是不能显示中文字体。我使用 gedit 编辑源码,其中文注释也为乱码。
后来,终于找到以下方法可以解决,需要两个中文支持的包:
fonts-chinese-3.02-12.
触发器
baalwolf
触发器
触发器(trigger):监视某种情况,并触发某种操作。
触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/before) 4.触发事件(insert/update/delete)
语法:
create trigger triggerName
after/before 
JS正则表达式的i m g
bijian1013
JavaScript 正则表达式
g:表示全局(global)模式,即模式将被应用于所有字符串,而非在发现第一个匹配项时立即停止。 i:表示不区分大小写(case-insensitive)模式,即在确定匹配项时忽略模式与字符串的大小写。 m:表示
HTML5模式和Hashbang模式
bijian1013
JavaScript AngularJS Hashbang模式 HTML5模式
我们可以用$locationProvider来配置$location服务(可以采用注入的方式,就像AngularJS中其他所有东西一样)。这里provider的两个参数很有意思,介绍如下。
html5Mode
一个布尔值,标识$location服务是否运行在HTML5模式下。
ha
[Maven学习笔记六]Maven生命周期
bit1129
maven
从mvn test的输出开始说起
当我们在user-core中执行mvn test时,执行的输出如下:
/software/devsoftware/jdk1.7.0_55/bin/java -Dmaven.home=/software/devsoftware/apache-maven-3.2.1 -Dclassworlds.conf=/software/devs
【Hadoop七】基于Yarn的Hadoop Map Reduce容错
bit1129
hadoop
运行于Yarn的Map Reduce作业,可能发生失败的点包括
Task Failure
Application Master Failure
Node Manager Failure
Resource Manager Failure
1. Task Failure
任务执行过程中产生的异常和JVM的意外终止会汇报给Application Master。僵死的任务也会被A
记一次数据推送的异常解决端口解决
ronin47
记一次数据推送的异常解决
需求:从db获取数据然后推送到B
程序开发完成,上jboss,刚开始报了很多错,逐一解决,可最后显示连接不到数据库。机房的同事说可以ping 通。
自已画了个图,逐一排除,把linux 防火墙 和 setenforce 设置最低。
service iptables stop
巧用视错觉-UI更有趣
brotherlamp
UI ui视频 ui教程 ui自学 ui资料
我们每个人在生活中都曾感受过视错觉(optical illusion)的魅力。
视错觉现象是双眼跟我们开的一个玩笑,而我们往往还心甘情愿地接受我们看到的假象。其实不止如此,视觉错现象的背后还有一个重要的科学原理——格式塔原理。
格式塔原理解释了人们如何以视觉方式感觉物体,以及图像的结构,视角,大小等要素是如何影响我们的视觉的。
在下面这篇文章中,我们首先会简单介绍一下格式塔原理中的基本概念,
线段树-poj1177-N个矩形求边长(离散化+扫描线)
bylijinnan
数据结构 算法 线段树
package com.ljn.base;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;
/**
* POJ 1177 (线段树+离散化+扫描线),题目链接为http://poj.org/problem?id=1177
HTTP协议详解
chicony
http协议
引言
Scala设计模式
chenchao051
设计模式 scala
Scala设计模式
我的话: 在国外网站上看到一篇文章,里面详细描述了很多设计模式,并且用Java及Scala两种语言描述,清晰的让我们看到各种常规的设计模式,在Scala中是如何在语言特性层面直接支持的。基于文章很nice,我利用今天的空闲时间将其翻译,希望大家能一起学习,讨论。翻译
安装mysql
daizj
mysql 安装
安装mysql
(1)删除linux上已经安装的mysql相关库信息。rpm -e xxxxxxx --nodeps (强制删除)
执行命令rpm -qa |grep mysql 检查是否删除干净
(2)执行命令 rpm -i MySQL-server-5.5.31-2.el
HTTP状态码大全
dcj3sjt126com
http状态码
完整的 HTTP 1.1规范说明书来自于RFC 2616,你可以在http://www.talentdigger.cn/home/link.php?url=d3d3LnJmYy1lZGl0b3Iub3JnLw%3D%3D在线查阅。HTTP 1.1的状态码被标记为新特性,因为许多浏览器只支持 HTTP 1.0。你应只把状态码发送给支持 HTTP 1.1的客户端,支持协议版本可以通过调用request
asihttprequest上传图片
dcj3sjt126com
ASIHTTPRequest
NSURL *url =@"yourURL";
ASIFormDataRequest*currentRequest =[ASIFormDataRequest requestWithURL:url];
[currentRequest setPostFormat:ASIMultipartFormDataPostFormat];[currentRequest se
C语言中,关键字static的作用
e200702084
C++ c C#
在C语言中,关键字static有三个明显的作用:
1)在函数体,局部的static变量。生存期为程序的整个生命周期,(它存活多长时间);作用域却在函数体内(它在什么地方能被访问(空间))。
一个被声明为静态的变量在这一函数被调用过程中维持其值不变。因为它分配在静态存储区,函数调用结束后并不释放单元,但是在其它的作用域的无法访问。当再次调用这个函数时,这个局部的静态变量还存活,而且用在它的访
win7/8使用curl
geeksun
win7
1. WIN7/8下要使用curl,需要下载curl-7.20.0-win64-ssl-sspi.zip和Win64OpenSSL_Light-1_0_2d.exe。 下载地址:
http://curl.haxx.se/download.html 请选择不带SSL的版本,否则还需要安装SSL的支持包 2. 可以给Windows增加c
Creating a Shared Repository; Users Sharing The Repository
hongtoushizi
git
转载自:
http://www.gitguys.com/topics/creating-a-shared-repository-users-sharing-the-repository/ Commands discussed in this section:
git init –bare
git clone
git remote
git pull
git p
Java实现字符串反转的8种或9种方法
Josh_Persistence
异或反转 递归反转 二分交换反转 java字符串反转 栈反转
注:对于第7种使用异或的方式来实现字符串的反转,如果不太看得明白的,可以参照另一篇博客:
http://josh-persistence.iteye.com/blog/2205768
/**
*
*/
package com.wsheng.aggregator.algorithm.string;
import java.util.Stack;
/**
代码实现任意容量倒水问题
home198979
PHP 算法 倒水
形象化设计模式实战 HELLO!架构 redis命令源码解析
倒水问题:有两个杯子,一个A升,一个B升,水有无限多,现要求利用这两杯子装C
Druid datasource
zhb8015
druid
推荐大家使用数据库连接池 DruidDataSource. http://code.alibabatech.com/wiki/display/Druid/DruidDataSource DruidDataSource经过阿里巴巴数百个应用一年多生产环境运行验证,稳定可靠。 它最重要的特点是:监控、扩展和性能。 下载和Maven配置看这里: http
两种启动监听器ApplicationListener和ServletContextListener
spjich
java spring 框架
引言:有时候需要在项目初始化的时候进行一系列工作,比如初始化一个线程池,初始化配置文件,初始化缓存等等,这时候就需要用到启动监听器,下面分别介绍一下两种常用的项目启动监听器
ServletContextListener
特点: 依赖于sevlet容器,需要配置web.xml
使用方法:
public class StartListener implements
JavaScript Rounding Methods of the Math object
何不笑
JavaScript Math
The next group of methods has to do with rounding decimal values into integers. Three methods — Math.ceil(), Math.floor(), and Math.round() — handle rounding in differen