Skip to content

Commit 90ead84

Browse files
authored
fix: use_columns no longer silently fails when leftmost columns are empty (#438)
1 parent 874c188 commit 90ead84

File tree

3 files changed

+56
-3
lines changed

3 files changed

+56
-3
lines changed

python/tests/test_column_selection.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -857,3 +857,55 @@ def test_use_columns_with_table_and_provided_columns() -> None:
857857

858858
pd_df = table.to_pandas()
859859
pd_assert_frame_equal(pd_df, expected_pd_df)
860+
861+
862+
def test_use_column_range_with_offset_without_table():
863+
excel_reader = fastexcel.read_excel(path_for_fixture("sheet-and-table-with-offset.xlsx"))
864+
865+
sheet = excel_reader.load_sheet("without-table", use_columns="H:I", header_row=9)
866+
867+
expected_pl_df = pl.DataFrame(
868+
{
869+
"Column at H10": [1, 2, 3],
870+
"Column at I10": [4, 5, 6],
871+
}
872+
)
873+
874+
expected_pd_df = pd.DataFrame(
875+
{
876+
"Column at H10": [1, 2, 3],
877+
"Column at I10": [4, 5, 6],
878+
}
879+
)
880+
881+
pl_df = sheet.to_polars()
882+
pl_assert_frame_equal(pl_df, expected_pl_df, check_dtypes=False)
883+
884+
pd_df = sheet.to_pandas()
885+
pd_assert_frame_equal(pd_df, expected_pd_df, check_dtype=False)
886+
887+
888+
def test_use_column_range_with_offset_with_table():
889+
excel_reader = fastexcel.read_excel(path_for_fixture("sheet-and-table-with-offset.xlsx"))
890+
891+
sheet = excel_reader.load_sheet("with-table", use_columns="D:E", header_row=4)
892+
893+
expected_pl_df = pl.DataFrame(
894+
{
895+
"Column at D5": [1, 2, 3, 4],
896+
"Column at E5": [4, 5, 6, 8],
897+
}
898+
)
899+
900+
expected_pd_df = pd.DataFrame(
901+
{
902+
"Column at D5": [1, 2, 3, 4],
903+
"Column at E5": [4, 5, 6, 8],
904+
}
905+
)
906+
907+
pl_df = sheet.to_polars()
908+
pl_assert_frame_equal(pl_df, expected_pl_df, check_dtypes=False)
909+
910+
pd_df = sheet.to_pandas()
911+
pd_assert_frame_equal(pd_df, expected_pd_df, check_dtype=False)

src/types/excelsheet/column_info/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,8 +180,8 @@ impl ColumnInfoNoDtype {
180180
&self.name
181181
}
182182

183-
pub(super) fn index(&self) -> usize {
184-
self.index
183+
pub(super) fn absolute_index(&self) -> usize {
184+
self.absolute_index
185185
}
186186

187187
fn dtype_info<D: CalamineDataProvider>(

src/types/excelsheet/mod.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,8 @@ impl SelectedColumns {
183183
match selected_column {
184184
IdxOrName::Idx(index) => available_columns
185185
.iter()
186-
.position(|col_info| &col_info.index() == index),
186+
// Sheets have absolute column names (A, B, C, ...)
187+
.position(|col_info| &col_info.absolute_index() == index),
187188
IdxOrName::Name(name) => available_columns
188189
.iter()
189190
.position(|col_info| col_info.name() == name.as_str()),

0 commit comments

Comments
 (0)