Retrieve a list of the hidden rows or columns in a spreadsheet
Hidden rows and columns are stored in worksheet XML. Rows use a hidden attribute on <row/>; columns use a hidden attribute on <col/>.
Worksheet markup
<cols>
<col min="2" max="2" hidden="1"/>
</cols>
<sheetData>
<row r="3" hidden="1"/>
</sheetData>
Column definitions can cover ranges with min and max, so a single <col/> entry can hide more than one column.
Rust workflow
Find the sheet entry by name, resolve the corresponding worksheet part, then inspect <cols/> and <row/> elements:
#![allow(unused)] fn main() { pub fn get_hidden_rows_or_columns( path: &Path, sheet_name: &str, detect_rows: bool, ) -> Result<Vec<u32>, Box<dyn std::error::Error>> { let document = SpreadsheetDocument::new_from_file_with_settings(path, lazy_settings())?; let workbook_part = document.workbook_part()?; let workbook_xml = workbook_part.data_as_str(&document)?.unwrap_or_default(); let Some(sheet_index) = extract_sheet_names(workbook_xml) .iter() .position(|name| name == sheet_name) else { return Ok(Vec::new()); }; let Some(worksheet_part) = workbook_part.worksheet_parts(&document).nth(sheet_index) else { return Ok(Vec::new()); }; let worksheet_xml = worksheet_part.data_as_str(&document)?.unwrap_or_default(); Ok(if detect_rows { extract_hidden_rows(worksheet_xml) } else { extract_hidden_columns(worksheet_xml) }) } }
Rows and columns are numbered starting at 1. Hidden rows can be collected directly from the r attribute of hidden row elements. Hidden columns need one extra step: expand every hidden col range from min through max, inclusive.