前言
在Java中,操作Excel的表格样式是一项非常常见的需求。开发人员经常需要对Excel表格进行格式化,调整字体、颜色、边框等样式属性,同时还需要设置单元格的对齐方式和列宽行高等。下面是一些经常需要调整的Excel样式:
填充
实体填充
图案填充
渐变填充
线性渐变填充
矩形渐变填充
字体
边框
数值格式
对齐
保护
下面将为大家介绍如何使用Java分别实现上述的Excel样式。
1. 填充
在Java中可以使用IRange接口的getInterior方法设置单元格的填充样式。在单元内部包含三种类型:实体填充,图案填充和渐变填充。
1.1 实体填充
开发者可以通过设置 IInterior 接口的 setPattern 方法将单元格的填充样式指定为实体:
// 为 B5 添加实体填充
worksheet.getRange("B5").getInterior().setPattern(Pattern.Solid);
worksheet.getRange("B5").getInterior().setColor(Color.FromArgb(255, 0, 255));
1.2 图案填充
开发者可以使用IInterior接口的Pattern方法给单元格设置图案:
// 设置图案填充
worksheet.getRange("A1").getInterior().setPattern(Pattern.LightDown);
worksheet.getRange("A1").getInterior().setColor(Color.FromArgb(255, 0, 255));
worksheet.getRange("A1").getInterior().setPatternColorIndex(5);
1.3 渐变填充
开发者可以使用Interior接口的getGradient方法设置渐变填充单元格。
渐变填充包括线性渐变填充和矩形渐变填充。
线性渐变填充
// 设置线性填充
worksheet.getRange("A1").getInterior().setPattern(Pattern.LinearGradient);
((ILinearGradient) worksheet.getRange("A1").getInterior().getGradient()).getColorStops().get(0)
.setColor(Color.FromArgb(255, 0, 0));
((ILinearGradient) worksheet.getRange("A1").getInterior().getGradient()).getColorStops().get(1)
.setColor(Color.FromArgb(255, 255, 0));
((ILinearGradient) worksheet.getRange("A1").getInterior().getGradient()).setDegree(90);
矩形渐变填充
// 设置矩形渐变填充
worksheet.getRange("A1").getInterior().setPattern(Pattern.RectangularGradient);
((IRectangularGradient) worksheet.getRange("A1").getInterior().getGradient()).getColorStops().get(0)
.setColor(Color.FromArgb(255, 0, 0));
((IRectangularGradient) worksheet.getRange("A1").getInterior().getGradient()).getColorStops().get(1)
.setColor(Color.FromArgb(0, 255, 0));
((IRectangularGradient) worksheet.getRange("A1").getInterior().getGradient()).setBottom(0.2);
((IRectangularGradient) worksheet.getRange("A1").getInterior().getGradient()).setRight(0.3);
((IRectangularGradient) worksheet.getRange("A1").getInterior().getGradient()).setTop(0.4);
((IRectangularGradient) worksheet.getRange("A1").getInterior().getGradient()).setLeft(0.5);
2. 字体
开发者可以使用IRange接口的getFont方法来自定义工作表的字体:
// 设置字体
worksheet.getRange("A1").setValue("aaa");
worksheet.getRange("A1").getFont().setThemeColor(ThemeColor.Accent1);
worksheet.getRange("A1").getFont().setTintAndShade(-0.5);
worksheet.getRange("A1").getFont().setThemeFont(ThemeFont.Major);
worksheet.getRange("A1").getFont().setBold(true);
worksheet.getRange("A1").getFont().setSize(20);
worksheet.getRange("A1").getFont().setStrikethrough(true);
3. 边框
开发者可以使用IRange接口的getBorders方法来自定义工作表的边框:
// 设置边框
worksheet.getRange("A1:B5").getBorders().setLineStyle(BorderLineStyle.DashDot);
worksheet.getRange("A1:B5").getBorders().setThemeColor(ThemeColor.Accent1);
worksheet.getRange("A1:B5").getBorders().get(BordersIndex.EdgeRight).setLineStyle(BorderLineStyle.Double);
worksheet.getRange("A1:B5").getBorders().get(BordersIndex.EdgeRight).setThemeColor(ThemeColor.Accent2);
worksheet.getRange("A1:B5").getBorders().get(BordersIndex.DiagonalDown).setLineStyle(BorderLineStyle.Double);
worksheet.getRange("A1:B5").getBorders().get(BordersIndex.DiagonalDown).setThemeColor(ThemeColor.Accent5);
4. 数值格式
开发者可以使用IRange接口的setNumberFormat方法在工作表中设置数字格式:
// 设置数值格式
worksheet.getRange("A1").setValue(12);
worksheet.getRange("A1").setNumberFormat("$#,##0.00");
5. 对齐
开发者可以使用IRange接口的setHorizontalAlignment方法,setVerticalAlignment方法,setAddIndent方法和 setReadingOrder方法来自定义工作表的对齐方式:
// 设置对齐
worksheet.getRange("A1").setHorizontalAlignment(HorizontalAlignment.Distributed);
worksheet.getRange("A1").setAddIndent(true);
worksheet.getRange("A1").setVerticalAlignment(VerticalAlignment.Top);
worksheet.getRange("A1").setReadingOrder(ReadingOrder.RightToLeft);
6.保护
开发者可以使用IRange接口的setFormulaHidden方法和setLocked方法为工作表设置保护:
// 设置保护
worksheet.getRange("A1").setLocked(true);
worksheet.getRange("A1").setFormulaHidden(true);
将上述的所有样式放在一起,代码如下:
Workbook wb = new Workbook();
IWorksheet sheet = wb.getActiveSheet();
//实体填充
sheet.getRange("A1").getInterior().setPattern(Pattern.Solid);
sheet.getRange("A1").getInterior().setColor(Color.FromArgb(255, 0, 255));
//图案填充
sheet.getRange("A3").getInterior().setPattern(Pattern.LightDown);
sheet.getRange("A3").getInterior().setColor(Color.FromArgb(255, 0, 255));
sheet.getRange("A3").getInterior().setPatternColorIndex(5);
//线性渐变填充
sheet.getRange("A5").getInterior().setPattern(Pattern.LinearGradient);
ILinearGradient linearGradient = (ILinearGradient) sheet.getRange("A5").getInterior().getGradient();
linearGradient.getColorStops().get(0).setColor(Color.FromArgb(255, 0, 0));
linearGradient.getColorStops().get(1).setColor(Color.FromArgb(255, 255, 0));
linearGradient.setDegree(90);
//矩形渐变填充
sheet.getRange("A7").getInterior().setPattern(Pattern.RectangularGradient);
IRectangularGradient rectangularGradient = (IRectangularGradient) sheet.getRange("A7").getInterior().getGradient();
rectangularGradient.getColorStops().get(0).setColor(Color.FromArgb(255, 0, 0));
rectangularGradient.getColorStops().get(1).setColor(Color.FromArgb(0, 255, 0));
rectangularGradient.setBottom(0.2);
rectangularGradient.setRight(0.3);
rectangularGradient.setTop(0.4);
rectangularGradient.setLeft(0.5);
//字体
IRange fontRange = sheet.getRange("A9");
fontRange.setValue("font style");
IFont font = fontRange.getFont();
font.setThemeColor(ThemeColor.Accent1);
font.setTintAndShade(-0.5);
font.setThemeFont(ThemeFont.Major);
font.setBold(true);
font.setSize(20);
font.setStrikethrough(true);
//边框
IBorders border = sheet.getRange("A11:B15").getBorders();
border.setLineStyle(BorderLineStyle.DashDot);
border.setThemeColor(ThemeColor.Accent1);
border.get(BordersIndex.EdgeRight).setLineStyle(BorderLineStyle.Double);
border.get(BordersIndex.EdgeRight).setThemeColor(ThemeColor.Accent2);
border.get(BordersIndex.DiagonalDown).setLineStyle(BorderLineStyle.Double);
border.get(BordersIndex.DiagonalDown).setThemeColor(ThemeColor.Accent5);
//数值格式
sheet.getRange("A17").setValue(12);
sheet.getRange("A17").setNumberFormat("$#,##0.00");
//对齐
sheet.getRange("A19").setValue("对齐");
sheet.getRange("A19").setHorizontalAlignment(HorizontalAlignment.Distributed);
sheet.getRange("A19").setAddIndent(true);
sheet.getRange("A19").setVerticalAlignment(VerticalAlignment.Top);
sheet.getRange("A19").setReadingOrder(ReadingOrder.RightToLeft);
wb.save("output/style.xlsx");
实现效果如下图所示:
总结
以上就是在Java中修改Excel样式的方法,如果您想了解更多有关于Java的玩法和技巧,可以前往葡萄城官网了解GcExcel产品或参考这篇帮助手册,无论是初学者还是有经验的专业人士,该帮助手册都将为您提供有价值的指导和帮助。
GcExcel | 下载试用
GrapeCity Documents for Excel (简称:GcExcel)是一款基于 Java 平台的服务端高性能表格组件,可与纯前端表格控件 SpreadJS 前后端兼容,无需依赖 Office、POI 或第三方应用软件,在前端展示电子表格数据,在服务端批量创建、加载、编辑、打印、导入/导出 Excel 文档,为您开发的应用程序提供在线文档的前后端数据同步、在线填报与服务端批量导出与打印,以及类 Excel 报表模板设计与服务端高性能处理等一整套类 Excel 全栈解决方案。