Bagaimana cara menambahkan warna pada kolom excel tertentu berdasarkan kondisi menggunakan openxml?

Saya membuat lembar excel dan saya ingin mewarnai kolom excel berdasarkan kondisi. Sekarang semua kolom excel saya mendapat warna merah. Saya hanya ingin mewarnai nama kolom tertentu.

Saya menggunakan XML terbuka untuk menghasilkan excel, apakah ada cara untuk menemukan sel untuk menerapkan warna

 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();
                Font font = new Font();
                font.Append(new Color() { Rgb = "ff0000" });
                fonts.Append(font);

               // cellFormats.AppendChild(new CellFormat() { FontId = 0U });
                stylesheet.Append(fonts);
                stylesheet.Append(fills);
                //stylesheet.Append(cellFormats);
                //stylesheet.Append(fill);                 
                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;
                    if (a.MustFieldYN == true)
                    {
                        row.Append(
                        ConstructCell(a.FieldCaption, CellValues.String));
                    }
                    else
                    {
                        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();
            }

Berikut adalah metode membangun sel

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

Apakah ada cara untuk mengatasi ini?


person Dhanil Dinesan    schedule 14.02.2019    source sumber


Jawaban (1)


1) Tambahkan lembar gaya ke WorkBookPart Anda

WorkbookPart workbookPart = document.AddWorkbookPart();
workbookPart.Workbook = new Workbook();

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

Catatan: Tambahkan kode WorkbookStylesPart di atas tepat di bawah WorkbookPart jika tidak, Anda tidak akan dapat membuatnya berfungsi.

2) Tambahkan fungsi di bawah ini yang mengembalikan stylesheet,

private Stylesheet GenerateStylesheet()
    {
        Stylesheet styleSheet = null;

        Fonts fonts = new Fonts(
            new Font( // Index 0 - default
                new FontSize() { Val = 10 }

            ),
            new Font( // Index 1 - header
                new FontSize() { Val = 10 },
                new Bold(),
                new Color() { Rgb = "FFFFFF" }

            ));

        Fills fills = new Fills(
                new Fill(new PatternFill() { PatternType = PatternValues.None }), // Index 0 - default
                new Fill(new PatternFill() { PatternType = PatternValues.Gray125 }), // Index 1 - default
                new Fill(new PatternFill(new ForegroundColor { Rgb = new HexBinaryValue() { Value = "66666666" } })
                { PatternType = PatternValues.Solid }) // Index 2 - header
            );

        Borders borders = new Borders(
                new Border(), // index 0 default
                new Border( // index 1 black border
                    new LeftBorder(new Color() { Auto = true }) { Style = BorderStyleValues.Thin },
                    new RightBorder(new Color() { Auto = true }) { Style = BorderStyleValues.Thin },
                    new TopBorder(new Color() { Auto = true }) { Style = BorderStyleValues.Thin },
                    new BottomBorder(new Color() { Auto = true }) { Style = BorderStyleValues.Thin },
                    new DiagonalBorder())
            );

        CellFormats cellFormats = new CellFormats(
                new CellFormat(), // default
                new CellFormat { FontId = 0, FillId = 0, BorderId = 1, ApplyBorder = true }, // body
                new CellFormat { FontId = 1, FillId = 2, BorderId = 1, ApplyFill = true } // header
            );

        styleSheet = new Stylesheet(fonts, fills, borders, cellFormats);

        return styleSheet;
    }

3) Dan metode ConstructCell Anda,

private Cell ConstructCell(string value, CellValues dataType, uint styleIndex = 0)
{
    return new Cell()
    {
        CellValue = new CellValue(value),
        DataType = new EnumValue<CellValues>(dataType),
        StyleIndex = styleIndex
    };
}

4) Dan panggil metode Anda di atas seperti

Jika Anda tidak ingin menerapkan gaya maka gunakan di bawah ini

ConstructCell(a.FieldCaption, CellValues.String));

Dan jika Anda ingin menerapkan gaya pada sel tubuh gunakan di bawah ini

ConstructCell(a.FieldCaption, CellValues.String, 1);

Dan jika Anda ingin menerapkan gaya pada sel header, gunakan di bawah ini

ConstructCell(a.FieldCaption, CellValues.String, 2);
person er-sho    schedule 14.02.2019
comment
Terima kasih banyak atas usaha Anda. Biarkan saya mencoba dengan ini - person Dhanil Dinesan; 14.02.2019
comment
Ini menunjukkan kesalahan sebelum membuka excel Catatan yang Diperbaiki: Informasi sel dari bagian /xl/worksheets/sheet1.xml dan semua kolom berwarna sama yaitu Merah - person Dhanil Dinesan; 14.02.2019
comment
tunjukkan pada saya bagaimana Anda menerapkan jawaban saya pada kode Anda? tambahkan kode Anda di posting Anda - person er-sho; 14.02.2019
comment
Tambahkan kode stylePart ini tepat di bawah baris ini =› workbookPart.Workbook = new Workbook(); lihat langkah saya 1 - person er-sho; 14.02.2019
comment
Dan jangan sembunyikan kode apa pun di dalam GenerateStylesheet. periksa dulu. Jika semuanya berfungsi dengan baik maka Anda bebas menambah atau menghapus kode di dalam metode GenerateStylesheet - person er-sho; 14.02.2019
comment
aku mencoba seperti yang kamu katakan. Sekarang kesalahannya hilang tetapi sekarang dapatkan seperti yang saya dapatkan lebih awal. Semua nama kolom berwarna merah - person Dhanil Dinesan; 14.02.2019
comment
jawaban diperbarui silakan salin GenerateStylesheet apa adanya dan dalam metode ConstructCell panggil 0 tanpa biaya, 1 untuk sel isi dan 2 untuk sel header - person er-sho; 14.02.2019
comment
Sekarang tidak apa-apa. Kolom yang dipilih mendapatkan batas. saya memberi mereka warna merah dengan ` new Color() { Rgb = ff0000 }` this . tapi warnanya tidak ada - person Dhanil Dinesan; 14.02.2019
comment
ya OpenXml mendukung sangat sedikit warna yang perlu Anda cari di situs resmi xml terbuka - person er-sho; 14.02.2019
comment
Tentu saja. Terima kasih banyak - person Dhanil Dinesan; 14.02.2019
comment
senang bertemu dengan Anda lagi, saya ragu tentang subjek ini, (yang unggul). Saya pikir Anda dapat membantu saya, saya ingin menambahkan baris baru sambil mengulang, saya lelah dengan metode yang berbeda tetapi gagal, dapatkah Anda membantu saya dalam hal ini. jika bisa, saya bisa memposting kodenya di sini - person Dhanil Dinesan; 01.10.2019
comment
Saya pikir lebih baik menambahkan pertanyaan baru dengan semua kebutuhan Anda dan memberi saya tautan. - person er-sho; 02.10.2019
comment
terima kasih banyak telah membalas saya, saya menemukan solusi dan berhasil. - person Dhanil Dinesan; 02.10.2019