Języki programowania na platformie.net 2017/18 Instrukcja laboratoryjna nr.3 Biblioteka EPPlus Prowadzący: Tomasz Goluch Wersja: 1.0
I. Biblioteka EPPlus. Cel: Podstawowe informacje o bibliotece EPPlus. Aby zainstalować bibliotekę EPPlus w projekcie najlepiej wykorzystać Nugeta (komenda: Install-Package <NazwaPakietu> [-Project <NazwaProjektu>]) W wyniku instalacji powinniśmy otrzymać następującą referencję: Utworzenie nowego pakietu Excel a var ep = new ExcelPackage(new FileInfo(@"d:\Student\EPPlusLab\lab3.xlsx")); Ustawianie właściwości dokumentu (ExcelPackage implementuje interfejs IDisposable): using (ExcelPackage ep = new ExcelPackage(file)) { ep.workbook.properties.title = "Tytuł"; ep.workbook.properties.author = "Autor"; ep.workbook.properties.comments = "Komentarz"; ep.workbook.properties.company = "Firma"; ep.workbook.properties.setcustompropertyvalue("klucz", "Wartość"); } Dodawanie nowego arkusza do skoroszytu: ExcelWorksheet ws = ep.workbook.worksheets.add("nazwa skoroszytu"); Pobranie obiektu arkusza (po nazwie albo indeksie): ExcelWorksheet ws = ep.workbook.worksheets["nazwa skoroszytu"]; ExcelWorksheet ws = ep.workbook.worksheets[1] Dostęp do komórki 1 : ws.cells[1, 2].Value = 14.5; // 1, 2 współrzędne komórki ws.cells["a2"].formula = "$E5*G$12"; // A2 adres komórki Dostęp do zakresu komórek: ws.cells[5, 7, 9, 10].Value = 14.5 ws.cells["b1:d14"].formula = "$E5*G$12"; // formuła bezwzględna (A1) ws.cells["e2:e4"].formular1c1 = "R[-1]*C[-2]*RC[-1]"; // formuła względna (R1C1 2 ) 1 Nie ma różnicy pomiędzy obiektem reprezentującym jedną komórkę a całym ich zakresem. W pierwszym przypadku będzie to po prostu zakres zawierający tylko jedną komórkę. 2 Więcej o notacji A1 i R1C1 można znaleźć tutaj: https://bettersolutions.com/excel/formulas/cell-referencesa1-r1c1-notation.htm
Utworzenie konspektu danych (grupowanie danych) 3 : ws.column(4).outlinelevel = 1; ws.row(3).outlinelevel = 2; Ukrywanie kolumny: ws.column(1).collapsed = true; Ustalanie szerokości kolumny (można podać wartość minimalną i maksymalną): ws.column(1).width = 2.5; ws.column(1).autofit(); // automatyczne dopasowanie do zawartości Autodopasowanie szerokości wszystkich kolumn (można podać wartość minimalną i maksymalną): ws.cells.autofitcolumns(0); Wyłączenie wyświetlania linii siatki: ws.view.showgridlines = false; Pobranie zakresu komórek (Klasa ExcelRange implementuje IDisposable oraz IEnumerable): using ( ExcelRange range = worksheet.cells[1, 1, 10, 20] ) {... } Wczytanie z kolekcji. Należy podać adres komórki startowej. Kolumny będą odpowiadać kolejno zdefiniowanym właściwościom w klasie, a rzędy kolejnym obiektom z kolekcji. Ustawienie PrintHeaders na true doda wiersz nagłówkowy z nazwami właściwości klasy: ws.cells["a1"].loadfromcollection(collection: items, PrintHeaders: true); Pobranie adresu komórek: string adr = new ExcelAddress(4, 4, 6, 8).Address; Scalanie komórek: ws.cells[5, 6, 5, 9].Merge = true; ws.cells["a5:e5"].merge = true; Dodanie formuły liczącej średnią z zakresu 4 : range.formula = string.format("average({0})", adr); Formatowanie wyglądu komórek (właściwość Style): range.style.font.italic = true; range.style.fill.patterntype = ExcelFillStyle.DarkUp; range.style.fill.backgroundcolor.setcolor(color.aquamarine); range.style.font.color.setcolor(color.fromargb(0, 0, 255)); range.style.border.top.style = ExcelBorderStyle.Medium 3 Więcej o tworzeniu konspektu danych (grupowanie danych) w arkuszu Excel można znaleźć tutaj: https://support.office.com/pl-pl/article/tworzenie-konspektu-danych-grupowanie-danych-w-arkuszu- 08ce98c4-0063-4d42-8ac7-8278c49e9aff 4 Wykaz dostępnych funkcji i formuł Excela dostępny jest tutaj: https://support.office.com/enus/article/formulas-and-functions-294d9486-b332-48ed-b489-abe7d0f9eda9
Określanie formatu liczbowego komórek 5 : range.style.numberformat.format = "#####"; //123 -> 123 range.style.numberformat.format = "00000"; //123 -> 00123 range.style.numberformat.format = "#,#"; //1234567890 -> 1,234,567,890 range.style.numberformat.format = "00.00"; // 1.2 -> 01.20 range.style.numberformat.format = "#,##0.00"; // 1234567890 -> 1,234,567,890.00 range.style.numberformat.format = "#0.##%"; // 0.092 -> 9.2% range.style.numberformat.format = "@"; //tekst Określanie formatu daty: range.style.numberformat.format = "m/d/yyyy"; Określanie wyrównania: range.style.horizontalalignment = ExcelHorizontalAlignment.Right; Dodawanie tekstu nagłówka (czcionka Times New Roman, rozmiar 22, podkreślona): ws.headerfooter.oddheader.centeredtext = "&22&U&\"Times New Roman,Regular Bold\" Nagłówek"; Dodanie numeru strony w stopce wraz z całkowitą liczbą stron ws.headerfooter.oddfooter.rightalignedtext = string.format("page {0} of {1}", ExcelHeaderFooter.PageNumber, ExcelHeaderFooter.NumberOfPages); Dodanie nazwy arkusza w stopce: ws.headerfooter.oddfooter.centeredtext = ExcelHeaderFooter.SheetName; Dodanie ścieżki do pliku w stopce: ws.headerfooter.oddfooter.leftalignedtext = ExcelHeaderFooter.FilePath + ExcelHeaderFooter.FileName; Dodanie do arkusza wykresu kołowego wraz z zatytułowaniem: var chart = (ws.drawings.addchart("piechart", echarttype.pie3d) as ExcelPieChart); chart.title.text = "Title Text"; Ustalenie pozycji wyświetlania, offset oraz rozmiarów wykresu: //From row 1 colum 5 with five pixels offset chart.setposition(0, 5, 5, 5); chart.setsize(600, 300); Podanie komórek z danymi: ExcelAddress valadd = new ExcelAddress(2, 5, 6, 5); var ser = (chart.series.add(valadd.address, "B2:B6") as ExcelPieChartSerie); Wyświetlanie kategorii oraz wartości procentowych: chart.datalabel.showcategory = true; chart.datalabel.showpercent = true; 5 Więcej o niestandardowych formatach liczbowych Excela tutaj: https://support.office.com/enus/article/create-or-delete-a-custom-number-format-78f2a361-936b-4c03-8772-09fab54be7f4
Formatowanie legendy: chart.legend.border.linestyle = elinestyle.solid; chart.legend.border.fill.style = efillstyle.solidfill; chart.legend.border.fill.color = Color.DarkBlue; II. Operacje na plikach i katalogach. Cel: Zapoznanie z wybranymi klasami przestrzeni System.IO pozwalającymi na zarządzanie strukturą plików i katalogów na dysku. Pobranie obiektu pozwalającego na operacje związane z katalogiem/plikiem, między innymi takie jak: tworzenie, usuwanie, przenoszenie, przeglądanie (w przypadku katalogu): var dir = new DirectoryInfo(@"d:\Student\EPPlusLab\"); var file = new FileInfo(dir.FullName + @"\lab3.xlsx"); Przeglądanie podkatalogów/plików: foreach (DirectoryInfo subdir in dir.getdirectories()) {... } foreach (FileInfo file in dir.getfiles()) {... } Pobieranie nazwy rozszerzenia pliku: string ext = file.extension;