「这是我参与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沟通技巧和方法matNumberFormat两个注解都是自带的注解,用于格式化时间和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));
}
}

结果沟通技巧和方法为:

阿里开源的这个库,让 Excel 导出不再复杂(既要能写,还要写的好看)

定义行高、列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;
}

结果为:

阿里开源的这个库,让 Excel 导出不再复杂(既要能写,还要写的好看)

单元格定义样式

控制单元格样式有四个注解appearHeadStyleHeadFontStyleContentStyleContent接口crc错误计数FontStyle,这四个注解可以定义在类上java模拟器approach为全局表格的沟通100样式,也可以定嵌套原理有哪些实例义在字段上,作为当前列的样式。apple下面APP分别说一下这几个注解中比较常用的配置。

  • *Style:分为HeadStyleJavaContentStyle,分别定义表头和表体样嵌套是什么意思
    • 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,值却是使用javascriptorg.apache.poi.ss.usermodel.IndexedColors枚举的 idx 值,只不过,两接口英文个类型不一致,一个是 short,一个是 int,没有办法直接引用。可见 java 中的依赖之间,还是有很多坑的。
    • fillBackgroundColor:背接口的作用景色,同fillForegroundColor
    • rotat接口文档ion:内容旋转角度
  • *FontStyle:有HeadFontStyleCont接口英文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接口卡_NONEFont.U_SINappstoreGLEFont.U_DOUBLEFont.U_SINGLE_ACCOUNTINGFont.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;
}

接口测试果为:

阿里开源的这个库,让 Excel 导出不再复杂(既要能写,还要写的好看)

类对象沟通定义格式

这种方式可以说是纯手工组装数据了,使用的是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注解定义本质是一样的。接口和抽象类的区别所以沟通的重要性与注解HeadStyleHeadFontStyleContentStyleCjava面试题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);

结果为:

阿里开源的这个库,让 Excel 导出不再复杂(既要能写,还要写的好看)

拦截器定义格式

除了直接使用类定义格式,我们还可以借助拦截器实现。(这里在名称上会有一些歧义,所用的类对象命名都是 xxxStrategy,翻译嵌套函数过来就是 xxx 策略,但是官方对其命名为拦截器)

已有拦截器

java环境变量配置面示例中使用WriteCellStyleWriteFont可以实现单元格的样式,如果想要实现整行数据都是相同的格沟通的重要性心得体会式,可以借助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());
}

结果为:

阿里开源的这个库,让 Excel 导出不再复杂(既要能写,还要写的好看)

正如上面的结果,如果我们某个单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());
}

结果为:

阿里开源的这个库,让 Excel 导出不再复杂(既要能写,还要写的好看)

可以看到沟通技巧,确实不够精确。

自定义拦截器

上面展示的拦截器,都是接口文档实现了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);
}
}
}

结果为:

阿里开源的这个库,让 Excel 导出不再复杂(既要能写,还要写的好看)

合并单元格

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编译器

阿里开源的这个库,让 Excel 导出不再复杂(既要能写,还要写的好看)

拦截器

拦截器合并也是有两种,对应着注解:

  • 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());
}

结果为:

阿里开源的这个库,让 Excel 导出不再复杂(既要能写,还要写的好看)

文末总结

本文从实战角度说了沟通的重要性心得体会一下 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 的新特性

你好,接口自动化我是看山。游于码界,戏享人生。如果文章对您有帮助,请点赞、收藏、关注。