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

Dhanil Dinesan
  • 575
  • 9
  • 27

1 Answers1

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;
}
Cody Gray - on strike
  • 239,200
  • 50
  • 490
  • 574
Dhanil Dinesan
  • 575
  • 9
  • 27
  • 1
    Please note that [Stack Overflow doesn't work like a discussion forum](//stackoverflow.com/about). 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. – Cody Gray - on strike Jan 23 '20 at 20:13