From 38ad3b24cb876e21f7b079c005008c8f677940c3 Mon Sep 17 00:00:00 2001 From: hly-717 <2546626370@qq.com> Date: Mon, 10 Feb 2025 09:20:01 +0800 Subject: [PATCH] Add new function: get_col_outline_level (#10) - Update unie tests --- excelize.py | 29 +++++++++++++++++++++++++++++ main.go | 16 ++++++++++++++++ test_excelize.py | 3 +++ 3 files changed, 48 insertions(+) diff --git a/excelize.py b/excelize.py index 4211a46..87c1fec 100644 --- a/excelize.py +++ b/excelize.py @@ -1536,6 +1536,35 @@ def get_cell_value( err = res.err.decode(ENCODE) return res.val.decode(ENCODE), None if err == "" else Exception(err) + def get_col_outline_level( + self, sheet: str, col: str + ) -> Tuple[int, Optional[Exception]]: + """ + Get outline level of a single column by given worksheet name and column + name. + + Args: + sheet (str): The worksheet name + col (str): The column name + + Returns: + Tuple[int, Optional[Exception]]: A tuple containing the column + outline level and an exception if an error occurred, otherwise None. + + Example: + For example, get outline level of column D in Sheet1: + + .. code-block:: python + + level, err = f.get_col_outline_level("Sheet1", "D") + """ + lib.GetColOutlineLevel.restype = types_go._IntErrorResult + res = lib.GetColOutlineLevel( + self.file_index, sheet.encode(ENCODE), col.encode(ENCODE) + ) + err = res.err.decode(ENCODE) + return res.val, None if err == "" else Exception(err) + def get_col_style(self, sheet: str, col: str) -> Tuple[int, Optional[Exception]]: """ Get column style ID by given worksheet name and column name. diff --git a/main.go b/main.go index ae1ca56..189803a 100644 --- a/main.go +++ b/main.go @@ -1126,6 +1126,22 @@ func GetCellValue(idx int, sheet, cell *C.char, opts *C.struct_Options) C.struct return C.struct_StringErrorResult{val: C.CString(val), err: C.CString(emptyString)} } +// GetColOutlineLevel provides a function to get outline level of a single +// column by given worksheet name and column name. +// +//export GetColOutlineLevel +func GetColOutlineLevel(idx int, sheet, col *C.char) C.struct_IntErrorResult { + f, ok := files.Load(idx) + if !ok { + return C.struct_IntErrorResult{val: C.int(0), err: C.CString(errFilePtr)} + } + val, err := f.(*excelize.File).GetColOutlineLevel(C.GoString(sheet), C.GoString(col)) + if err != nil { + return C.struct_IntErrorResult{val: C.int(int32(val)), err: C.CString(err.Error())} + } + return C.struct_IntErrorResult{val: C.int(int32(val)), err: C.CString(emptyString)} +} + // GetColStyle provides a function to get column style ID by given worksheet // name and column name. This function is concurrency safe. // diff --git a/test_excelize.py b/test_excelize.py index cbea28b..a5f4636 100644 --- a/test_excelize.py +++ b/test_excelize.py @@ -288,6 +288,9 @@ def test_style(self): self.assertIsNone(err) self.assertIsNone(f.set_col_outline_level("Sheet1", "D", 2)) + level, err = f.get_col_outline_level("Sheet1", "D") + self.assertEqual(level, 2) + self.assertIsNone(err) self.assertIsNone(f.set_row_outline("Sheet1", 2, 1)) self.assertIsNone(f.set_sheet_background("Sheet2", "chart.png"))