2

I want to add color for particular columns in an excel sheet when it's generating.

I have already generated the excel sheet, but now I want to add color for columns

      //---------------------------
      using (SpreadsheetDocument document = SpreadsheetDocument.Create(path, SpreadsheetDocumentType.Workbook))
      {
         WorkbookPart workbookPart = document.AddWorkbookPart();
         workbookPart.Workbook = new Workbook();

         WorksheetPart 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 = "Template"
         };

            sheets.Append(sheet);

            workbookPart.Workbook.Save();                 

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

            // Constructing header
            Row row = new Row();

            foreach (DataExchangeDefinition a in importColList)
            {
               defnExist = true;
               row.Append(
               ConstructCell(a.FieldCaption, CellValues.String));                      
            }

            if (defnExist == false)
            {
               row.Append(
                          ConstructCell("Excel Template Definition Missing", CellValues.String));

            }


            // Insert the header row to the Sheet Data
            sheetData.AppendChild(row);

            // Inserting each employee


            worksheetPart.Worksheet.Save();
         }      

      }
      catch (Exception)
      {
         throw;
      }
   }



   private Cell ConstructCell(string value, CellValues dataType)
   {
      Cell c= new Cell()
      {
         CellValue = new CellValue(value),
         DataType = new EnumValue<CellValues>(dataType),                                
      };
      Color color2 = new Color() { Rgb = "FF006100" };
      c.Append(color2);
      return c;
   }

This is the code for generating an excel sheet. This excel sheet is only a Template so only Column names will be there.

can anyone help me with this

5

1 Answer 1

0

The following code will color the text in all of the columns. (Note, however, that it will not color the text in an individual column.)

First, you check:

foreach (DataExchangeDefinition a in importColList)
{
    defnExist = true;
    row.Append(ConstructCell(a.FieldCaption, CellValues.String));
}

Here is the full code:

        using (SpreadsheetDocument document = SpreadsheetDocument.Create(path, SpreadsheetDocumentType.Workbook))
        {
            WorkbookPart workbookPart = document.AddWorkbookPart();
            workbookPart.Workbook = new Workbook();

            WorksheetPart 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 = "Template" };

            sheets.Append(sheet);


            var stylesheet = new Stylesheet() { MCAttributes = new MarkupCompatibilityAttributes() { Ignorable = "x14ac" } };
            stylesheet.AddNamespaceDeclaration("mc", "http: //schemas.openxmlformats.org/markup-compatibility/2006");
            stylesheet.AddNamespaceDeclaration("x14ac", "http: //schemas.microsoft.com/office/spreadsheetml/2009/9/ac");

            var fills = new Fills() { Count = 5U };
            var fonts = new Fonts() { Count = 1U, KnownFonts = true };
          //  var cellFormats = new CellFormats() { Count = 4U };
            Font font = new Font();
            font.Append(new Color() { Rgb = "ff0000" });
            fonts.Append(font);

            //Fill fill = new Fill();
            //var patternFill = new PatternFill() { PatternType = PatternValues.Solid };
            //patternFill.Append(new ForegroundColor() { Rgb = "00ff00" });
            //patternFill.Append(new BackgroundColor() { Indexed = 64U });
            //fill.Append(patternFill);
            //fills.Append(fill);

          // cellFormats.AppendChild(new CellFormat() { FontId = 0U, FillId = 0U });
            stylesheet.Append(fonts);
            stylesheet.Append(fills);
         //  stylesheet.Append(cellFormats);

            var stylePart = workbookPart.AddNewPart<WorkbookStylesPart>();
            stylePart.Stylesheet = stylesheet;
            stylePart.Stylesheet.Save();                  

            workbookPart.Workbook.Save();

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

            // Constructing header
            Row row = new Row();

            foreach (DataExchangeDefinition a in importColList)
            {
                defnExist = true;
               row.Append(
                ConstructCell(a.FieldCaption, CellValues.String));
            }

            if (defnExist == false)
            {
                row.Append(
                ConstructCell("Excel Template Definition Missing", CellValues.String));

            }
            // Insert the header row to the Sheet Data
            sheetData.AppendChild(row);

           // Inserting each employee

            worksheetPart.Worksheet.Save();
        }
    }
    catch (Exception)
    {

        throw;
    }
}
private Cell ConstructCell(string value, CellValues dataType)
{
    Cell c = new Cell()
    {
        CellValue = new CellValue(value),
        DataType = new EnumValue<CellValues>(dataType)
       // StyleIndex=0U,

    };        
    return c;
}
Sign up to request clarification or add additional context in comments.

1 Comment

Please note that Stack Overflow doesn't work like a discussion forum. It is a Q&A site where every post is either a question or an answer to a question. I've removed the question from this answer. If you have a follow-up question, please ask a new question.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.