Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Export danych do word’a i excel’a
1. Export danych do Word’a i Excel’a
Export danych do Word’a i Excel’a z c#
można dokonać na kilka sposobów.
Omówione tu metody to export za pomocą
obiektów com dostarczonych wraz z
pakietem office przez Microsoft oraz
biblioteki zewnętrzne korzystające z
wspomnianych obiektów com lub Open
office XML.
Autor: Kamil Sobecki
2. Obiekty com
Aby korzystać z obiektów com należy zainstalować
pakiet Microsoft office lub pobrać przykładowo
pakiet Microsoft Office XP PIAs. Następnie
należy dodać odpowiednie referencje do
projektu. Są to odpowiednio:
Microsoft Word 11.0 Object Library – dla Word XP
Microsoft Excel 11.0 Object Library – dla Excel XP
lub inne wersje lub pakiety w zależności od
pożądanego pakietu i wersji pakietu office.
4. Obiekty com
W kodzie programu najwygodniej skorzystać
z formuły:
using Word = Microsoft.Office.Interop.Word;
oraz
using Excel = Microsoft.Office.Interop.Excel;
Dzięki temu dalej możemy odwoływać się to
tych przestrzeni nazw za pomocą własnej
nazwy (w tym przypadku „Word” lub
„Excel”).
5. Obiekty com - Word
Pracę z dokumentem zaczynamy od
następującego kodu:
Word.Application word = new Word.Application();
Word.Documents docs = word.Documents;
Word.Document doc = docs.Add();
Otrzymujemy dokument „doc” z którym będziemy
dalej pracować. W zależności od warości
atrybutu word.Visible (bool) otworzy się program
Word wyświetlając nasz dokument lub nie.
6. Obiekty com - Word
W naszym dokumencie możemy utworzyć nowy
paragraf:
Word.Paragraph para1;
para1 = doc.Content.Paragraphs.Add();
i rozpocząć pracę. Przykładowe funkcje:
• Wpisanie tekstu: para1.Range.Text = „tekst";
• Pogrubienie: para1.Range.Font.Bold = 1;
• Rozmiar czcionki: para1.Range.Font.Size = 22;
• Rodzaj czcionki: para1.Range.Font.Name =
"Algerian";
7. Obiekty com - Word
Wynik komend z poprzedniego slajdu:
• Przestrzeń przed paragrafem:
para1.Format.SpaceBefore = 24;
• Po paragrafie: para1.Format.SpaceAfter = 24;
• Wstawić następny paragraf:
para1.Range.InsertParagraphAfter();
Dostępnych jest więcej atrybutów. Niektóre z nich
przedstawię na przykładzie tabeli.
8. Obiekty com - Word
Tworzenie tabeli zaczynamy od: Word.Table table;
Teraz ustalamy miejsce tabeli, tutaj jako koniec
aktualnego dokumentu:
object oEndOfDoc = "endofdoc";
Word.Range wrdRng =
doc.Bookmarks.get_Item(ref
oEndOfDoc).Range;
table = doc.Tables.Add(wrdRng, 3, 5);
9. Obiekty com - Word
Przy tej okazji chciałbym wspomnieć, iż
wywołanie: doc.Tables.Add(wrdRng, 3, 5); jest
możliwe w VS 2010. We wcześniejszych
wersjach musiało by wyglądać następująco:
doc.Tables.Add(wrdRng, 3, 5,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value);
W skrócie dopiero w VS 2010 możemy pomijać
parametry które chcemy aby były domyślne.
10. Obiekty com - Word
Uzupełniamy tabele:
for (r = 1; r <= 3; r++)
{
for (c = 1; c <= 5; c++)
{
strText = "r" + r + "c" + c;
table.Cell(r, c).Range.Text = strText;
}
}
11. Obiekty com - Word
A teraz trochę atrybutów:
table.Rows[1].Range.Font.Italic = 1;
table.Rows[3].Range.Font.Size = 22;
table.Rows[1].Cells[1].Range.Font.StrikeThrough =
1;
table.Rows[1].Cells[2].Range.Font.ColorIndex =
Word.WdColorIndex.wdBrightGreen;
table.Rows[1].Cells[4].Range.Font.Underline =
Word.WdUnderline.wdUnderlineDotDash;
12. Obiekty com - Word
table.Rows[1].Cells[3].Range.Font.Outline = 25;
table.Rows[1].Cells[4].Range.Font.UnderlineColor
= Word.WdColor.wdColorBlue;
table.Rows[1].Cells[5].Range.Font.Animation =
Word.WdAnimation.wdAnimationLasVegasLights;
table.Rows[3].Cells[1].Range.Font.SmallCaps = 1;
table.Rows[3].Cells[2].Range.Font.Scaling = 33;
Większość atrybutów jest oczywista. Font.Animation
dodaje animacje do tekstu, SmallCaps powoduje
wydruk dużych liter w rozmiarze małych a Scaling
skaluje trzcionkę.
13. Obiekty com - Word
Przykładowa tabelka z użyciem powyższych
komend:
14. Obiekty com - Word
Tworzenie przykładowego diagramu:
object chart;
object chartApp;
chart = shape.OLEFormat.Object;
chartApp =
chart.GetType().InvokeMember("Application",
BindingFlags.GetProperty, null, chart, null);
object[] Parameters = new Object[1];
Parameters[0] = 4; //xlLine = 4
15. Obiekty com - Word
chart.GetType().InvokeMember("ChartType",
BindingFlags.SetProperty, null, chart,
Parameters);
chartApp.GetType().InvokeMember("Update",
BindingFlags.InvokeMethod, null, chartApp, null);
chartApp.GetType().InvokeMember("Quit",
BindingFlags.InvokeMethod, null, chartApp, null);
shape.Width = word.InchesToPoints(6.25f);
shape.Height = word.InchesToPoints(3.57f);
17. Obiekty com - Word
Wygenerowany dokument możemy zapisać:
doc.SaveAs(„sciezka_pliku/nazwa.doc”,
Word.WdDocumentType.wdTypeDocument);
i mamy zapisany dokument Word.
18. Obiekty com - Excel
Tworzenie arkuszy xls jest analogiczne do
tworzenia dokumentów doc. Zaczynamy od:
Excel.Application excel = new Excel.Application();
Excel.Workbooks workbooks = excel.Workbooks;
Excel.Workbook workbook = workbooks.Add();
Excel.Worksheet worksheet = excel.ActiveSheet;
Teraz możemy przystąpić do tworzenia zawartości
aktywnego arkusza. Wpiszmy tekst w
pojedynczą komórkę:
worksheet.Cells[1, "A"] = "Numer";
19. Obiekty com - Excel
Możemy również wpisać godzinę:
worksheet.Cells[2, "B"] = DateTime.Now;
i ustawić formatowanie komórki:
worksheet.Cells[2, "B"].NumberFormat =
"DD-MM-RRRR GG:MM";
na pożądany format daty lub na format liczbowy:
worksheet.Cells[2, "A"].NumberFormat = "0";
Wpisywanie formuł jest równie proste:
worksheet.Range["A11"].Formula = "=SUM(A2:A10)";
20. Obiekty com - Excel
Obramowanie komórki lub obszaru można ustawić
za pomocą:
worksheet.Range["A11"].Borders.ColorIndex = 8;
worksheet.Range["A11"].Borders.LineStyle =
Excel.XlLineStyle.xlDouble;
A worksheet.Columns[2].AutoFit();
spowoduje ustawienie szerokości kolumny B
automatycznie do zawartości jej komórek.
21. Obiekty com - Excel
Łączenia komórek dokunujemy dzięki:
Excel.Range range2 =
worksheet.get_Range("D1", "E2");
range2.Merge();
I ustawiamy wyrównanie w poziomie i w pionie:
range2.HorizontalAlignment =
Excel.XlHAlign.xlHAlignDistributed;
range2.VerticalAlignment =
Excel.XlVAlign.xlVAlignCenter;
22. Obiekty com - Excel
Wiele dostępnych atrybutów pokrywa się z
atrybutami dostępnymi dla Word’a, w
szczególności dotyczących czcionki.
Zapis pliku jest również analogiczny:
workbook.SaveAs(Path.Combine(Environment.Cur
rentDirectory, "example.xls"),
Excel.XlFileFormat.xlWorkbookNormal);
Przykładowy plik wykorzystujący wymienione
komendy:
24. NPOI
NPOI jest .NET’ową wersją projektu POI
napisanego w Javie, pomagającego w
odczycie/zapisie plikow xls, doc, ptt. Nie
wymaga on zainstalowanego pakietu
office na komputerze, ani innych
specjalnych dodatków. Opiera się on o
Open office XML. Aby z niego skorzystać,
wystarczy pobrać kilka plików dll i do
projektu dodać odpowiednie referencje.
26. NPOI
W kodzie źródłowym dołączamy przestrzenie nazw
według potrzeb. W moim przykładowym
projekcie były to:
• using NPOI.XWPF.UserModel;
• using NPOI.HSSF.UserModel;
• using NPOI.HPSF;
• using NPOI.SS.UserModel;
• using NPOI.SS.Util;
• using NPOI.HSSF.Util;
27. NPOI - Word
Tworzenie dokumentu zaczynamy od:
XWPFDocument doc = new XWPFDocument();
Następnie tworzymy paragraf:
XWPFParagraph p1 = doc.CreateParagraph();
I formatujemy go:
p1.SetAlignment(ParagraphAlignment.CENTER);
p1.SetVerticalAlignment(TextAlignment.TOP);
Żemy dodać obramowanie:
p1.SetBorderBottom(Borders.DOUBLE);
29. NPOI - Word
Inne dostępne atrybuty:
r2.SetStrike(true);
r2.SetFontSize(20);
r3.SetSubscript(VerticalAlign.SUPERSCRIPT);
p3.IsWordWrap = true;
p3.SetSpacingLineRule(LineSpacingRule.EXACT);
p3.IndentationFirstLine = 600;
r4.IsItalic = true;
r6.SetColor("dd00dd");
30. NPOI - Word
SetColor przyjmuje jako argument rgb string czyli
wartości poszczególnych kolorów w systemie
szesnastkowym : „rrggbb”.
Listę punktowaną rozpoczynamy od deklaracji:
XWPFNumbering numbering =
doc.CreateNumbering();
string abstractNumId =
numbering.AddAbstractNum();
string numId =
numbering.AddNum(abstractNumId);
31. NPOI - Word
A następnie dodajemy punkty:
p5 = doc.CreateParagraph();
r7 = p5.CreateRun();
r7.SetText("first");
p5.SetNumID(numId, "0");
p5 = doc.CreateParagraph();
r7 = p5.CreateRun();
r7.SetText("first-first");
p5.SetNumID(numId, "1");
i tak dalej.
32. NPOI - Word
Dokument zapisujemy za pomocą:
FileStream out1 = new
FileStream(Path.Combine(Environment.Current
Directory, "example.docx"), FileMode.Create);
doc.Write(out1);
out1.Close();
Poniżej przykładowy dokument z użyciem
wymienionych komend:
36. NPOI - Excel
Uzupełniamy komórki:
cell0.SetCellValue("Product1");
Tworzymy listę wybieraną w obszarze komórek:
CellRangeAddressList rangeList = new
CellRangeAddressList();
rangeList.AddCellRangeAddress(new
CellRangeAddress(1, 3, 1, 1));
DVConstraint dvconstraint =
DVConstraint.CreateFormulaListConstraint("She
et1!$A$2:$A$4");
37. NPOI - Excel
HSSFDataValidation dataValidation = new
HSSFDataValidation(rangeList, dvconstraint);
((HSSFSheet)sheet1).AddValidationData(dataVali
dation);
Możemy obrócić tekst w komórce o x stopni:
ICellStyle style = workbook.CreateCellStyle();
style.Rotation = (short)x;
row.GetCell(0).CellStyle = style;
38. NPOI - Excel
Tworzenie komentarza:
IDrawing patr =
(HSSFPatriarch)sheet1.CreateDrawingPatriarch();
IComment comment1 =
patr.CreateCellComment(new
HSSFClientAnchor(0, 0, 0, 0, 4, 2, 6, 5));
comment1.String = (new HSSFRichTextString("We
can set comments in POI"));
comment1.Author = ("Apache Software Foundation");
39. NPOI - Excel
Przypisanie komentarza do komórki:
cell0.CellComment = (comment1);
Możemy też zrobić to na inny sposób:
HSSFComment comment2 =
(HSSFComment)patr.CreateCellComment(new
HSSFClientAnchor(0, 0, 0, 0, 4, 8, 6, 11));
comment2.SetFillColor(204, 236, 255);
HSSFRichTextString str = new
HSSFRichTextString("Normal body temperature");
comment2.Author = "Bill Gates";
40. NPOI - Excel
Formatujemy kometarz:
IFont font = workbook.CreateFont();
font.FontName = ("Arial");
font.FontHeightInPoints = 10;
font.Boldweight = (short)FontBoldWeight.Bold;
font.Color = HSSFColor.Red.Index;
str.ApplyFont(font);
Dodajemy tekst do komentarza, komentarz do
komórki oraz ustawiamy stałe wyświetlanie:
43. NPOI - Excel
IPatternFormatting patternFmt =
rule.CreatePatternFormatting();
patternFmt.FillBackgroundColor =
NPOI.HSSF.Util.HSSFColor.Red.Index;
CellRangeAddress[] regions = {
new CellRangeAddress(14, 14, 1, 1) };
hscf.AddConditionalFormatting(regions, rule);
W ten sposób pole B15 bedzię miało czerwone tło
jeśli wpiszemy tam liczbę miedzy 3 i 8.
44. NPOI - Excel
Format liczbowy:
IDataFormat format =
workbook.CreateDataFormat();
cellStyle = workbook.CreateCellStyle();
cellStyle.DataFormat =
HSSFDataFormat.GetBuiltinFormat("0.00");
cell0.CellStyle = cellStyle;
Otrzymamy format przecinkowy z dwoma miejscami
po przecinku.
47. Podsumowanie
Obiekty com pozwalają nam na eksport danych do
dokumentów pakietu office, jednak nie bez
komplikacji. Po pierwsze podejście to wymaga
zainstalowania na maszynie pakietu offiece lub
odpowiednieko pakietu. Po drugie tworzenie
dokumentu w ten sposób nie należy do
najprzyjemniejszych. Osobiście miałem spore
problemy z atrybutami, które przyjmują
specyficzne formaty danych. Dodatkowo o
błędzie dowiadujemy się najczęściej podczas
działania programu a nie kompilacji.
48. Podsumowanie
Biblioteka NPOI dostarcza alternatywne
rozwiązanie. Nie wymaga ona instalowanie
niczego na maszynie, a praca z nią jest
przyjemniejsza. Niestety nie jest pozbawiona
wad. Jedną z nich jest niesystematyczność:
niektóre ustawienia dokonujemy za pomocą
atrybutów: r4.IsItalic = true;, a niektóre za
pomocą metod: r1.SetBold(true);. Bibliotekę tą
chroni licencja: Apache License 2.0 (Apache).