Применять несколько цветов к одной ячейке в EPPlus? - PullRequest
0 голосов
/ 02 августа 2020

Я использую EPPlus для создания файла отчета. Существует столбец, который не предназначен для использования в каких-либо логах фильтрации / сортировки c, но содержит построчные данные о теме строки.

Заказчик хочет, чтобы он был заполнен разными цветами как показано на прилагаемом рисунке.

Desired report format

I've already found similar questions and correct answers здесь и здесь , но эти ответы работают только для случая, когда необходимо заполнить всю ячейку один цвет.

Интересно, есть ли способ программно реализовать мой случай с помощью EPPlus, или единственный способ реализовать такую ​​функцию - изменить метаданные ячейки вручную через библиотеку Open XML или даже путем изменения базового XML -файл?

1 Ответ

1 голос
/ 16 августа 2020

Создайте консольное приложение с именем MultipleColorsInACell, скопируйте и вставьте этот код ниже.

using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using System;
using System.Data;
using System.IO;

namespace MultipleColorsInACell
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                WorkbookPart workbookPart = null;

                try
                {
                    using (var memoryStream = new MemoryStream())
                    {
                        using (var excel = SpreadsheetDocument.Create(memoryStream, DocumentFormat.OpenXml.SpreadsheetDocumentType.Workbook, true))
                        {
                            workbookPart = excel.AddWorkbookPart();
                            workbookPart.Workbook = new Workbook();
                            uint sheetId = 1;
                            excel.WorkbookPart.Workbook.Sheets = new Sheets();
                            Sheets sheets = excel.WorkbookPart.Workbook.GetFirstChild<Sheets>();


                            string relationshipId = "rId1";
                            WorksheetPart wSheetPart = workbookPart.AddNewPart<WorksheetPart>(relationshipId);
                            string sheetName = "MultipleColorsInACell";
                            Sheet sheet = new Sheet() { Id = relationshipId, SheetId = sheetId, Name = sheetName };
                            sheets.Append(sheet);

                            Worksheet worksheet = new Worksheet();

                            wSheetPart.Worksheet = worksheet;

                            SheetData sheetData = new SheetData();
                            worksheet.Append(sheetData);

                            string[] excelColumns = new string[] { "A", "B", "C", "D", "E", "F", "G" };


                            Row row1 = new Row() { RowIndex = (UInt32Value)5U, Spans = new ListValue<StringValue>() { InnerText = "9:9" }, DyDescent = 0.3D };

                            Cell cell1 = new Cell() { CellReference = "I5", DataType = CellValues.SharedString };
                            CellValue cellValue1 = new CellValue();
                            cellValue1.Text = "0";

                            cell1.Append(cellValue1);

                            row1.Append(cell1);

                            sheetData.Append(row1);

                            SharedStringTablePart sharedStringTablePart1 = workbookPart.AddNewPart<SharedStringTablePart>("rId4");
                            GenerateSharedStringTablePart1Content(sharedStringTablePart1);


                            excel.Close();
                        }

                        FileStream fileStream = new FileStream(AppDomain.CurrentDomain.BaseDirectory + "MultipleColorsInACell.xlsx", FileMode.Create, FileAccess.Write);
                        memoryStream.WriteTo(fileStream);
                        fileStream.Close();
                        memoryStream.Close();
                    }
                }
                catch (Exception ex)
                {

                    throw ex;
                }
            }
            catch (Exception ex)
            {

                // logging, etc.
            }
        }


        // Generates content of sharedStringTablePart1.
        private static void GenerateSharedStringTablePart1Content(SharedStringTablePart sharedStringTablePart1)
        {
            SharedStringTable sharedStringTable1 = new SharedStringTable() { Count = (UInt32Value)1U, UniqueCount = (UInt32Value)1U };

            SharedStringItem sharedStringItem1 = new SharedStringItem();

            Run run1 = new Run();

            RunProperties runProperties1 = new RunProperties();
            FontSize fontSize4 = new FontSize() { Val = 11D };
            Color color4 = new Color() { Rgb = "0A0A09" };
            RunFont runFont1 = new RunFont() { Val = "Calibri" };
            FontFamily fontFamily1 = new FontFamily() { Val = 2 };
            FontScheme fontScheme5 = new FontScheme() { Val = FontSchemeValues.Minor };

            runProperties1.Append(fontSize4);
            runProperties1.Append(color4);
            runProperties1.Append(runFont1);
            runProperties1.Append(fontFamily1);
            runProperties1.Append(fontScheme5);
            Text text1 = new Text();
            text1.Text = "Requested by John S. (regular officer) - 20.10.19,";

            run1.Append(runProperties1);
            run1.Append(text1);

            Run run2 = new Run();

            RunProperties runProperties2 = new RunProperties();
            FontSize fontSize5 = new FontSize() { Val = 11D };
            Color color5 = new Color() { Rgb = "4A79B1" };
            RunFont runFont2 = new RunFont() { Val = "Calibri" };
            FontFamily fontFamily2 = new FontFamily() { Val = 2 };
            FontScheme fontScheme6 = new FontScheme() { Val = FontSchemeValues.Minor };

            runProperties2.Append(fontSize5);
            runProperties2.Append(color5);
            runProperties2.Append(runFont2);
            runProperties2.Append(fontFamily2);
            runProperties2.Append(fontScheme6);
            Text text2 = new Text() { Space = SpaceProcessingModeValues.Preserve };
            text2.Text = "Approved by Franchesco N. (supervising manager) - 22.10.19,";

            run2.Append(runProperties2);
            run2.Append(text2);

            Run run3 = new Run();

            RunProperties runProperties3 = new RunProperties();
            FontSize fontSize6 = new FontSize() { Val = 11D };
            Color color6 = new Color() { Rgb = "728D3C" };
            RunFont runFont3 = new RunFont() { Val = "Calibri" };
            FontFamily fontFamily3 = new FontFamily() { Val = 2 };
            FontScheme fontScheme7 = new FontScheme() { Val = FontSchemeValues.Minor };

            runProperties3.Append(fontSize6);
            runProperties3.Append(color6);
            runProperties3.Append(runFont3);
            runProperties3.Append(fontFamily3);
            runProperties3.Append(fontScheme7);
            Text text3 = new Text();
            text3.Text = "Signed by Koglovomor I. (CTO) - 22.10.19";

            run3.Append(runProperties3);
            run3.Append(text3);

            sharedStringItem1.Append(run1);
            sharedStringItem1.Append(run2);
            sharedStringItem1.Append(run3);

            sharedStringTable1.Append(sharedStringItem1);

            sharedStringTablePart1.SharedStringTable = sharedStringTable1;
        }

    }
}
...