Struct calamine::Range[][src]

pub struct Range<T: CellType> { /* fields omitted */ }

A struct which represents a squared selection of cells

Implementations

impl<T: CellType> Range<T>[src]

pub fn new(start: (u32, u32), end: (u32, u32)) -> Range<T>[src]

Creates a new non-empty Range

When possible, prefer the more efficient Range::from_sparse

Panics

Panics if start.0 > end.0 or start.1 > end.1

pub fn empty() -> Range<T>[src]

Creates a new empty range

pub fn start(&self) -> Option<(u32, u32)>[src]

Get top left cell position (row, column)

pub fn end(&self) -> Option<(u32, u32)>[src]

Get bottom right cell position (row, column)

pub fn width(&self) -> usize[src]

Get column width

pub fn height(&self) -> usize[src]

Get column height

pub fn get_size(&self) -> (usize, usize)[src]

Get size in (height, width) format

pub fn is_empty(&self) -> bool[src]

Is range empty

pub fn from_sparse(cells: Vec<Cell<T>>) -> Range<T>[src]

Creates a Range from a coo sparse vector of Cells.

Coordinate list (COO) is the natural way cells are stored Inner size is defined only by non empty.

cells: Vec of non empty Cells, sorted by row

Panics

panics when a Cell row is lower than the first Cell row or bigger than the last Cell row.

pub fn set_value(&mut self, absolute_position: (u32, u32), value: T)[src]

Set inner value from absolute position

Remarks

Will try to resize inner structure if the value is out of bounds. For relative positions, use Index trait

Try to avoid this method as much as possible and prefer initializing the Range with from_sparse constructor.

Panics

If absolute_position > Cell start

Examples

use calamine::{Range, DataType};

let mut range = Range::new((0, 0), (5, 2));
assert_eq!(range.get_value((2, 1)), Some(&DataType::Empty));
range.set_value((2, 1), DataType::Float(1.0));
assert_eq!(range.get_value((2, 1)), Some(&DataType::Float(1.0)));

pub fn get_value(&self, absolute_position: (u32, u32)) -> Option<&T>[src]

Get cell value from absolute position.

If the absolute_position is out of range, returns None, else returns the cell value. The coordinate format is (row, column).

Warnings

For relative positions, use Index trait

Remarks

Absolute position is in sheet referential while relative position is in range referential.

For instance if we consider range C2:H38:

  • (0, 0) absolute is "A1" and thus this function returns None
  • (0, 0) relative is "C2" and is returned by the Index trait (i.e my_range[(0, 0)])

Examples

use calamine::{Range, DataType};

let range: Range<usize> = Range::new((1, 0), (5, 2));
assert_eq!(range.get_value((0, 0)), None);
assert_eq!(range[(0, 0)], 0);

pub fn get(&self, relative_position: (usize, usize)) -> Option<&T>[src]

Get cell value from relative position.

pub fn rows(&self) -> Rows<'_, T>

Notable traits for Rows<'a, T>

impl<'a, T: 'a + CellType> Iterator for Rows<'a, T> type Item = &'a [T];
[src]

Get an iterator over inner rows

Examples

use calamine::{Range, DataType};

let range: Range<DataType> = Range::new((0, 0), (5, 2));
// with rows item row: &[DataType]
assert_eq!(range.rows().map(|r| r.len()).sum::<usize>(), 18);

pub fn used_cells(&self) -> UsedCells<'_, T>

Notable traits for UsedCells<'a, T>

impl<'a, T: 'a + CellType> Iterator for UsedCells<'a, T> type Item = (usize, usize, &'a T);
[src]

Get an iterator over used cells only

pub fn cells(&self) -> Cells<'_, T>

Notable traits for Cells<'a, T>

impl<'a, T: 'a + CellType> Iterator for Cells<'a, T> type Item = (usize, usize, &'a T);
[src]

Get an iterator over all cells in this range

pub fn deserialize<'a, D>(
    &'a self
) -> Result<RangeDeserializer<'a, T, D>, DeError> where
    T: ToCellDeserializer<'a>,
    D: DeserializeOwned
[src]

Build a RangeDeserializer from this configuration.

Example

fn main() -> Result<(), Error> {
    let path = format!("{}/tests/temperature.xlsx", env!("CARGO_MANIFEST_DIR"));
    let mut workbook: Xlsx<_> = open_workbook(path)?;
    let mut sheet = workbook.worksheet_range("Sheet1")
        .ok_or(Error::Msg("Cannot find 'Sheet1'"))??;
    let mut iter = sheet.deserialize()?;

    if let Some(result) = iter.next() {
        let (label, value): (String, f64) = result?;
        assert_eq!(label, "celsius");
        assert_eq!(value, 22.2222);

        Ok(())
    } else {
        return Err(From::from("expected at least one record but got none"));
    }
}

pub fn range(&self, start: (u32, u32), end: (u32, u32)) -> Range<T>[src]

Build a new Range out of this range

Remarks

Cells within this range will be cloned, cells out of it will be set to Empty

Example

let mut a = Range::new((1, 1), (3, 3));
a.set_value((1, 1), DataType::Bool(true));
a.set_value((2, 2), DataType::Bool(true));

let b = a.range((2, 2), (5, 5));
assert_eq!(b.get_value((2, 2)), Some(&DataType::Bool(true)));
assert_eq!(b.get_value((3, 3)), Some(&DataType::Empty));

let c = a.range((0, 0), (2, 2));
assert_eq!(c.get_value((0, 0)), Some(&DataType::Empty));
assert_eq!(c.get_value((1, 1)), Some(&DataType::Bool(true)));
assert_eq!(c.get_value((2, 2)), Some(&DataType::Bool(true)));

Trait Implementations

impl<T: Clone + CellType> Clone for Range<T>[src]

impl<T: Debug + CellType> Debug for Range<T>[src]

impl<T: Default + CellType> Default for Range<T>[src]

impl<T: CellType> Index<(usize, usize)> for Range<T>[src]

type Output = T

The returned type after indexing.

impl<T: CellType> Index<usize> for Range<T>[src]

type Output = [T]

The returned type after indexing.

impl<T: CellType> IndexMut<(usize, usize)> for Range<T>[src]

impl<T: CellType> IndexMut<usize> for Range<T>[src]

Auto Trait Implementations

impl<T> RefUnwindSafe for Range<T> where
    T: RefUnwindSafe

impl<T> Send for Range<T> where
    T: Send

impl<T> Sync for Range<T> where
    T: Sync

impl<T> Unpin for Range<T> where
    T: Unpin

impl<T> UnwindSafe for Range<T> where
    T: UnwindSafe

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.