gpt4 book ai didi

java - 兴趣点 Excel : get style name

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:45:50 26 4
gpt4 key购买 nike

我想读取应用于 xlsx 文档中单元格的样式的名称。我已经提取了文件,在 xl/styles.xml 中我可以找到样式名称:

<cellStyles count="3">
<cellStyle xfId="2" builtinId="7" name="Currency [0]"/>
<cellStyle xfId="0" builtinId="0" name="Normal"/>
<cellStyle xfId="1" name="test style"/>
</cellStyles>

我想要的样式名称是“测试样式”。目前我有以下代码,我可以获得 xfId 但不是名称:

@Override
public String getName(Workbook table, XSSFCell cell, String value) {
XSSFCellStyle cellStyle = cell.getCellStyle();
CellColor cellColor = new CellColor(cellStyle);
int xfId = cellStyle.getCoreXf().getFillId();

//todo: fint name, not xfId

return null;
}

有谁知道我是否可以通过 poi 获取样式名称,我将如何着手去做?

如果这不可能,我可以根据 xfId 获取背景颜色作为 rgb 吗?

问候

最佳答案

经过大量挖掘,我找到了解决方案。我想我会在这里分享。我还没有找到样式的名称。但我找到了一种获取颜色的方法。

CellStyle 有一个 xf 对象,其中包含所用填充的引用索引。您可以从 Workbooks StylesTable 中获取填充。

填充以不同的方式引用颜色,具体取决于它是什么颜色。它要么只有一个可以解析的 rgb 字符串,要么有一个主题 ID 和一个色调值。

您可以像填充一样从 StylesTable 中获取主题。并且主题具有 rgb 值。我不确定如何应用色调,但在我的测试中没有必要。

private int red;
private int green;
private int blue;

public void loadRgb(XSSFWorkbook table, XSSFCellStyle variableStyle) {
long fillId = variableStyle.getCoreXf().getFillId();
StylesTable stylesSource = table.getStylesSource();
XSSFCellFill fill = stylesSource.getFillAt((int) fillId);
CTColor fgColor = fill.getCTFill().getPatternFill().getFgColor();
if (fgColor != null) {
if (fgColor.xgetRgb() != null) {
convert(fgColor.xgetRgb().getStringValue());
} else {
convert(stylesSource.getTheme().getThemeColor((int) fgColor.getTheme()).getRgb());
}
}
}

private void convert(String stringValue) {
// the string value contains an alpha value, so we skip the first 2 chars
red = Integer.valueOf(stringValue.substring(2, 4), 16).intValue();
green = Integer.valueOf(stringValue.substring(4, 6), 16).intValue();
blue = Integer.valueOf(stringValue.substring(6, 8), 16).intValue();
}

private void convert(byte[] rgb) {
if (rgb != null) {
// Bytes are signed, so values of 128+ are negative!
// 0: red, 1: green, 2: blue
red = (rgb[0] < 0) ? (rgb[0] + 256) : rgb[0];
green = (rgb[1] < 0) ? (rgb[1] + 256) : rgb[1];
blue = (rgb[2] < 0) ? (rgb[2] + 256) : rgb[2];
}
}

关于java - 兴趣点 Excel : get style name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26675062/

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