Skip to main content

table_demo/
table_demo.rs

1use ppt_rs::generator::{SlideContent, Table, TableRow, TableCell, create_pptx_with_content};
2
3fn main() -> Result<(), Box<dyn std::error::Error>> {
4    let slides = vec![
5        // Slide 1: Title
6        SlideContent::new("Table Examples")
7            .add_bullet("Demonstrating table rendering in PPTX"),
8
9        // Slide 2: Simple 2x3 table
10        SlideContent::new("Employee Data")
11            .table(create_employee_table()),
12
13        // Slide 3: Styled table with colors
14        SlideContent::new("Sales Summary")
15            .table(create_sales_table()),
16
17        // Slide 4: Data table
18        SlideContent::new("Quarterly Results")
19            .table(create_quarterly_table()),
20    ];
21
22    let pptx_data = create_pptx_with_content("Table Demo", slides)?;
23    std::fs::write("table_demo.pptx", pptx_data)?;
24    println!("✓ Created table_demo.pptx with 4 slides containing tables");
25
26    Ok(())
27}
28
29fn create_employee_table() -> Table {
30    let header_cells = vec![
31        TableCell::new("Name").bold().background_color("4F81BD"),
32        TableCell::new("Department").bold().background_color("4F81BD"),
33        TableCell::new("Status").bold().background_color("4F81BD"),
34    ];
35    let header_row = TableRow::new(header_cells);
36
37    let rows = vec![
38        TableRow::new(vec![
39            TableCell::new("Alice Johnson"),
40            TableCell::new("Engineering"),
41            TableCell::new("Active"),
42        ]),
43        TableRow::new(vec![
44            TableCell::new("Bob Smith"),
45            TableCell::new("Sales"),
46            TableCell::new("Active"),
47        ]),
48        TableRow::new(vec![
49            TableCell::new("Carol Davis"),
50            TableCell::new("Marketing"),
51            TableCell::new("On Leave"),
52        ]),
53        TableRow::new(vec![
54            TableCell::new("David Wilson"),
55            TableCell::new("Engineering"),
56            TableCell::new("Active"),
57        ]),
58        TableRow::new(vec![
59            TableCell::new("Emma Brown"),
60            TableCell::new("HR"),
61            TableCell::new("Active"),
62        ]),
63    ];
64
65    Table::new(
66        vec![vec![header_row], rows].concat(),
67        vec![2000000, 2500000, 1500000],
68        500000,
69        1500000,
70    )
71}
72
73fn create_sales_table() -> Table {
74    let header_cells = vec![
75        TableCell::new("Product").bold().background_color("003366"),
76        TableCell::new("Revenue").bold().background_color("003366"),
77        TableCell::new("Growth").bold().background_color("003366"),
78    ];
79    let header_row = TableRow::new(header_cells);
80
81    let rows = vec![
82        TableRow::new(vec![
83            TableCell::new("Cloud Services"),
84            TableCell::new("$450K"),
85            TableCell::new("+28%"),
86        ]),
87        TableRow::new(vec![
88            TableCell::new("Enterprise Suite"),
89            TableCell::new("$320K"),
90            TableCell::new("+15%"),
91        ]),
92        TableRow::new(vec![
93            TableCell::new("Developer Tools"),
94            TableCell::new("$280K"),
95            TableCell::new("+42%"),
96        ]),
97        TableRow::new(vec![
98            TableCell::new("Mobile App"),
99            TableCell::new("$195K"),
100            TableCell::new("+35%"),
101        ]),
102        TableRow::new(vec![
103            TableCell::new("Support Services"),
104            TableCell::new("$155K"),
105            TableCell::new("+12%"),
106        ]),
107    ];
108
109    Table::new(
110        vec![vec![header_row], rows].concat(),
111        vec![2200000, 2000000, 1800000],
112        500000,
113        1500000,
114    )
115}
116
117fn create_quarterly_table() -> Table {
118    let header_cells = vec![
119        TableCell::new("Quarter").bold().background_color("1F497D"),
120        TableCell::new("Revenue").bold().background_color("1F497D"),
121        TableCell::new("Profit").bold().background_color("1F497D"),
122    ];
123    let header_row = TableRow::new(header_cells);
124
125    let q1_cells = vec![
126        TableCell::new("Q1 2025"),
127        TableCell::new("$450K"),
128        TableCell::new("$90K"),
129    ];
130    let q1 = TableRow::new(q1_cells);
131
132    let q2_cells = vec![
133        TableCell::new("Q2 2025"),
134        TableCell::new("$520K"),
135        TableCell::new("$110K"),
136    ];
137    let q2 = TableRow::new(q2_cells);
138
139    let q3_cells = vec![
140        TableCell::new("Q3 2025"),
141        TableCell::new("$580K"),
142        TableCell::new("$130K"),
143    ];
144    let q3 = TableRow::new(q3_cells);
145
146    Table::new(
147        vec![header_row, q1, q2, q3],
148        vec![2000000, 2000000, 2000000],
149        500000,
150        1500000,
151    )
152}