mirror of
https://github.com/storytold/gridcraft.git
synced 2026-10-24 10:46:50 -06:00
crates/xlsx/src/chart.rs: 1103's used-range clipping applied in ref_values after 1088's ref_target call.
This commit is contained in:
@@ -297,9 +297,14 @@ fn ref_target(wb: &Workbook, sheet_idx: usize, f: &str) -> Option<(usize, RangeR
|
||||
pub(crate) fn ref_values(wb: &Workbook, sheet_idx: usize, f: &str) -> Option<Vec<Value>> {
|
||||
let (si, mut range) = ref_target(wb, sheet_idx, f)?;
|
||||
let sheet = wb.sheet(si)?;
|
||||
// Whole columns/rows: limit to the used range.
|
||||
// Whole columns/rows: cut the far end at the used range. The start stays put, so point indices keep matching the reference.
|
||||
if let Some(u) = sheet.used_range() {
|
||||
range = range.intersection(&u)?;
|
||||
if range.is_full_cols() {
|
||||
range.end.row = range.end.row.min(u.end.row.max(range.start.row));
|
||||
}
|
||||
if range.is_full_rows() {
|
||||
range.end.col = range.end.col.min(u.end.col.max(range.start.col));
|
||||
}
|
||||
}
|
||||
if range.count() > MAX_CACHE {
|
||||
return None;
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
//! Chart caches keep the position of every point inside the referenced range.
|
||||
|
||||
use gridcraft_core::{CellRef, Value};
|
||||
use gridcraft_model::{Sheet, Workbook};
|
||||
use std::sync::Arc;
|
||||
|
||||
use crate::chart::ref_values;
|
||||
|
||||
fn book() -> Workbook {
|
||||
let mut s = Sheet::new("Data");
|
||||
s.set_value(CellRef::new(3, 0), Value::Number(5.0));
|
||||
Workbook { sheets: vec![Arc::new(s)], ..Workbook::default() }
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn explicit_range_keeps_leading_and_trailing_blanks() {
|
||||
let vals = ref_values(&book(), 0, "Data!$A$3:$A$6").unwrap();
|
||||
assert_eq!(vals, vec![Value::Empty, Value::Number(5.0), Value::Empty, Value::Empty]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn whole_column_still_stops_at_used_range_and_starts_at_top() {
|
||||
let vals = ref_values(&book(), 0, "Data!$A:$A").unwrap();
|
||||
assert_eq!(vals, vec![Value::Empty, Value::Empty, Value::Empty, Value::Number(5.0)]);
|
||||
}
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
mod array_export;
|
||||
mod chart_bool_default;
|
||||
mod chart_ref_offsets;
|
||||
mod csv_tests;
|
||||
mod encrypted_tests;
|
||||
mod fixtures;
|
||||
|
||||
Reference in New Issue
Block a user