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.