当前位置: 首页 > 知识库问答 >
问题:

Apache Poi将渐变颜色应用于单元格

闾丘树
2023-03-14

共有1个答案

常雅珺
2023-03-14

始终无法使用默认的实际Apache POI版本设置渐变单元格填充。

因此,我怀疑您找到的代码是xssf(*.xlsx)的,对于您找到的代码,只是没有提到此代码需要类路径中所有模式的完整jarooxml-schemas-*.jarpoi-ooxml-full-*.jar,如FAQ-N10025所述。

下面的示例可以工作,但也需要类路径中所有模式的完整jar(如FAQ-N10025所述)。

它首先将模式填充设置设置为CellStyle,只是为了有一些填充来从中获取填充索引。然后,它获得在此CellStyle中使用的低级别CTFill。然后它取消设置模式填充,然后设置渐变填充。

要获得有关如何使用ctfill的信息,需要下载OOXML-Schemas的源代码,并执行Javadoc。没有关于OOXML-Schemas公共可用的API文档。

import java.io.FileOutputStream;

import org.apache.poi.ss.usermodel.*;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFColor;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;

import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFill;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTGradientFill;

public class CreateExcelCellGradientFillColor {

 public static void main(String[] args) throws Exception {
  XSSFWorkbook workbook = new XSSFWorkbook();

  Sheet sheet = workbook.createSheet();
  Row row = sheet.createRow(0);

  XSSFCellStyle cellstyle = workbook.createCellStyle();
  //set pattern fill settings only to have some fill to get the fill index from it
  cellstyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);

  //get fill index used in this CellStyle
  int fillidx = (int)cellstyle.getCoreXf().getFillId();

  //get the low level CTFill used in this CellStyle
  CTFill ctfill = workbook.getStylesSource().getFillAt(fillidx).getCTFill();
System.out.println(ctfill);

  //unset the pattern fill
  ctfill.unsetPatternFill();

  //now low level set the gradient fill
  byte[] rgb1 = new byte[3];
  rgb1[0] = (byte) 0; // red
  rgb1[1] = (byte) 0; // green
  rgb1[2] = (byte) 255; // blue

  byte[] rgb2 = new byte[3];
  rgb2[0] = (byte) 255; // red
  rgb2[1] = (byte) 255; // green
  rgb2[2] = (byte) 255; // blue

  CTGradientFill ctgradientfill = ctfill.addNewGradientFill();
  ctgradientfill.setDegree(90.0);
  ctgradientfill.addNewStop().setPosition(0.0);
  ctgradientfill.getStopArray(0).addNewColor().setRgb(rgb1);
  ctgradientfill.addNewStop().setPosition(0.5);
  ctgradientfill.getStopArray(1).addNewColor().setRgb(rgb2);
  ctgradientfill.addNewStop().setPosition(1.0);
  ctgradientfill.getStopArray(2).addNewColor().setRgb(rgb1);
System.out.println(ctfill);

  Cell cell = row.createCell(0);
  cell.setCellValue("");
  cell.setCellStyle(cellstyle);

  FileOutputStream out = new FileOutputStream("CreateExcelCellGradientFillColor.xlsx");
  workbook.write(out);
  out.close();
  workbook.close();
 }
}
 类似资料:
  • 我正在使用Apache POI读取零件编号电子表格中的数据。我在我们的数据库中查找零件编号,如果我们有零件的计算机辅助设计图纸,我将零件编号单元格涂成绿色,如果没有,我将其涂成红色。处理完成后,将保存电子表格。我遇到的问题是那列中的每个细胞都是绿色的。我已经完成了代码,查找零件号的逻辑工作正常,确定单元格应该是什么颜色以及设置颜色和填充的逻辑似乎也工作正常。知道我做错了什么吗? 谢谢

  • 主要内容:JavaFX渐变颜色,线性梯度(LinearGradient),径向渐变,半透明渐变,反射循环渐变JavaFX渐变颜色 可以使用径向渐变使形状看起来三维(立体)。 梯度绘制可以在两种或更多种颜色之间内插,这给出形状的深度。JavaFX提供两种类型的渐变:径向渐变()和线性渐变()。 要在JavaFX中创建渐变颜色,需要设置五个属性值。如下 - 设置开始起点的第一个停止颜色。 将终点设置为终止停止颜色。 设置属性以指定是使用标准屏幕坐标还是单位平方坐标。 将循环方法设置为使用三个枚举:,

  • 问题内容: 是否有生成器,或生成这种文本的简便方法,而无需定义 每个 字母 所以像这样: 但是不是用 彩虹 色而是用其他颜色(例如,白色到灰色/浅蓝色渐变等)生成的,我为此找不到简单的解决方案。有什么办法吗? 问题答案: 我不完全了解 Stop的 工作原理。但是我有一个 渐变文本 示例。也许这会帮到您! _您也可以根据需要为渐变添加更多颜色,或者从颜色生成器中选择其他颜色

  • 问题内容: 我知道Internet Explorer具有一些专有扩展,因此您可以执行诸如创建具有渐变背景的div之类的操作。我不记得元素名称或其用法。有没有人有一些例子或链接? 问题答案: 我用于所有浏览器渐变的代码: 您需要指定一个高度或zoom: 1将其应用于hasLayoutIE中的元素。 更新: 这是面向所有LESS用户的LESS Mixin(CSS)版本:

  • 好。。。我在这里疯了。我已经开始尝试使用 SVG。使用 SVG 并对其应用 CSS 类就像一个魅力。我只是无法弄清楚我做错了什么,但我只是无法让类在svg文本元素上工作。我已经把它一直剥离了,这就是我得到的: 根据http://www.w3.org/TR/SVG/styling.html#ClassAttribute这应该行得通。。。 关于要更改的内容或替代方案的任何提示/提示?

  • 问题内容: 我是iOS开发的新手,正在尝试学习Swift。我想对UITableView应用垂直的Alpha渐变,但是遇到了一些麻烦。 最初跟随此SO帖子,我做了以下工作: 收到错误并阅读此SO帖子后,我修改了所使用的两个数组: 现在得到错误 我正在努力寻找解决方案。有什么可以帮助的吗? 问题答案: 因此,我相信您可以解决您的问题,但是不确定我是否完全理解。当您尝试创建 仅包含隐式展开的CoreFo