提问人:matnow 提问时间:10/31/2023 更新时间:11/4/2023 访问量:47
Xlnt 库。有没有办法以 rgb 格式存储 excel 单元格颜色信息?
Xlnt library. Is there a way to store excel cell color information in rgb format?
问:
我找不到任何以 rgb 格式存储单元格颜色数据的函数。我只是想从一个单元格中获取颜色,然后用这种颜色自由地填充另一个单元格。
为了填充单元格,我使用此功能,但找不到存储颜色的方法。cell.fill(xlnt::fill::solid(xlnt::rgb_color(242, 34, 15)));
答:
0赞
Ben A.
10/31/2023
#1
归根结底,答案在于仅使用 .这是检索颜色的最简单方法。但是,我还创建了您描述的实现,仅作为示例。cell.fill().pattern_fill().foreground().rgb()
//This is what you asked for
xlnt::rgb_color get_cell_color(const xlnt::cell &cell) {
if (cell.fill().type() == xlnt::fill_type::pattern) {
xlnt::pattern_fill pattern = cell.fill().pattern_fill();
if (pattern.foreground().type() == xlnt::color_type::rgb) {
return pattern.foreground().rgb();
}
}
return xlnt::rgb_color(0, 0, 0); // Default to black if no color is found
}
//I took the function you used to fill, and I made it fit in a little bit better
void color_fill_cell(xlnt::cell &cell, const xlnt::rgb_color &rgb) {
cell.fill(xlnt::fill::solid(rgb));
}
现在我们有了这些函数,我们可以很容易地实现它们:
xlnt::worksheet ws = ; // Just plop your worksheet here
xlnt::cell source_cell = ws.cell("A1"); //Obv A1 is a placeholder
xlnt::rgb_color rgb = get_cell_color(source_cell);
xlnt::cell target_cell = ws.cell("B1"); //placeholder again
color_fill_cell(target_cell, rgb);
评论
0赞
matnow
11/2/2023
非常感谢您的有用回复,但我遇到了以下问题。例如 我收到错误类 xlnt::cell has no member “has fill” 这是由于缺少包含必要的头文件吗?cell.has_fill()
0赞
Ben A.
11/4/2023
@matnow 我的坏——我已经解决了这个问题。我一直在看我过去的旧(坏)代码,不假思索地复制了——这不是,也从来都不是,为了记录。确保功能安全性的正确方法是通过 .我已将其整合到答案中。has_fill
if (cell.fill().type() == xlnt::fill_type::pattern)
0赞
matnow
11/4/2023
非常感谢您的回复。但是,可能还有一件事无法正常工作。我的意思是这段代码: C++没有重载函数的实例与参数列表对象类型匹配:xlnt::optional<xlnt::color>类没有成员 再次感谢您的帮助if (pattern.foreground().type() == xlnt::color_type::rgb) { return pattern.foreground().rgb(); }
set()
rgb()
0赞
matnow
11/4/2023
没关系,我自己已经想通了。我应该和.pattern.foreground().get().type()
pattern.foreground().get().rgb()
评论