You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.7 KiB
65 lines
1.7 KiB
use umya_spreadsheet::Worksheet;
|
|
|
|
#[derive(Debug)]
|
|
pub struct Extractor<'a> {
|
|
sheet: &'a Worksheet,
|
|
pub separator: char,
|
|
pub merge_fill: MergeFill,
|
|
pub exclude_hidden: bool,
|
|
}
|
|
|
|
impl<'a> Extractor<'a> {
|
|
pub fn new(sheet: &'a Worksheet) -> Self {
|
|
Extractor {
|
|
sheet,
|
|
separator: ';',
|
|
merge_fill: MergeFill::None,
|
|
exclude_hidden: true,
|
|
}
|
|
}
|
|
|
|
fn is_row_hidden(&self, row_index: u32) -> Option<bool> {
|
|
if let Some(row) = self.sheet.get_row_dimension(&row_index) {
|
|
if *row.get_hidden() {
|
|
return Some(false);
|
|
} else {
|
|
return Some(true);
|
|
}
|
|
}
|
|
None
|
|
}
|
|
|
|
fn is_column_hidden(&self, column_index: u32) -> Option<bool> {
|
|
if let Some(column) = self.sheet.get_column_dimension_by_number(&column_index) {
|
|
if *column.get_hidden() {
|
|
return Some(false);
|
|
} else {
|
|
return Some(true);
|
|
}
|
|
}
|
|
None
|
|
}
|
|
|
|
fn is_cell_in_merge(&self, row_index: u32, column_index: u32) -> bool {
|
|
let merges = self.sheet.get_merge_cells();
|
|
for merge in merges {
|
|
if row_index >= *merge.get_coordinate_start_row().unwrap().get_num()
|
|
&& row_index <= *merge.get_coordinate_end_row().unwrap().get_num()
|
|
&& column_index >= *merge.get_coordinate_start_col().unwrap().get_num()
|
|
&& column_index <= *merge.get_coordinate_end_col().unwrap().get_num()
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
false
|
|
}
|
|
}
|
|
|
|
#[derive(Debug)]
|
|
pub enum MergeFill {
|
|
None,
|
|
Horizontal,
|
|
Vertical,
|
|
Both,
|
|
}
|