2012-11-02 8 views
13

का उपयोग करके अभिव्यक्ति द्वारा सशर्त स्वरूपण मैं ईपीप्लस की सशर्त स्वरूपण सुविधा का उपयोग करके कुछ सीमा को प्रारूपित करने का प्रयास कर रहा हूं। मैंने कई दस्तावेज पढ़े लेकिन सशर्त स्वरूपण अभिव्यक्ति के बारे में कहीं भी उल्लेख नहीं है।ईपीप्लस

मैं बहुत भ्रमित हूं। पता नहीं कि उस सुविधा का उपयोग कैसे करें। यहाँ मेरी कुछ सवाल हैं:

  1. हम पैरामीटर में लाना ExcelAddress कई रेंज का उपयोग कर सकते हैं (जैसे "एच 1: H17, एल 1: L17," AA1: AA17 ")
  2. सूत्र सूत्र संपत्ति में डाल दिया है (जैसे हम "A1" का उपयोग इंटरॉप में फ़ॉर्मेट करने के लिए वर्तमान सेल के लिए प्रतिनिधित्व करने के लिए उत्कृष्टता)
  3. तुम मुझे एक छोटा सा डेमो कोड पैर कि सशर्त स्वरूपण अभिव्यक्ति का उपयोग दे सकते हैं इंटरॉप Excel जैसे किसी भी तरह या नहीं है?।

धन्यवाद!

(खराब अंग्रेजी के लिए खेद है मैंने लिखा)

उत्तर

28

मैं अपने आप को द्वारा समाधान पाया है:

स्रोत-कोड यहाँ पर एक नजर डालें। कृपया एक उदाहरण कोड ले:

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; 

उपरोक्त उदाहरण में,

  • _formatRangeAddress रेंज है कि अभिव्यक्ति द्वारा सशर्त स्वरूपण के लिए लागू किया जाएगा है। इस रेंज में पहला सेल स्थिति सूत्र में उपयोग किया जाएगा। (बी 3)।
  • _statement हालत गणना के लिए इस्तेमाल सूत्र है, इस स्ट्रिंग बराबर के चिह्न (=) (एमएस एक्सेल से अंतर बिंदु) के साथ नहीं शुरू करता है, सेल जो अभिव्यक्ति बनाने के लिए प्रयोग किया जाता है प्रथम कक्ष है _formatRangeAddress में। (बी 3)।

आशा है कि यह उन लोगों के लिए सहायक हो जो आवश्यक हैं। -Han-

+0

क्या आप "युक्त" टेक्स्ट सशर्त स्वरूपण –

+1

के लिए प्रदान कर सकते हैं यह एक्सेल फ़ंक्शन है। मुझे लगता है कि वे 'ISNUMBER' और' खोज 'funcions का उपयोग करते हैं।http://office.microsoft.com/en-001/excel-help/check-if-a-cell-contains-text-HP003056106.aspx – Han

+0

मैं एक्सेल पर सीधे सशर्त स्वरूपण का उपयोग करना चाहता हूं लेकिन मुझे कोई स्पष्ट नहीं है कि ' आपकी अभिव्यक्ति पर वर्तमान '। आपने अभिव्यक्ति 'IF (AND (ISBLANK (OFFSET (B3,0, -1)), ISBLANK (B3)), 1,0) के रूप में उपयोग किया है, और, कोड टिप्पणी में आप कहते हैं' // सफेद रंग भरें यदि इनमें से एक पिछले सेल या वर्तमान सेल ब्लैंक है: '। 'वर्तमान' सेल का संदर्भ कहां है? मैं केवल 'बी 3' देखता हूं। – jotapdiez

2

ईपीप्लस के 3.1 बीटा संस्करण में सशर्त स्वरूपण के लिए समर्थन है। http://epplus.codeplex.com/discussions/348196/

+0

दरअसल यह वास्तव में मेरे प्रश्न पर ध्यान केंद्रित नहीं करता है :( – Han

0

कई चंद्रमाओं के बाद मुझे LINQ और EPPlus का उपयोग करके ऐसा करने के लिए और अधिक लचीला और तेज़ दृष्टिकोण मिला। आपको बस इतना करना है: Excel पंक्ति संख्याओं को सहेजने के लिए अपनी सूची में अतिरिक्त संपत्ति जोड़ें, और उसके बाद LINQ का उपयोग कर सेल पते पुनर्प्राप्त करें। इस मामले में यह इस तरह दिखेगा:

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

यहाँ पूरा लेख है:

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

इसके अलावा यहां एक और उदाहरण देखें: https://stackoverflow.com/a/49022692/8216122 आशा है कि यह भविष्य में किसी को मदद मिलती है।

संबंधित मुद्दे