From 5528db1d42b73eea6c37268066aca05140094d07 Mon Sep 17 00:00:00 2001 From: YHTU Date: Sat, 22 Feb 2025 10:15:07 +0000 Subject: [PATCH] Add new func get_sheet_name --- .github/workflows/build.yml | 2 +- excelize.py | 17 +++++++++++++++++ main.go | 12 ++++++++++++ test_excelize.py | 1 + 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e725e16..226de73 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,4 +1,4 @@ -on: [push, pull_request] +on: [push, pull_request, release] name: build jobs: diff --git a/excelize.py b/excelize.py index 71dcb97..0828c9d 100644 --- a/excelize.py +++ b/excelize.py @@ -1740,6 +1740,23 @@ def get_sheet_index(self, sheet: str) -> Tuple[int, Optional[Exception]]: err = res.err.decode(ENCODE) return res.val, None if err == "" else Exception(err) + def get_sheet_name(self, sheet: int) -> str: + """ + Get the sheet name of the workbook by the given sheet index. + If the given sheet index is invalid or the sheet doesn't exist, + it will return an empty string. + + Args: + sheet (int): The worksheet index + + Returns: + str: The sheet name if the index is valid, otherwise an empty string. + """ + lib.GetSheetName.restype = types_go._StringErrorResult + res = lib.GetSheetName(self.file_index, c_int(sheet)) + err = res.err.decode(ENCODE) + return res.val.decode(ENCODE) if err == "" else "" + def get_style(self, style_id: int) -> Tuple[Optional[Style], Optional[Exception]]: """ Get style definition by given style index. diff --git a/main.go b/main.go index 7f326f1..437641a 100644 --- a/main.go +++ b/main.go @@ -1287,6 +1287,18 @@ func GetSheetIndex(idx int, sheet *C.char) C.struct_IntErrorResult { return C.struct_IntErrorResult{val: C.int(idx), err: C.CString(emptyString)} } +// GetSheetName provides a function to get the sheet name by the given worksheet index. +// If the given worksheet index is invalid, it will return an error. +// +//export GetSheetName +func GetSheetName(idx int, sheetIndex int) C.struct_StringErrorResult { + f, ok := files.Load(idx) + if !ok { + return C.struct_StringErrorResult{val: C.CString(emptyString), err: C.CString(errFilePtr)} + } + return C.struct_StringErrorResult{val: C.CString(f.(*excelize.File).GetSheetName(sheetIndex)), err: C.CString(emptyString)} +} + // GetStyle provides a function to get style definition by given style index. // //export GetStyle diff --git a/test_excelize.py b/test_excelize.py index fdd1210..432efc6 100644 --- a/test_excelize.py +++ b/test_excelize.py @@ -293,6 +293,7 @@ def test_style(self): index, err = f.get_sheet_index("Sheet2") self.assertEqual(idx, index) self.assertIsNone(err) + self.assertEqual(f.get_sheet_name(index), "Sheet2") self.assertIsNone(f.set_col_outline_level("Sheet1", "D", 2)) level, err = f.get_col_outline_level("Sheet1", "D")