pptx_tables/
pptx_tables.rs1use std::path::{Path, PathBuf};
8
9use office_toolkit::SaveToFile;
10use office_toolkit::drawing::{Color, Fill, TextBody, TextParagraph, TextRun};
11use office_toolkit::powerpoint::{
12 Shape, SlideTable, SlideTableStyle, TableCell, TableRow, TableStylePart,
13};
14use office_toolkit::prelude::*;
15
16fn main() -> office_toolkit::Result<()> {
17 let path = output_path("pptx_tables.pptx");
18
19 let plain_table = SlideTable::new(2, "Plain table", 5_000_000, 1_500_000)
20 .with_offset(838_200, 838_200)
21 .with_column_widths(vec![2_500_000, 2_500_000])
22 .with_row(
23 TableRow::new(500_000)
24 .with_cell(cell("Name"))
25 .with_cell(cell("Score")),
26 )
27 .with_row(
28 TableRow::new(500_000)
29 .with_cell(cell("Alice"))
30 .with_cell(cell("92")),
31 )
32 .with_row(
33 TableRow::new(500_000)
34 .with_cell(cell("Bob"))
35 .with_cell(cell("87")),
36 );
37
38 let merged_table = SlideTable::new(2, "Merged cells", 5_000_000, 1_000_000)
39 .with_offset(838_200, 838_200)
40 .with_column_widths(vec![1_667_000, 1_667_000, 1_666_000])
41 .with_row(
42 TableRow::new(500_000)
43 .with_cell(cell("Spanning header").with_horizontal_span(3))
44 .with_cell(TableCell::horizontally_merged())
45 .with_cell(TableCell::horizontally_merged()),
46 )
47 .with_row(
48 TableRow::new(500_000)
49 .with_cell(cell("A"))
50 .with_cell(cell("B"))
51 .with_cell(cell("C")),
52 );
53
54 let styled_table = SlideTable::new(2, "Styled table", 5_000_000, 1_500_000)
55 .with_offset(838_200, 838_200)
56 .with_style_id("{66BB4812-77A1-49B3-BDF9-0CCEB564D7B5}")
57 .with_style_first_row(true)
58 .with_style_band_rows(true)
59 .with_column_widths(vec![2_500_000, 2_500_000])
60 .with_row(
61 TableRow::new(500_000)
62 .with_cell(cell("Header A"))
63 .with_cell(cell("Header B")),
64 )
65 .with_row(
66 TableRow::new(500_000)
67 .with_cell(cell("1"))
68 .with_cell(cell("2")),
69 )
70 .with_row(
71 TableRow::new(500_000)
72 .with_cell(cell("3"))
73 .with_cell(cell("4")),
74 );
75
76 let presentation = Presentation::new()
77 .with_table_style(
78 SlideTableStyle::new(
79 "{66BB4812-77A1-49B3-BDF9-0CCEB564D7B5}",
80 "Custom Table Style",
81 )
82 .with_first_row(
83 TableStylePart::new()
84 .with_fill(Fill::Solid(Color::Rgb("2E74B5".to_string())))
85 .with_bold(true)
86 .with_text_color(Color::Rgb("FFFFFF".to_string())),
87 )
88 .with_band1_horizontal(
89 TableStylePart::new().with_fill(Fill::Solid(Color::Rgb("F2F2F2".to_string()))),
90 ),
91 )
92 .with_slide(Slide::new().with_shape(Shape::Table(plain_table)))
93 .with_slide(Slide::new().with_shape(Shape::Table(merged_table)))
94 .with_slide(Slide::new().with_shape(Shape::Table(styled_table)));
95
96 presentation.save_to_file(&path)?;
97 println!("Wrote {}", path.display());
98 Ok(())
99}
100
101fn cell(text: &str) -> TableCell {
102 TableCell::new().with_text_body(
103 TextBody::new().with_paragraph(TextParagraph::new().with_run(TextRun::text(text))),
104 )
105}
106
107fn output_path(filename: &str) -> PathBuf {
111 Path::new(env!("CARGO_MANIFEST_DIR"))
112 .join("../../tests-data/output")
113 .join(filename)
114}