Như đã chỉ trong Vlad's answer, bạn đang chạy ra khỏi khe cắm màu miễn phí. Một cách để có được xung quanh đó sẽ là để đệm các màu sắc: bất cứ khi nào bạn thử một sự kết hợp RGB, các thói quen đầu tiên nên kiểm tra xem sự kết hợp là trong bộ nhớ cache; nếu nó nằm trong cache, thì nó nên sử dụng nó thay vì tạo một cái mới từ đầu; màu sắc mới sau đó sẽ chỉ được tạo nếu chúng chưa có trong bộ nhớ cache.
Đây là việc thực hiện tôi sử dụng; nó sử dụng XSSF cộng Guava's LoadingCache và hướng tới màu sắc XSSF generationg từ CSS rgb(r, g, b)
tờ khai, nhưng nó phải là tương đối nhỏ để thích nghi với nó để HSSF:
private final LoadingCache<String, XSSFColor> colorsFromCSS = CacheBuilder.newBuilder()
.build(new CacheLoader<String, XSSFColor>() {
private final Pattern RGB = Pattern.compile("rgb\\(\\s*(\\d+)\\s*, \\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)");
@Override
public XSSFColor load(String style) throws Exception {
Matcher mat = RGB.matcher(style);
if (!mat.find()) {
throw new IllegalStateException("Couldn't read CSS color: " + style);
}
return new XSSFColor(new java.awt.Color(
Integer.parseInt(mat.group(1)),
Integer.parseInt(mat.group(2)),
Integer.parseInt(mat.group(3))));
}
});
Có lẽ ai đó khác có thể gửi một HSSF tương đương? ;)
Nguồn
2018-03-09 14:00:57
Bạn đã đã được xác định số lượng tối đa màu sắc trong tập tin của bạn? (Excel có một giới hạn cứng vào những thứ khác nhau, chẳng hạn như số điện thoại hoặc các hàng và cột, nhưng cũng vào số lượng các phong cách vv) – Gagravarr
@kenny: bạn có thể xin vui lòng xem xét chấp nhận trên các câu trả lời dưới đây nếu nó thực sự giải quyết vấn đề của bạn? – veer7