worksheet_views/
worksheet_views.rs1use crabxl::{
3 Cell, CellValue, Pane, PanePosition, PaneState, Result, Row, RowIndex, SaveOptions, SheetView,
4 SheetViews, StyleId, ViewMode, WorkbookEditor, WorkbookReader, WorkbookWriter, WriteOptions,
5};
6use std::{fs::File, io::BufWriter};
7fn views() -> Result<SheetViews> {
8 let mut result = SheetViews::default();
9 let view = &mut result.views[0];
10 view.freeze_at(Some("B3".parse()?))?;
11 view.window_protection = Some(false);
12 view.show_formulas = Some(true);
13 view.show_grid_lines = Some(false);
14 view.show_row_column_headers = Some(false);
15 view.show_zeros = Some(false);
16 view.right_to_left = Some(true);
17 view.tab_selected = Some(true);
18 view.show_ruler = Some(false);
19 view.show_outline_symbols = Some(false);
20 view.default_grid_color = Some(false);
21 view.show_white_space = Some(false);
22 view.zoom_to_fit = Some(true);
23 view.mode = Some(ViewMode::PageLayout);
24 view.top_left_cell = Some("B3".into());
25 view.color_id = Some(12);
26 view.zoom_scale = Some(145);
27 view.zoom_scale_normal = Some(80);
28 view.zoom_scale_sheet_layout = Some(90);
29 view.zoom_scale_page_layout = Some(95);
30 view.selections[2].active_cell_id = Some(2);
31 view.selections[2].ranges = Some("A1 C3:D4".into());
32 result.views.push(SheetView {
33 workbook_view_id: 2,
34 pane: Some(Box::new(Pane {
35 x_split: Some(-1.5),
36 y_split: Some(2.5),
37 top_left_cell: Some("opaque".into()),
38 active_pane: PanePosition::BottomRight,
39 state: PaneState::FrozenSplit,
40 })),
41 ..SheetView::default()
42 });
43 Ok(result)
44}
45fn run() -> Result<()> {
46 let args: Vec<_> = std::env::args().collect();
47 if args.len() != 5 {
48 return Err(crabxl::Error::new(
49 crabxl::ErrorKind::InvalidData,
50 "Usage: worksheet_views create|copy|edit SOURCE OUTPUT ROWS",
51 ));
52 }
53 let mut writer = WorkbookWriter::new(WriteOptions::default())?;
54 match args[1].as_str() {
55 "create" => {
56 let rows: u32 = args[4].parse().map_err(|error| {
57 crabxl::Error::caused_by(crabxl::ErrorKind::InvalidData, "Invalid row count", error)
58 })?;
59 let settings = views()?;
60 println!("VIEW_BYTES={}", settings.memory_bytes());
61 writer.start_sheet_with_views("Sheet", &settings)?;
62 for index in 0..rows {
63 writer.write_row(&Row {
64 index: RowIndex::new(index)?,
65 cells: vec![Cell {
66 address: crabxl::CellAddress::new(index, 0)?,
67 value: CellValue::Integer(i64::from(index)),
68 style: StyleId::new(0),
69 }],
70 })?;
71 }
72 writer.close_sheet()?;
73 println!("TEMP_BYTES={}", writer.stats().peak_temp_bytes);
74 writer.finish(BufWriter::new(File::create(&args[3]).map_err(|error| {
75 crabxl::Error::caused_by(crabxl::ErrorKind::Io, "Cannot create view fixture", error)
76 })?))?;
77 }
78 "copy" => {
79 let mut reader = WorkbookReader::open(&args[2])?;
80 let settings = reader.sheet_views("Sheet")?;
81 println!("VIEW_BYTES={}", settings.memory_bytes());
82 writer.start_sheet_with_views("Sheet", &settings)?;
83 let mut rows = reader.rows("Sheet")?;
84 while let Some(row) = rows.next_row()? {
85 writer.write_row(&row)?;
86 }
87 writer.close_sheet()?;
88 println!("TEMP_BYTES={}", writer.stats().peak_temp_bytes);
89 writer.finish(BufWriter::new(File::create(&args[3]).map_err(|error| {
90 crabxl::Error::caused_by(crabxl::ErrorKind::Io, "Cannot create view fixture", error)
91 })?))?;
92 }
93 "edit" => {
94 let mut editor = WorkbookEditor::open(&args[2])?;
95 editor.set_sheet_views("Sheet", views()?)?;
96 println!("VIEW_BYTES={}", editor.patch_bytes());
97 editor.save(
98 BufWriter::new(File::create(&args[3]).map_err(|error| {
99 crabxl::Error::caused_by(
100 crabxl::ErrorKind::Io,
101 "Cannot create view fixture",
102 error,
103 )
104 })?),
105 SaveOptions::default(),
106 )?;
107 println!("TEMP_BYTES=0");
108 }
109 _ => {
110 return Err(crabxl::Error::new(
111 crabxl::ErrorKind::InvalidData,
112 "Unknown view operation",
113 ));
114 }
115 }
116 Ok(())
117}
118fn main() {
119 if let Err(error) = run() {
120 eprintln!("{error}");
121 std::process::exit(1);
122 }
123}