use anyhow::Context;
use calamine::{open_workbook, Reader, Xlsx};
pub fn excel_to_vec(
path: &str,
sheet_index: usize,
) -> crate::core::error2::Result<Vec<Vec<String>>> {
let mut workbook: Xlsx<_> =
open_workbook(path).with_context(|| format!("failed to open workbook: {}", path))?;
let mut all_rows: Vec<Vec<String>> = Vec::new();
if let Some(Ok(range)) = workbook.worksheet_range_at(sheet_index) {
for row in range.rows() {
let mut row_data: Vec<String> = Vec::new();
for cell in row {
print!("{}\t", cell);
row_data.push(format!("{}", cell));
}
all_rows.push(row_data);
println!();
}
}
Ok(all_rows)
}
pub fn write_excel(path: &str, data: &[Vec<String>]) -> crate::core::error2::Result<bool> {
let mut book = umya_spreadsheet::new_file();
let mut sheet = book.get_sheet_mut(&0);
for (row_idx, row) in data.iter().enumerate() {
for (col_idx, value) in row.iter().enumerate() {
sheet
.as_mut()
.unwrap()
.get_cell_mut(((col_idx + 1) as u32, (row_idx + 1) as u32))
.set_value(value);
}
}
umya_spreadsheet::writer::xlsx::write(&book, path)
.with_context(|| format!("failed to write workbook: {}", path))?;
Ok(true)
}