Xlslib には、セルの背景色を変更するための 2 つのメソッドが用意されています。
void fillbgcolor(color_name_t color);
void fillbgcolor(unsigned8_t color);
しかし、カスタム カラー (#EFEFEF など) を使用するにはどうすればよいですか?
Xlslib には、セルの背景色を変更するための 2 つのメソッドが用意されています。
void fillbgcolor(color_name_t color);
void fillbgcolor(unsigned8_t color);
しかし、カスタム カラー (#EFEFEF など) を使用するにはどうすればよいですか?
16 進値と次のメソッドを使用してカスタム カラーを設定し、16 進カラー値を RGB 値に変換して DHWorkBook の setupNewColors に渡すことができます。そのためには DHxlsIOS SDK を使用する必要があります。このために、DHWorkBook、DHCell、colorID、および 16 進カラー文字列 (EFEFEF、CACACA など) のオブジェクトを渡す 1 つの一般的なメソッドを作成しました。「color.h」ファイルで確認できる色の ID として、9 から 63 までの任意の数値を渡すことができます。そして、setupNewColors を使用して RGB カラーを設定し、unsigned8_t カラー オブジェクトを渡すために作成した DHCell の fillBGcolorUnsigned を使用してセルに入力する必要があります。
-(void)customColor:(DHWorkBook *)workbook cell:(DHCell *)cell customColorId:(unsigned int)customColorId hexString:(NSString *)hexString
{
unsigned int components[3];
[self rgbFromHexString:hexString
rgb:components];
[workbook setupNewColors:customColorId
red:components[0]
green:components[1]
blue:components[2]];
[cell fillBGcolorUnsigned:customColorId];
}
以下のメソッドを使用して、16 進文字列から RGB 値を取得します。'#' や '0X' などのプレフィックスは、この方法で RGB に変換する際に既に切り捨てられているため、使用する必要はありません。
-(void)rgbFromHexString:(NSString*)hex rgb:(unsigned int [3])components // New
{
NSString *cString = [[hex stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];
// String should be 6 or 8 characters
if ([cString length] < 6)
{
// Gray color
components[0] = 128; // r
components[1] = 128; // g
components[2] = 128; // b
}
// Truncate 0X if it appears
if ([cString hasPrefix:@"0X"]) cString = [cString substringFromIndex:2];
if ([cString hasPrefix:@"#"]) cString = [cString substringFromIndex:1];
if ([cString length] != 6)
{
// Gray color
components[0] = 128; // r
components[1] = 128; // g
components[2] = 128; // b
}
// Separate into r, g, b substrings
NSRange range;
range.location = 0;
range.length = 2;
NSString *rString = [cString substringWithRange:range];
range.location = 2;
NSString *gString = [cString substringWithRange:range];
range.location = 4;
NSString *bString = [cString substringWithRange:range];
// Scan values
unsigned int r = 0, g = 0, b = 0;
[[NSScanner scannerWithString:rString] scanHexInt:&r];
[[NSScanner scannerWithString:gString] scanHexInt:&g];
[[NSScanner scannerWithString:bString] scanHexInt:&b];
components[0] = r;
components[1] = g;
components[2] = b;
NSLog(@"r - %u g - %u b - %u",components[0],components[1],components[2]);
}
また、DHCell と cell.cpp で、color_name_t の代わりに unsigned8_t を渡す 2 つのカスタム メソッドを作成しました。
-(void)fillBGcolorUnsigned:(unsigned8_t)color
{
CELL(aCell)->fillbgcolor(color);
}
void cell_t::fillbgcolor(unsigned8_t color)
{
xf_t * tempXF = xf_t::xfDup(pxf);
tempXF->SetFillBGColor(color);
pxf->UnMarkUsed();
pxf = m_GlobalRecords.findXF(tempXF);
pxf->MarkUsed();
}
color_name_t
orの正確な定義はわかりませんが、unsigned8_t
これらは何らかの整数型の typedef だと思います。この場合、16 進数の整数表現を使用して、カラー コードを目的の形式で記述できます。
編集:プレフィックスを付けて 16 進数値を書き込みます0x
(例: 0xEFEFEF)。
EDIT2:拡張例
fillbgcolor(0xEFEFEF);