创意风格:用Java精细调整Excel样式的妙技揭秘

发布时间:2023/10/16 17:10 发布者:Leo

返回博客中心

前言

在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 全栈解决方案