3

ColdFusion と SpreadsheetNew、SpreadsheetAddRows、SpreadsheetFormatRows などの関数を使用して Excel ファイルを作成しています。ここにある私が読んだドキュメントによると、それらは色とfgcolorのプロパティです。2つの違いは何なのか、少し混乱しています。1 つはテキストの色で、もう 1 つは背景の色ですか? 行の背景色を設定するために fgcolor を使用しています。

// HEADER ROW FORMAT
formatHeaderRow = StructNew();
formatHeaderRow.fgcolor="royal_blue";

org.apache.poi.hssf.util.HSSFColor私の主な質問は、ドキュメントによると、色クラスの任意の値を自分の色として指定できることです。ただし、HEX 値または RGB のいずれかを指定する必要があります。Excelのカラーピッカー内で入力できるので、Excelがそれを処理できることを私は知っています。行の色に HEX または RGB 値を入力する方法はありますか?

ありがとう!

アップデート

<cfscript>
// create XLSX workbook with a few cells
// and grab underlying POI objects
cfSheet = Spreadsheetnew("Sheet1", true);
poiWorkbook = cfSheet.getWorkBook();
poiSheet = poiWorkbook.getSheet("Sheet1");


// Create reusuable style objects 
// NOTE: Excel limits the maximum number of styles allowed. So do not create a new
// style for every cell. Create distinct styles once, and apply to multiple cells/rows.
Color = createObject("java", "java.awt.Color");

// Style 1: Cell with background color (only)
backgroundOnlyStyle = poiWorkbook.createCellStyle();
backgroundOnlyStyle.setFillPattern( backgroundOnlyStyle.SOLID_FOREGROUND );
XSSFColor = createObject("java", "org.apache.poi.xssf.usermodel.XSSFColor");
backgroundOnlyStyle.setFillForegroundColor( XSSFColor.init(Color.decode("##055910")) );

// Apply styles to cell A1. Note: POI indexes are 0-based
SpreadSheetSetCellValue(cfSheet, "background color only", 1, 1);
poiSheet.getRow( 0 ).setRowStyle( backgroundOnlyStyle );


</cfscript>

<!--- stream it to the browser --->
<cfheader name="Content-Disposition" value="inline; filename=reportName.xlsx">
<cfcontent type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" variable="#SpreadSheetReadBinary(cfSheet)#">
4

2 に答える 2

7

2つの違いは何なのか、少し混乱しています。

当然のことです。プロパティ名は、 POI (基盤となる Java ライブラリ) で使用されている規則に従ってモデル化されていますが、これは IMO から始めると少し混乱します。ColdFusion は POI 機能のサブセットのみを実装するため、名前は文脈から切り離されており、さらに混乱を招きます。あなたの質問に答えるために、POI には実際には3 つの関連する色のプロパティがあります。

  1. フォントの色- すなわちFont.setColor()

    セル テキストの色。CF では、これはdataFormat.colorプロパティによって制御されます。

  2. セル パターンの前景色- すなわちCellStyle.setFillForegroundColor

    名前にもかかわらず、これはほとんどの人がセルの背景色 (下の画像の黄色) として考えているものです。CF では、これはdataFormat.fgColorプロパティによって制御されます。

  3. セルパターンの背景色-CellStyle.setFillBackgroundColor

    (オプション) マルチカラー セル パターンで使用されるセカンダリ カラー (下の画像の赤)。ColdFusion に相当するものはありません。

Excel セルの塗りつぶしのプロパティ

行の色に HEX または RGB 値を入力する方法はありますか?

最後に、コア CF 関数でサポートされていないことを確認しました。ただし、それをサポートする基礎となる POI ライブラリを利用することはできます。新しい .XLSX 形式を使用していると仮定すると、 CellStyle を作成し、目的のXSSFColorを適用することで実行できます。

これは、POI を介してフォントやセルの背景色を設定する方法の例 (CF11 でテスト済み) です。実際のコードではありますが、基本的なロジックを再利用可能な関数にまとめることをお勧めします。

例:

// create XLSX workbook with a few cells
// and grab underlying POI objects
cfSheet = Spreadsheetnew("Sheet1", true);
poiWorkbook = cfSheet.getWorkBook();
poiSheet = poiWorkbook.getSheet("Sheet1");


// Create reusuable style objects 
// NOTE: Excel limits the maximum number of styles allowed. So do not create a new
// style for every cell. Create distinct styles once, and apply to multiple cells/rows.
Color = createObject("java", "java.awt.Color");

// Style 1: Cell with background color (only)
backgroundOnlyStyle = poiWorkbook.createCellStyle();
backgroundOnlyStyle.setFillPattern( backgroundOnlyStyle.SOLID_FOREGROUND );
XSSFColor = createObject("java", "org.apache.poi.xssf.usermodel.XSSFColor");
backgroundOnlyStyle.setFillForegroundColor( XSSFColor.init(Color.decode("##055910")) );

// Style 2: Cell with font color (only)
textOnlyStyle = poiWorkbook.createCellStyle();
textFont = poiWorkbook.createFont();
XSSFColor = createObject("java", "org.apache.poi.xssf.usermodel.XSSFColor");
textFont.setColor( XSSFColor.init(Color.decode("##bd13be")) );
textOnlyStyle.setFont( textFont );

// Style 3: Cell with both backgound and Text color
backgroundAndTextStyle = poiWorkbook.createCellStyle();
textFont = poiWorkbook.createFont();
XSSFColor = createObject("java", "org.apache.poi.xssf.usermodel.XSSFColor");
textFont.setColor( XSSFColor.init(Color.decode("##a20932")) );
backgroundAndTextStyle.setFont( textFont );
XSSFColor = createObject("java", "org.apache.poi.xssf.usermodel.XSSFColor");
backgroundAndTextStyle.setFillPattern( backgroundAndTextStyle.SOLID_FOREGROUND );
backgroundAndTextStyle.setFillForegroundColor( XSSFColor.init(Color.decode("##192fda")) );

// Apply styles to cell A1. Note: POI indexes are 0-based
SpreadSheetSetCellValue(cfSheet, "background color only", 1, 1);
poiSheet.getRow( 0 ).getCell( 0 ).setCellStyle( backgroundOnlyStyle );

// Apply styles to cell A2
SpreadSheetSetCellValue(cfSheet, "text color only", 2, 1);
poiSheet.getRow( 1 ).getCell( 0 ).setCellStyle( textOnlyStyle );

// Apply styles to cell A3
SpreadSheetSetCellValue(cfSheet, "background AND text color", 3, 1);
poiSheet.getRow( 2 ).getCell( 0 ).setCellStyle( backgroundAndTextStyle );

// Save to file
SpreadSheetWrite(cfSheet, "c:/path/to/yourFile.xlsx", true);
于 2016-06-09T19:44:15.927 に答える