c# - 如何在生成 Excel 工作表时为列值添加颜色?

标签 c# openxml openxml-sdk

我想在生成 Excel 工作表时为特定列添加颜色。

我已经生成了 excel 表,但现在我想为列添加颜色

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

这是生成 excel 表的代码。此 Excel 工作表只是一个模板,因此只有列名。

谁能帮我解决这个问题

最佳答案

以下代码将为所有列中的文本着色。 (但请注意,它不会为单个列中的文本着色。)

首先,您检查:

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

完整代码如下:

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

关于c# - 如何在生成 Excel 工作表时为列值添加颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54625207/

相关文章:

c# - OpenXML:在 Excel 中自动调整列宽

c# - Entity Framework 属性隐藏

c# - 重载或可选参数之间的性能差异?

c# - 在 C# 中使用 HttpWebRequest 发布参数

c# - 格式化复选框?

f# - 无法使用带有 F# (FSharp) 的 OpenXml 附加工作表

c# - 按列名称删除列

excel - 使用 OpenXml 确定 xlsx 中的单元格格式(日期、货币、自定义等)

c# - OpenXML - 表创建,我如何创建表而不需要 excel 来修复它们

powerpoint - 如何在Powerpoint中获取形状的位置和尺寸?