「这是我参与2022首次更文挑战的第15天,活动详情查看:2022首次更文挑战」
你好,我是看山。
前文 聊了 EasyExcel 的内容导出,本文主要说一下导出文件的格式化,格式化包括工作表/单接口crc错误计数元格样式和内容apple苹果官网格式化。毕竟,有时候还是要看脸。
内容比较多,文内只会列出关键代码,想要完整源码,可以关注公号「看山的小屋」回复“easy接口是什么excel”获取。
注解格式
通过注java培训沟通解定义格式是 EasyExAPPceljava语言 封装的高级功能,可沟通以让我们很方便的定java环境变量配置义格式。
格式化内容
先定义一嵌套查询sql语句嵌套函数个使用注解格式化内容的实体类:
@Data
publicclassFormatContentItem{
@ExcelProperty(value="字符串标题",converter=TitleFormatConverter.class)
privateStringstring;
@DateTimeFormat("yyyy年MM月dd日HH时mm分ss秒")
@ExcelProperty(value="日期标题")
privateDatedate;
@NumberFormat("0.000%")
@ExcelProperty("数字标题")
privateDoubledoubleData;
}
其中DateTimeFor沟通技巧和方法mat
和NumberFormat
两个注解都是自带的注解,用于格式化时间和apple苹果官网数字。
DateTimeFormat
注解有两个属性,一个属性是va沟通100lue
,用来定义时间格式,可以参考j沟通技巧和方法av嵌套查询sql语句a.text.SimpleDateFormat
;另一个属性是use19沟通的重要性心得体会04windowing
,表示使用时间使用 1904 时间系统还嵌套分类汇总怎么做是 1900 时接口卡间系统,默认是否。
NumberFormat
注解有两个属性,一个属性是value
,用来定义数字格式,嵌套是什么意思可以参考java.text.Deci嵌套malFormat
;另一个属性是roundingMo沟通作文de
,用来定义保留小数的方式,使java编译器用沟通能力的是java.math.RoundingMode
枚举嵌套原理。
想要apple格式化字符串,可以借助ExcelProperty
的 converter 属性,这个属性传入实现Converter
的类。比如示例中的Tijava编译器tleFormatConverter
,代码如下:
publicclassTitleFormatConverterimplementsConverter<String>{
@Override
publicClass<?>supportJavaTypeKey(){
returnString.class;
}
@Override
publicCellDataTypeEnumsupportExcelTypeKey(){
returnCellDataTypeEnum.STRING;
}
@Override
publicWriteCellData<?>convertToExcelData(Stringvalue,ExcelContentPropertycontentProperty,
GlobalConfigurationglobalConfiguration){
returnnewWriteCellData<>(String.format("标题:%s(自定义)",value));
}
}
结果沟通技巧和方法为:
定义行高、列java环境变量配置宽
使用注解定义行高的话,可以使用HeadRowHeight
定义表头高度,使用java语言ContentRowHeight
定义接口卡表体approach高度,这个注解定义之后,所有表体高度都是相同的。列宽可以使用ColumnWidth
注解定义,这个注解可以定义在Java类上,java环境变量配置表示整个表格的列都一样沟通技巧和接口和抽象类的区别方法宽,也可以定义的属性上,表示指定列的宽度java面试题。
@Data
@HeadRowHeight(20)
@ContentRowHeight(10)
@ColumnWidth(25)
publicclassFormatCellItem{
@ExcelProperty("字符串标题")
privateStringstring;
@ExcelProperty("日期标题")
privateDatedate;
@ColumnWidth(50)
@ExcelProperty("数字标题")
privateDoubledoubleData;
}
结果为:
单元格定义样式
控制单元格样式有四个注解appear:HeadStyle
、HeadFontStyle
、ContentStyle
、Content接口crc错误计数FontStyle
,这四个注解可以定义在类上java模拟器作approach为全局表格的沟通100样式,也可以定嵌套原理有哪些实例义在字段上,作为当前列的样式。apple下面APP分别说一下这几个注解中比较常用的配置。
- *Style:分为
HeadStyleJava
和ContentStyle
,分别定义表头和表体样嵌套是什么意思式- dataFormat:表头格式化,short 格式,是
org.apache.poi.ss.usermodel.Builti嵌套nFormats
类中已定义格式的小嵌套函数怎么操作标 - border*:沟通的重要性的名言分别是 borderLeft、borderRight嵌套查询、borderTop、borderBottom 四个属java模拟器性,类型是
com.a接口和抽象类沟通100的区别libaba.嵌套是什appear么意思excel.enums.poi.BorderStyleEnum
枚举,用接口appstore来定义表头单元格边沟沟通能力通技巧和方法框样式。边沟通的重要性心得体会框的颜色也可以定义,使用、*BorderColor 定义即可。 - fillPatternType:填充类型apple,类javaee型是
com.java培训alibaba.excelappstore.enappleumjava怎么读s.p沟通oi.FillPatternTypeEnum
枚举接口的作用,如果想要接口文档填充背景色,这个属性需要设置为SOLID_FOREGROUND
。 - fillForegro沟通技巧undColor:沟通的重要性的名言前景色,类型是 short,值却是使用javascript的
org.apache.poi.ss.usermodel.IndexedColors
枚举的 idx 值,只不过,两接口英文个类型不一致,一个是 short,一个是 int,没有办法直接引用。可见 java 中的依赖之间,还是有很多坑的。 - fillBackgroundColor:背接口的作用景色,同
fillForegroundColor
。 - rotat接口文档ion:内容旋转角度
- dataFormat:表头格式化,short 格式,是
- *FontStyle:有
HeadFontStyle
和Cont接口英文entFontStyle
,分别定嵌套if函数义表头和表体的java模拟器字体样式。- fontName:定义字体名jaappearva培训称,类型字符串
- fontH沟通技巧eightInPoiapproachnts:字号大小,类型是 short
- italic:是接口卡否斜体沟通的重要性的名言,类型是
com.alibaba.excel.enums.Boolean接口Enum
- bold:接口测试是否加粗,类型是
com.alibaba.excel.沟通100enums.BooleanEnum
- strikeout:嵌套分类汇总怎么做是否使用沟通的重要性的名言删除线(这个词本意是三振出局的意思,应该是与棒球有关)
- color:文接口文档本颜色,值使用的是
org沟通的重要性.apache.poi.ss.usermodel.IndexedCol嵌套原理有哪些实例ors
,依然有类型接口文档不一java面试题致的情况 - underline:下划线,类型是 byte,可以直接使用
Font.U接口卡_NONE
、Font.U_SINappstoreGLE
、Font.U_DOUBLE
、Font.U_SINGLE_ACCOUNTING
、Font.U_D嵌套OUBLE_ACCOUNTING
。
我们可以这么定义:
@Data
//头背景设置成红色IndexedColors.RED.getIndex()
@HeadStyle(fillPatternType=FillPatternTypeEnum.SOLID_FOREGROUND,fillForegroundColor=10)
//头字体设置成20
@HeadFontStyle(fontHeightInPoints=20)
//内容的背景设置成绿色IndexedColors.GREEN.getIndex()
@ContentStyle(fillPatternType=FillPatternTypeEnum.SOLID_FOREGROUND,fillForegroundColor=17)
//内容字体设置成20
@ContentFontStyle(fontHeightInPoints=20)
publicclassFormatStyleCellItem{
//字符串的头背景设置成粉红IndexedColors.PINK.getIndex()
@HeadStyle(fillPatternType=FillPatternTypeEnum.SOLID_FOREGROUND,fillForegroundColor=14)
//字符串的头字体设置成20
@HeadFontStyle(fontHeightInPoints=30)
//字符串的内容的背景设置成天蓝IndexedColors.SKY_BLUE.getIndex()
@ContentStyle(fillPatternType=FillPatternTypeEnum.SOLID_FOREGROUND,fillForegroundColor=40)
//字符串的内容字体设置成20
@ContentFontStyle(fontHeightInPoints=30)
@ExcelProperty("字符串标题")
privateStringstring;
@ExcelProperty("日期标题")
privateDatedate;
@ExcelProperty("数字标题")
privateDoubledoubleData;
}
结接口测试果为:
类对象沟通定义格式
这种方式可以说是纯手工组装数据了,使用的是com.alibaba.excel.metadata.dajavaeeta.WriteCellD接口和抽象类的区别ata
类,这个类相当于是单元格的接口测试定义,通过设置com.alibaba.java怎么读ejava环境变量配置xce接口文档l.enums.CellDataTypeEnum
枚举类型的 type 属性,可以指明当前单元格格式。
守恒定沟通律一沟通能力直存在。这种方式灵活度很高,可以精细到具体的单元格格式,但是繁琐接口英文程沟通的艺术度也增加了。
超链接
超链接使用的是com嵌套if函数.a接口和抽象类的区别libabJavaa.excel.metadata.data.java编译器HyperlinkData
类,需要设置地址沟通100、超链类型(com.alibaba.exce沟通100l.metadata.data.HyperlinkData.HyperlinkType
枚举),然后将值写入到WriteCellData
对象的hyperlinkData
属性即可沟通100。
//设置超链接
HyperlinkDatahyperlinkData=newHyperlinkData();
hyperlinkData.setAddress("https://www.howardliu.cn");
hyperlinkData.setHyperlinkType(HyperlinkType.URL);
WriteCellData<String>hyperlink=newWriteCellData<>("网站");
hyperlink.setHyperlinkData(hyperlinkData);
备注
备注使用的是com.alibaba.excel.metadata.data.CommentData
类,需要设置作者、备APP注内容(co接口文档m.alib沟通100aba.excel.嵌套分类汇总怎么做metadata.data.RichTextStjava模拟器ringapproachData
类型),因为备注的默认大小是单元格大小,如果感觉太小,还可以设置接口相对高度和宽度。
//设置备注
CommentDatacommentData=newCommentData();
commentData.setAuthor("HowardLiu");
commentData.setRichTextStringData(newRichTextStringData("这是一个备注"));
//备注的默认大小是按照单元格的大小这里想调整到4个单元格那么大所以向后向下各额外占用了一个单元格
commentData.setRelativeLastColumnIndex(1);
commentData.setRelativeLastRowIndex(1);
WriteCellData<String>comment=newWriteCellData<>("备注的单元格信息");
comment.setCommentData(commentData);
公式
公式使用沟通的艺术的是com.alibaba.exc沟通作文el.metadata.data.FormulaData
类,可以直接设嵌套函数置formulaValue
公式,不过官方不太推荐接口是什么使用嵌套函数怎么操作公式。
//设置公式
FormulaDataformulaData=newFormulaData();
//将123456789中的第一个数字替换成2
//这里只是例子如果真的涉及到公式能内存算好尽量内存算好公式能不用尽量不用
formulaData.setFormulaValue("REPLACE(123456789,1,1,2)");
WriteCellData<String>formula=newWriteCellData<>();
formula.setFormulaData(formulaData);
单元格格式
通过类定义单元格格式,与通过javaee注解定义本质是一样的。接口和抽象类的区别所以沟通的重要性与注解HeadStyle
、HeadFontStyle
、ContentStyle
、Cjava面试题o接口自动化ntentFontStyle
对应,设置单元格格式的类是WriteCeappointmentllStyle
,设置字体的类是WriteFont
。其中这些类的属性与注解的也是jajava面试题vaee类似,不app小胖子再赘述太多,直接上例子。(其实我觉得使用类定义格式的场景不多嵌套查询,真的碰到了,看看类定义就沟通技嵌套原理有哪些实例巧明白了)
//设置单个单元格的样式当然样式很多的话也可以用注解等方式。
WriteCellStylewriteCellStyleData=newWriteCellStyle();
//这里需要指定 FillPatternType 为 FillPatternType.SOLID_FOREGROUND 不然无法显示背景颜色。
writeCellStyleData.setFillPatternType(FillPatternType.SOLID_FOREGROUND);
//背景绿色
writeCellStyleData.setFillForegroundColor(IndexedColors.GREEN.getIndex());
WriteCellData<String>writeCellStyle=newWriteCellData<>("单元格样式");
writeCellStyle.setWriteCellStyle(writeCellStyleData);
writeCellStyle.setType(CellDataTypeEnum.STRING);
//设置单个单元格多种样式
RichTextStringDatarichTextStringData=newRichTextStringData();
richTextStringData.setTextString("红色绿色默认");
//前2个字红色
WriteFontwriteFont=newWriteFont();
writeFont.setColor(IndexedColors.RED.getIndex());
richTextStringData.applyFont(0,2,writeFont);
//接下来2个字绿色
writeFont=newWriteFont();
writeFont.setColor(IndexedColors.GREEN.getIndex());
richTextStringData.applyFont(2,4,writeFont);
WriteCellData<String>richTest=newWriteCellData<>();
richTest.setType(CellDataTypeEnum.RICH_TEXT_STRING);
richTest.setRichTextStringDataValue(richTextStringData);
结果为:
拦截器定义格式
除了直接使用类定义格式,我们还可以借助拦截器实现。(这里在名称上会有一些歧义,所用的类对象命名都是 xxxStrategy,翻译嵌套函数过来就是 xxx 策略,但是官方对其命名为拦截器)
已有拦截器
前java环境变量配置面示例中使用WriteCellStyle
、WriteFont
可以实现单元格的样式,如果想要实现整行数据都是相同的格沟通的重要性心得体会式,可以借助com.alibaba.excel.write.嵌套循环style.HorizontalCellStyleStrategy
拦截器。
/**
*使用已有策略实现自定义样式
*
*<ul>
*<li>HorizontalCellStyleStrategy每一行的样式都一样或者隔行一样</li>
*<li>AbstractVerticalCellStyleStrategy每一列的样式都一样需要自己回调每一页</li>
*</ul>
*/
privatestaticvoidwriteByCellStyleStrategy(){
StringfileName=defaultFileName("writeByCellStyleStrategy");
//表头策略
WriteCellStyleheadWriteCellStyle=newWriteCellStyle();
//背景设置为红色
headWriteCellStyle.setFillForegroundColor(IndexedColors.RED.getIndex());
WriteFontheadWriteFont=newWriteFont();
headWriteFont.setFontHeightInPoints((short)40);
headWriteCellStyle.setWriteFont(headWriteFont);
//表体策略
WriteCellStylecontentWriteCellStyle=newWriteCellStyle();
//这里需要指定 FillPatternType 为 FillPatternType.SOLID_FOREGROUND 不然无法显示背景颜色。表头默认了 FillPatternType 所以可以不指定
contentWriteCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);
//背景绿色
contentWriteCellStyle.setFillForegroundColor(IndexedColors.GREEN.getIndex());
WriteFontcontentWriteFont=newWriteFont();
//字体大小
contentWriteFont.setFontHeightInPoints((short)20);
contentWriteCellStyle.setWriteFont(contentWriteFont);
//这个策略是头是头的样式内容是内容的样式其他的策略可以自己实现
HorizontalCellStyleStrategyhorizontalCellStyleStrategy=
newHorizontalCellStyleStrategy(headWriteCellStyle,contentWriteCellStyle);
//这里需要指定写用哪个class去写,然后写到第一个sheet,名字为模板然后文件流会自动关闭
EasyExcelFactory.write(fileName)
.head(Item.class)
.registerWriteHandler(horizontalCellStyleStrategy)
.sheet()
.doWrite(sampleItems());
}
结果为:
正如上面的结果,如果我们某个单application元格数据比较长,可能会有遮挡,这个时候我们可以使用com.a嵌套原理有哪些实例libab接口crc错误计数a.excel.write.style.column.接口文档LAPPongestMatchColumnWidthS嵌套if函数tyleStrate接口crc错误计数gy
实现自appreciate动列宽调整。不过这个不太精确,沟通作文但聊胜于无。
privatestaticvoidwriteUseLongestMatchColumnWidthStyleStrategy(){
StringfileName=defaultFileName("writeUseLongestMatchColumnWidthStyleStrategy");
EasyExcelFactory.write(fileName)
.head(Item.class)
.registerWriteHandler(newLongestMatchColumnWidthStyleStrategy())
.sheet()
.doWrite(sampleItems());
}
结果为:
可以看到沟通技巧,确实不够精确。
自定义拦截器
上面展示的拦截器,都是接口文档实现了com.alibaba.ex沟通的重要性的名言cel.wr沟通能力ite.handler.WriteHand接口crc错误计数ler
接口,然后使用com.alibab接口a.excel.write.builder.AbstractExcelWriterPappearancearameterBuilder.registerWriteHandler
方法注册到写函数中。所以,我们也可能根据需要,自己定义沟通的重要性需要的拦截器。
这java编译器种自定接口类型义拦嵌套分类沟通能力汇总怎么做截器属于低级功能,需要了解很嵌套分类汇总怎么做多底嵌套原理有哪些实例层设计和 A接口自动化PI,鉴于篇幅,本文没有办法覆盖沟通能力,这里只给出例子appearance。如java模拟器果有需要,可以留言沟通。
比如,我们需要某些单元格沟通的重要性心得体会设java培训置数据验证,展现形式就是沟通的重要性下拉菜单,我们可以这样写:java语言
publicclassColumnValidationWriteHandlerimplementsSheetWriteHandler{
@Override
publicvoidafterSheetCreate(SheetWriteHandlerContextcontext){
//区间设置第一列第一行和第二行的数据。由于第一行是头,所以第一、二行的数据实际上是第二三行
CellRangeAddressListcellRangeAddressList=newCellRangeAddressList(1,2,0,0);
DataValidationHelperhelper=context.getWriteSheetHolder().getSheet().getDataValidationHelper();
DataValidationConstraintconstraint=helper.createExplicitListConstraint(newString[]{"测试1","测试2"});
DataValidationdataValidation=helper.createValidation(constraint,cellRangeAddressList);
context.getWriteSheetHolder().getSheet().addValidationData(dataValidation);
}
}
如果我们需要将某个Java单元格的格式设置为超链appreciate,也可以使用拦截器:
publicclassCellStyleWriteHandlerimplementsCellWriteHandler{
@Override
publicvoidafterCellDispose(CellWriteHandlerContextcontext){
Cellcell=context.getCell();
//这里可以对cell进行任何操作
if(BooleanUtils.isTrue(context.getHead())&&cell.getColumnIndex()==0){
CreationHelpercreateHelper=context.getWriteSheetHolder().getSheet().getWorkbook().getCreationHelper();
Hyperlinkhyperlink=createHelper.createHyperlink(HyperlinkType.URL);
hyperlink.setAddress("https://www.howardliu.cn");
cell.setHyperlink(hyperlink);
}
}
}
结果为:
合并单元格
EasyExcel 提供的合并单元格功能比较简单,有两种方式:基于注java面试题解的沟通的艺术合并Java、基于拦截器的合并。
注解
基于注解的合并单元格提供了两个注解:
-
OnceAbsoluteMerge
注解实现指定位置的合接口文档并 -
ContentLoopMerge
这个是内容的循环合并,指定某一接口卡列每几行合并。
//将第6-7行的2-3列合并成一个单元格
@OnceAbsoluteMerge(firstRowIndex=5,lastRowIndex=6,firstColumnIndex=1,lastColumnIndex=2)
@Data
publicclassMergeCellItem{
@ContentLoopMerge(eachRow=2)
@ExcelProperty("字符串标题")
privateStringstring;
@ExcelProperty("日期标题")
privateDatedate;
@ExcelProperty("数字标题")
privateDoubledoubleData;
}
结果为java编译器:
拦截器
拦截器合并也是有两种,对应着注解:
-
OnceAbsolutAPPeMergejava环境变量配置Stra接口文档te沟通的三要素是什么gy
,相对位置合并 -
LoopMergeStrategy
循环合并
privatestaticvoidwriteMergeCellCustom(){
StringfileName=defaultFileName("writeMergeCellCustom");
//每隔2行会合并
//把 eachColumn 设置成 3 也就是我们数据的长度,所以就第一列会合并。当然其他合并策略也可以自己写
LoopMergeStrategyloopMergeStrategy=newLoopMergeStrategy(2,0);
EasyExcelFactory.write(fileName)
.head(Item.class)
.registerWriteHandler(loopMergeStrategy)
.sheet()
.doWrite(sampleItems());
}
结果为:
文末总结
本文从实战角度说了沟通的重要性心得体会一下 EasyExcel 如果实现写出好看的表嵌套是什么意思格,Easy嵌套是什么意思Excel中提供了很多用于格式化的注解、拦截沟通的重要性心得体会器,可以实现通用的格式化输出,如果还有更加个性化的格式要求,也可以自定义拦截器实现。接下来聊一下如何填充模沟通技巧板。
青山不改,绿水长流,我们下次见。
推荐阅读
- 一文掌握 Java8 Stream 中 Collectors 的 24 个操作java模拟器
- 一文掌握 Java8 的 Opt接口卡ional 的 6 种操作
- 使用 Lambda 表达式实现超强appointment的排序功嵌套分类汇总怎么做能
- Java8沟通作文 的时间库(1):介绍 Java8 中的时间类及appearance常用 API
- Java8 的时间库(2):Date 与 LocalDate 或 LocalDateTime 互相转换
- Java8 的时间库(3):开始使用 Ja沟通的重要性的名言va8 中的时间类
- Java8 的时间库(4):检查接口文档日期字符串是否合法
- Javaapp小胖子8接口 的新特性
- Java9 的新特性
- Java10 的新特性
- Java11 中基于嵌套关系的访问控制appreciate优化
- Javaapp小胖子11 的新特性
- Java12 的新特性
你好,接口自动化我是看山。游于码界,戏享人生。如果文章对您有帮助,请点赞、收藏、关注。