2012-11-02 19 views
13

Próbuję sformatować pewien zakres za pomocą funkcji warunkowego formatowania programu EPPlus. Przeczytałem wiele dokumentów, ale nigdzie nie ma wzmianek o wyrażeniu warunkowego formatowania.Formatowanie warunkowe za pomocą wyrażenia przy użyciu EPPlus

Jestem bardzo zagmatwany. Nie wiem, jak korzystać z tej funkcji. Oto moje kilka pytań:

  1. Czy możemy korzystać z wielu zakres umieścić w parametrze ExcelAddress (jak "H1: H17, L1: L17" AA1: AA17")
  2. Formuła wkłada się własności Formula jakoś jak Interop Excel czy nie? (jak używamy „A1” do reprezentowania dla bieżącej komórki formatowania w współdziałanie Excel)
  3. czy możesz dać mi kodu małe demo nogę które używają formatowanie warunkowe wyrażenie.

Dziękujemy!

(Przepraszam za zły angielski, który napisałem)

Odpowiedz

28

Znalazłem rozwiązanie na sam. Proszę wziąć przykładowy kod:

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; 

w powyższym przykładzie,

  • _formatRangeAddress jest zakres, który będzie stosowany do formatowania warunkowego przez wypowiedzi. Pierwsza komórka z tego zakresu będzie używana w formule warunku. (B3).
  • _statement jest wzór służy do obliczania stanu, łańcuch ten nie ma rozpoczęcia równie znaku (=) (temperatura Różnica z Microsoft Excel), komórka , który jest stosowany do ekspresji jest pierwszą komórką w _formatRangeAddress. (B3).

Mam nadzieję, że jest to pomocne dla innych osób, które potrzebują. -Han-

+0

można podać formatowanie warunkowe tekstu "Zawiera" –

+1

Jest to funkcja programu Excel. Widzę, że używają funkcji "ISNUMBER" i "SEARCH".http://office.microsoft.com/en-001/excel-help/check-if-a-cell-contains-text-HP003056106.aspx – Han

+0

Chcę użyć formatowania warunkowego bezpośrednio w programie Excel, ale nie mam jasne, '' current' na twoim wyrażeniu. Użyłeś jako wyrażenia 'JEŻELI (AND (ISBLANK (OFFSET (B3,0, -1)), ISBLANK (B3)), 1,0)' i, w komentarzu kodu mówisz '// wypełnij kolor BIAŁY, jeśli jeden z poprzednia komórka lub bieżąca komórka to BLANK: '. Gdzie jest odwołanie do komórki 'current'? Widzę tylko "B3". – jotapdiez

0

Po wielu księżycach znalazłem sposób na bardziej elastyczne i szybkie podejście do tego przy pomocy LINQ i EPPlus. Wszystko, co musisz zrobić, to: dodać dodatkową właściwość do listy, aby zapisać numery wierszy programu Excel, a następnie pobrać adresy komórek przy użyciu LINQ. W tym przypadku będzie to wyglądać tak:

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); 
} 

Oto pełny artykuł:

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

patrz także tutaj inny przykład: https://stackoverflow.com/a/49022692/8216122 nadzieję, że to pomoże komuś w przyszłości.

Powiązane problemy