2012-11-02 23 views
13

Sto provando a formattare un intervallo utilizzando la funzione di formattazione condizionale di EPPlus. Ho letto molti documenti ma non vi sono menzioni in nessun luogo sull'espressione di formattazione condizionale.Formattazione condizionale per espressione utilizzando EPPlus

Sono molto confuso. Non so come usare quella funzione. Qui sono le mie alcune domande:

  1. possiamo usare gamma multipla di mettere in parametro ExcelAddress (come "H1: H17, L1: L17," AA1: AA17")
  2. La formula viene messo in proprietà Formula è un po 'come l'interoperabilità di Excel o no? (come si usa "A1" a rappresentare per la cella attiva per la formattazione in interoperabilità di Excel)
  3. mi potete dare una gamba codice di piccola demo che utilizzano condizionale Espressione formattazione.

Grazie!

(Mi dispiace per l'inglese male che ho scritto)

risposta

28

ho scoperto la soluzione da me. Tieni un codice esempio:

ExcelAddress _formatRangeAddress = new ExcelAddress("B3:B10,D3:D10,F3:F10,H3:H10:J3:J10"); 
// fill WHITE color if previous cell or current cell is BLANK: 
// B3 is the current cell because the range _formatRangeAddress starts from B3. 
// OFFSET(B3,0,-1) returns the previous cell's value. It's excel function. 
string _statement = "IF(OR(ISBLANK(OFFSET(B3,0,-1)),ISBLANK(B3)),1,0)"; 
var _cond4 = sheet.ConditionalFormatting.AddExpression(_formatRangeAddress); 
_cond4.Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid; 
_cond4.Style.Fill.BackgroundColor.Color = Color.White; 
_cond4.Formula = _statement; 

// fill GREEN color if value of the current cell is greater than 
// or equals to value of the previous cell 
_statement = "IF(OFFSET(B3,0,-1)-B3<=0,1,0)"; 
var _cond1 = sheet.ConditionalFormatting.AddExpression(_formatRangeAddress); 
_cond1.Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid; 
_cond1.Style.Fill.BackgroundColor.Color = Color.Green; 
_cond1.Formula = _statement; 

// fill RED color if value of the current cell is less than 
// value of the previous cell 
_statement = "IF(OFFSET(B3,0,-1)-B3>0,1,0)"; 
var _cond3 = sheet.ConditionalFormatting.AddExpression(_formatRangeAddress); 
_cond3.Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid; 
_cond3.Style.Fill.BackgroundColor.Color = Color.Red; 
_cond3.Formula = _statement; 

Nell'esempio precedente,

  • _formatRangeAddress è l'intervallo che verrà applicato per la formattazione condizionale dall'espressione. La prima cella in questo intervallo verrà utilizzata nella formula della condizione. (B3).
  • _statement è la formula utilizzata per calcolare la condizione, questa stringa non si inizio con segno uguale (=) (punto differenza da MS Excel), la cella che viene usato per fare espressione è la prima cella nello _formatRangeAddress. (B3).

Spero che questo sia utile per gli altri che ne hanno bisogno. -Han-

+0

è possibile fornire la formattazione condizionale del testo "Contiene" –

+1

È la funzione di Excel. Vedo che usano le funzioni 'ISNUMBER' e' SEARCH'.http://office.microsoft.com/en-001/excel-help/check-if-a-cell-contains-text-HP003056106.aspx – Han

+0

Voglio usare la formattazione condizionale diretta su Excel ma non ho chiaro il ' corrente sulla tua espressione. Hai usato come espressione 'IF (AND (ISBLANK (OFFSET (B3,0, -1)), ISBLANK (B3)), 1,0)' e, nel commento del codice hai detto '// riempi colore BIANCO se uno di cella precedente o cella corrente è BLANK: '. Dov'è il riferimento alla cella 'corrente'? Vedo solo 'B3'. – jotapdiez

0

Dopo molte lune ho trovato un approccio più flessibile e veloce per farlo utilizzando LINQ ed EPPlus. Tutto quello che devi fare è: aggiungere una proprietà extra al tuo elenco per salvare i numeri di riga di Excel e quindi recuperare gli indirizzi di cella usando LINQ. In questo caso sarebbe simile a questa:

string sRng = string.Join(",", YourModel.Where(f => f.YourField == null) 
    .Select(a => "H" + a.iRow + ",L" + a.iRow + ",AA" + a.iRow)); // this address could be many pages and it works 

if (sRng.Length > 0) { 
    ws.Cells[sRng].Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.Green); 
} 

Ecco l'articolo completo:

https://www.codeproject.com/Tips/1231992/Conditional-Formatting-in-Excel-with-LINQ-and-EPPl

vedi anche qui un altro esempio: https://stackoverflow.com/a/49022692/8216122 Spero che questo aiuti qualcuno in futuro.

Problemi correlati