C# – Tworzenie pliku Excel. część 2.

C# – Tworzenie pliku Excel. część 2.

Dodamy teraz arkusz stylów do Exela.
Utworzymy nową metodę GenerateStylesheet(), która zwraca obiekt StyleSheet.

private Stylesheet GenerateStylesheet()
{
   Stylesheet styleSheet = null;   
   return styleSheet;
}

Utworzymy teraz Czcionki – Fonty.

Czcionki mogą mieć jedno lub więcej elementów podrzędnych Font, z których każdy ma inne właściwości, takie jak FontSize, Bold, Color itp. Dodamy teraz kod w metodzie GenerateStyleSheet:

Fonts fonts = new Fonts(
    new Font( 
       new FontSize() { Val = 10 }
    ),
    new Font( 
        new FontSize() { Val = 14 },
        new Bold(),
        new Color() { Rgb = "FFFFFF" }
    )
);

Zwróć uwagę, że dodajemy dwa elementy podrzędne Font do obiektu Fonts. Pierwszy z nich to domyślna czcionka używana przez wszystkie komórki, a druga jest specyficzna dla nagłówka.

Teraz dodamy wypełnienie.

Wypełnienia mogą mieć co najmniej jeden element podrzędny Fill, dla którego można ustawić jego kolor ForegroundColor.

Fills fills = new Fills(
   new Fill(new PatternFill() { PatternType = PatternValues.None }),
   new Fill(new PatternFill() { PatternType = PatternValues.Gray125 }),             
   new Fill(new PatternFill(new ForegroundColor { Rgb = new HexBinaryValue() { Value = "66666666" } }) { PatternType = PatternValues.Solid })
);

Excel musi mieć domyślnie pierwsze dwa. Trzeci to styl, jaki chcemy mieć dla naszych komórek nagłówkowych; szare pogrubione tło.

Teraz obramowania – Borders.

Obramowania mogą mieć jedno lub więcej elementów podrzędnych Border, z których każde określa, jak powinno wyglądać obramowanie:

Borders borders = new Borders(
   new Border(),
   new Border(
       new LeftBorder(new Color() { Auto = true }) { Style = BorderStyleValues.Dotted },
       new RightBorder(new Color() { Auto = true }) { Style = BorderStyleValues.Dotted },
       new TopBorder(new Color() { Auto = true }) { Style = BorderStyleValues.Thin },
       new BottomBorder(new Color() { Auto = true }) { Style = BorderStyleValues.Thin },
       new DiagonalBorder())
);

Pierwsza to ramka domyślna, a druga to nasza niestandardowa ramka.

CellFormats

Teraz, gdy ustawilismy nasze niestandardowe formatowanie, możemy utworzyć CellFormats, które mają jedno lub wiele elementów potomnych CellFormat. A Każdy CellFormat otrzymuje indeks Czcionki, Obramowania, Wypełnienie itp. Z którym będzie skojarzony:

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

Na koniec inicjalizujemy obiekt Stylesheet:

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

Teraz możemy dodać styl do skoroszytu.

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

Dodajemy styl do komórek

Teraz, gdy mamy dodany styl do skoroszytu, możemy określić, jaki styl ma posiadać każda komórka. Każda Cell ma właściwość o nazwie StyleIndex, która pobiera indeks stylu, który chcemy zastosować do tej komórki. Modyfikujemy i przekazujemy pożądany indeks stylu:

Row row = new Row();
   row.Append(new Cell() { CellValue = new CellValue("napis test "), DataType = CellValues.String, StyleIndex = 2 },
       new Cell() { CellValue = new CellValue("napis test "), DataType = CellValues.String, StyleIndex = 2 },
       new Cell() { CellValue = new CellValue("napis test "), DataType = CellValues.String, StyleIndex = 2 });

    sheetData.AppendChild(row);

    for (int i = 0; i < 20; i++)
    {
       row = new Row();
       row.Append(new Cell() { CellValue = new CellValue("napis test " + i), DataType = CellValues.String, StyleIndex = 1 },
          new Cell() { CellValue = new CellValue("napis test " + i), DataType = CellValues.String, StyleIndex = 1 },
          new Cell() { CellValue = new CellValue("napis test " + i), DataType = CellValues.String, StyleIndex = 1 },
          new Cell() { CellValue = new CellValue("napis test " + i), DataType = CellValues.String, StyleIndex = 1 },
          new Cell() { CellValue = new CellValue("napis test "), DataType = CellValues.String, StyleIndex = 1 },
          new Cell() { CellValue = new CellValue("napis test " + i), DataType = CellValues.String, StyleIndex = 1 },
          new Cell() { CellValue = new CellValue("napis test "), DataType = CellValues.String, StyleIndex = 1 },
          new Cell() { CellValue = new CellValue("napis test " + i), DataType = CellValues.String, StyleIndex = 1 },
          new Cell() { CellValue = new CellValue("napis test "), DataType = CellValues.String, StyleIndex = 1 });

    sheetData.AppendChild(row);
}

Możemy dodać niestandardową szerokość kolumn.

Columns columns = new Columns(
        new Column 
        {
            Min = 1,
            Max = 1,
            Width = 30,          
            CustomWidth = true      
        },
        new Column 
        {
            Min = 2,
            Max = 5,
            Width = 20,
            CustomWidth = true
        },
        new Column 
        {
            Min = 6,
            Max = 6,
            Width = 40,
            CustomWidth = true
        }
        ...
        );

Na koniec musimy dołączyć kolumny do arkusza roboczego.

workheetPart.Worksheet.AppendChild(columns);

Uruchom aplikację i sprawdź wygenerowany plik Excel!

https://github.com/mariuszjurczenko/ExcelOpenXml

4 comments

  1. Dzień dobry. Ten artykuł był niezwykle fascynujący, zwłaszcza że w zeszły wtorek szukałem przemyśleń na ten temat. Britteny Richard Mima

  2. Po przejrzeniu kilku postów na blogu w Twojej witrynie, bardzo podoba mi się Twoja technika pisania bloga. Hedvig Ignazio Colp

  3. Naprawdę doceniam udostępnienie tego artykułu na blogu. Naprawdę nie mogę się doczekać, aby przeczytać więcej. Fajne. Ginnie Husain Turoff

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *