gpt4 book ai didi

java - 如何使用 Apache POI XSSF Excel 的 IndexedColors 中没有的颜色?

转载 作者:行者123 更新时间:2023-12-02 01:13:34 26 4
gpt4 key购买 nike

我正在查看一个我想要复制的 Excel 工作表,我遇到的唯一问题是颜色。我想要复制的颜色是标准颜色部分中的蓝色、Accent 5、Lighter 40%浅绿色。我正在看docs在 XSSF Workbook 中使用自定义颜色,它指出执行方法如下:

XSSFWorkbook wb = new XSSFWorkbook();
XSSFSheet sheet = wb.createSheet();
XSSFRow row = sheet.createRow(0);
XSSFCell cell = row.createCell(0);
cell.setCellValue("custom XSSF colors");

XSSFCellStyle style1 = wb.createCellStyle();
style1.setFillForegroundColor(new XSSFColor(new java.awt.Color(128, 0, 128), new DefaultIndexedColorMap()));
style1.setFillPattern(FillPatternType.SOLID_FOREGROUND);

当我尝试使用 style1.setFillForegroundColor(new XSSFColor(new java.awt.Color(128, 0, 128), new DefaultIndexedColorMap())); 我收到错误,因为.setFillForegroundColor() 仅采用一个参数,并且该参数是一个 short,而不是 XSSFColor

有人有这样的运气吗?我已经搜索了几个小时,但找不到任何 8 年前或不起作用的东西。

最佳答案

使用当前的apache poi 4.1.1public void setFillForegroundColor(XSSFColor color)XSSFCellStyle中。

XSSFColor 应使用构造函数 public XSSFColor(byte[] rgb, IndexedColorMap colorMap) 创建因为所有其他构造函数要么已弃用,要么被标记为“仅测试”,或者不可用于创建自定义颜色。

通过从调色板设置颜色,然后选择填充颜色,可以从Excel获取所需颜色的RGB值 - 更多颜色 - 自定义。不幸的是 apache poiIndexedColors与当前 Excel 版本的颜色不再完全相同。它们的版本为 2007。因此它们也可以使用,但更高的 Excel 版本可能会显示不同的颜色。

使用当前 apache poi 4.1.1 的完整示例:

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.apache.poi.xssf.usermodel.DefaultIndexedColorMap;

public class CreateExcelXSSFCellFillColor {

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

java.util.List<XSSFCellStyle> cellStyles = new java.util.ArrayList<XSSFCellStyle>();
XSSFCellStyle cellStyle; byte[] rgb; XSSFColor color;

//Your custom color #800080
//create cell style on workbook level
cellStyle = workbook.createCellStyle();
//set pattern fill settings
cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
//create the RGB byte array
rgb = new byte[3];
rgb[0] = (byte) 128; // red
rgb[1] = (byte) 0; // green
rgb[2] = (byte) 128; // blue
//create XSSFColor
color = new XSSFColor(rgb, new DefaultIndexedColorMap());
//set fill color to cell style
cellStyle.setFillForegroundColor(color);

cellStyles.add(cellStyle);

//Light Green
cellStyle = workbook.createCellStyle();
cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
rgb = new byte[3];
rgb[0] = (byte) 146; // red
rgb[1] = (byte) 208; // green
rgb[2] = (byte) 80; // blue
color = new XSSFColor(rgb, new DefaultIndexedColorMap());
cellStyle.setFillForegroundColor(color);
cellStyles.add(cellStyle);

//Blue, Accent 5, Lighter 40%
cellStyle = workbook.createCellStyle();
cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
rgb = new byte[3];
rgb[0] = (byte) 155; // red
rgb[1] = (byte) 194; // green
rgb[2] = (byte) 230; // blue
color = new XSSFColor(rgb, new DefaultIndexedColorMap());
cellStyle.setFillForegroundColor(color);
cellStyles.add(cellStyle);

Sheet sheet = workbook.createSheet();
for (int r = 0; r < cellStyles.size(); r++) {
Row row = sheet.createRow(r);
row.setHeight((short)(20*20));
Cell cell = row.createCell(0);
cell.setCellValue("cell style " + (r+1));
cell.setCellStyle(cellStyles.get(r));
}
sheet.setColumnWidth(0, 20*256);

FileOutputStream out = new FileOutputStream("CreateExcelXSSFCellFillColor.xlsx");
workbook.write(out);
out.close();
workbook.close();
}
}

关于java - 如何使用 Apache POI XSSF Excel 的 IndexedColors 中没有的颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59002274/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com