0

xlsLibを使用して、独自の形式のデータから Excel スプレッドシートを作成しています。データには、特定のセルを色付けするための RGB 情報が含まれており、結果の Excel ファイルにそれらのカスタム カラーを反映させたいと考えています。

xlsLib は、次のようにセルの色を設定するメソッドを提供します。

myCell->fillfgcolor(color_name_t);

で定義された定義済みの色に対してはうまく機能しcolor_name_tます。しかし、定義済みの色の代わりにカスタムの色を使用するように指示するにはどうすればよいでしょうか?

カスタムカラーを作成できるようです:

myWorkbook->setColor(r, g, b, idx);

ここで、idx は 8 ~ 64 の値です。setColor() は、後で使用するためにこのカスタム カラーをパレット配列に格納してcell::fillfgcolor()いるように見えますが、そのパレットは使用していないようです。

fillfgcolor()カスタム パレットを使用してセルの色を設定する代わりに、何を呼び出す必要がありますか?

4

1 に答える 1

0

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();
}
于 2015-04-29T11:48:28.630 に答える