fix: Fix cell coordinate ordering in XlsxTool and add unit tests (#4551)

Signed-off-by: kita-sato <230662867+kita-sato@users.noreply.github.com>
This commit is contained in:
kita-sato
2025-09-25 07:01:29 +09:00
committed by GitHub
parent 2db115b46d
commit 66eeed10b3
@@ -73,7 +73,7 @@ impl XlsxTool {
// Iterate through all rows
for row_num in 1..=worksheet.get_highest_row() {
for col_num in 1..=worksheet.get_highest_column() {
if let Some(cell) = worksheet.get_cell((row_num, col_num)) {
if let Some(cell) = worksheet.get_cell((col_num, row_num)) {
let coord = cell.get_coordinate();
max_col = max_col.max(*coord.get_col_num() as usize);
max_row = max_row.max(*coord.get_row_num() as usize);
@@ -87,7 +87,7 @@ impl XlsxTool {
pub fn get_column_names(&self, worksheet: &Worksheet) -> Result<Vec<String>> {
let mut names = Vec::new();
for col_num in 1..=worksheet.get_highest_column() {
if let Some(cell) = worksheet.get_cell((1, col_num)) {
if let Some(cell) = worksheet.get_cell((col_num, 1)) {
names.push(cell.get_value().into_owned());
} else {
names.push(String::new());
@@ -104,7 +104,7 @@ impl XlsxTool {
for row_idx in start_row..=end_row {
let mut row_values = Vec::new();
for col_idx in start_col..=end_col {
let cell_value = if let Some(cell) = worksheet.get_cell((row_idx, col_idx)) {
let cell_value = if let Some(cell) = worksheet.get_cell((col_idx, row_idx)) {
CellValue {
value: cell.get_value().into_owned(),
formula: if cell.get_formula().is_empty() {
@@ -146,7 +146,7 @@ impl XlsxTool {
.context("Worksheet not found")?;
worksheet
.get_cell_mut((row, col))
.get_cell_mut((col, row))
.set_value(value.to_string());
Ok(())
}
@@ -173,7 +173,7 @@ impl XlsxTool {
for row_num in 1..=worksheet.get_highest_row() {
for col_num in 1..=worksheet.get_highest_column() {
if let Some(cell) = worksheet.get_cell((row_num, col_num)) {
if let Some(cell) = worksheet.get_cell((col_num, row_num)) {
let cell_value = if !case_sensitive {
cell.get_value().to_lowercase()
} else {
@@ -192,7 +192,7 @@ impl XlsxTool {
}
pub fn get_cell_value(&self, worksheet: &Worksheet, row: u32, col: u32) -> Result<CellValue> {
let cell = worksheet.get_cell((row, col)).context("Cell not found")?;
let cell = worksheet.get_cell((col, row)).context("Cell not found")?;
Ok(CellValue {
value: cell.get_value().into_owned(),
@@ -323,10 +323,21 @@ mod tests {
assert_eq!(data_cell.value, "Canada");
assert!(data_cell.formula.is_none());
// Test B1 cell (known value from FinancialSample.xlsx)
let b1_cell = xlsx.get_cell_value(worksheet, 1, 2)?;
assert_eq!(b1_cell.value, "Country");
assert!(b1_cell.formula.is_none());
// Test A2 cell (known value from FinancialSample.xlsx)
let a2_cell = xlsx.get_cell_value(worksheet, 2, 1)?;
assert_eq!(a2_cell.value, "Government");
assert!(a2_cell.formula.is_none());
println!(
"Header cell: {:#?}\nData cell: {:#?}",
header_cell, data_cell
);
println!("B1: {:#?}\nA2: {:#?}", b1_cell, a2_cell);
Ok(())
}