2017-06-26 10 views
0

のセルの背景色を変更します。どのように私はOpenXMLを使用して達成することができます任意のアイデア?私はある特定のセル(columnName + rowIndex)の変更だけを達成しましたが、値が "変更"であるすべてのセルでは達成できませんでした。は、私は、テキスト「変更」で、すべてのセルの背景色を変更する必要がエクセル

はそれがOpenXMLのでなんとかですか私は別のアプローチを使用する必要がありますか?

答えて

1

あなたが一致する各ルールのConditionalFormattingRulesを追加し、ConditionalFormattingクラスを使用して条件付き書式を作成することができます。

コレクションに追加する必要があるフォーマットは、DifferentialFormatで定義する必要があります。

セルは「変更」が含まれている場合、次のコードは、赤い背景の条件付き書式で新しいスプレッドシートを作成します。条件付き書式が機能していることを示すために、セルA1:J20に「変更」または「a」のいずれかを入力します。

public static void CreateConditionalWorkbook(string filepath) 
{ 
    using (SpreadsheetDocument document = SpreadsheetDocument. 
     Create(filepath, SpreadsheetDocumentType.Workbook)) 
    { 
     WorkbookPart workbookPart = document.AddWorkbookPart(); 
     workbookPart.Workbook = new Workbook(); 

     var worksheetPart = workbookPart.AddNewPart<WorksheetPart>(); 
     worksheetPart.Worksheet = new Worksheet(); 

     Sheets sheets = workbookPart.Workbook.AppendChild(new Sheets()); 

     Sheet sheet = new Sheet() { Id = workbookPart.GetIdOfPart(worksheetPart), SheetId = 1, Name = "Sheet" }; 
     sheets.Append(sheet); 

     workbookPart.Workbook.Save(); 

     var sheetData = worksheetPart.Worksheet.AppendChild(new SheetData()); 

     WorkbookStylesPart stylesPart = workbookPart.AddNewPart<WorkbookStylesPart>(); 
     stylesPart.Stylesheet = new Stylesheet(); 

     Fills fills = new Fills() { Count = 1U }; 

     DifferentialFormats differentialFormats = new DifferentialFormats() { Count = (UInt32Value)1U }; 

     ConditionalFormatting conditionalFormatting = new ConditionalFormatting() { SequenceOfReferences = new ListValue<StringValue>() { InnerText = "A1:XFD1048576" } }; 

     DifferentialFormat differentialFormat = new DifferentialFormat(); 
     Fill fill = new Fill(); 
     PatternFill patternFill = new PatternFill(); 
     BackgroundColor backgroundColor = new BackgroundColor() { Rgb = new HexBinaryValue() { Value = "ff0000" } }; 
     patternFill.Append(backgroundColor); 
     fill.Append(patternFill); 
     differentialFormat.Append(fill); 
     differentialFormats.Append(differentialFormat); 

     Formula formula1 = new Formula(); 
     formula1.Text = "\"Change\""; 

     ConditionalFormattingRule conditionalFormattingRule = new ConditionalFormattingRule() 
     { 
      Type = ConditionalFormatValues.CellIs, 
      FormatId = 0U, 
      Priority = 1, 
      Operator = ConditionalFormattingOperatorValues.Equal 
     }; 

     conditionalFormattingRule.Append(formula1); 

     conditionalFormatting.Append(conditionalFormattingRule); 

     worksheetPart.Worksheet.Append(conditionalFormatting); 
     stylesPart.Stylesheet.Append(differentialFormats); 

     Random r = new Random(); 
     for (uint rowId = 1; rowId <= 20; rowId++) 
     { 
      Row row = new Row() { RowIndex = rowId }; 

      for (int cellId = 0; cellId < 10; cellId++) 
      { 
       Cell cell = new Cell(); 
       cell.CellReference = string.Format("{0}{1}", (char)(65 + cellId), rowId); 
       cell.DataType = CellValues.String; 
       cell.CellValue = new CellValue(r.Next(2) % 2 == 0 ? "a" : "Change"); 
       row.Append(cell); 
      } 

      sheetData.Append(row); 
     } 

     workbookPart.Workbook.Save(); 

     document.Close(); 
    } 
} 

上記実行した後の出力例は次のとおりです。Example output

-1

条件付き書式設定を使用してください。 「条件付き書式設定」、「新規ルール」、「セル値」を「特定のテキスト」に変更したセルのみをフォーマットし、「変更」という語を入力します。塗りつぶしの色を選択して適用し、OKをクリックします。

+1

事は、私は、XMLを受けていると私は、Excelファイルを生成していますということです。したがって、ユーザーがExcelファイルを開くときには、最終形式にする必要があります。だから私はコードでこれを行う必要があります:) – Toni

+0

ああ私の悪い、あなたがそれを必要としていることを理解していないopenxml – dwirony

関連する問題