Skip to content

Commit 397fcbb

Browse files
authored
Add 2 functions: get_row_outline_level and get_row_height (#22)
- Rename set_row_outline to set_row_outline_level - Update unit tests
1 parent 6ed4788 commit 397fcbb

File tree

3 files changed

+109
-9
lines changed

3 files changed

+109
-9
lines changed

excelize.py

Lines changed: 65 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -779,7 +779,7 @@ def add_comment(self, sheet: str, opts: Comment) -> None:
779779

780780
def add_form_control(self, sheet: str, opts: FormControl) -> None:
781781
"""
782-
Add form control button in a worksheet by given worksheet name and form
782+
Add form control object in a worksheet by given worksheet name and form
783783
control options. Supported form control type: button, check box, group
784784
box, label, option button, scroll bar and spinner. If set macro for the
785785
form control, the workbook extension should be XLSM or XLTM. Scroll
@@ -1554,8 +1554,8 @@ def get_app_props(self) -> Optional[AppProperties]:
15541554
Get document application properties.
15551555
15561556
Returns:
1557-
Optional[AppProperties]: Return the the app properties if no
1558-
error occurred, otherwise raise a RuntimeError with the message.
1557+
Optional[AppProperties]: Return the app properties if no error
1558+
occurred, otherwise raise a RuntimeError with the message.
15591559
"""
15601560
lib.GetAppProps.restype = types_go._GetAppPropsResult
15611561
res = lib.GetAppProps(self.file_index)
@@ -1699,6 +1699,65 @@ def get_cell_value(self, sheet: str, cell: str, *opts: Options) -> str:
16991699
return res.val.decode(ENCODE)
17001700
raise RuntimeError(err)
17011701

1702+
def get_row_outline_level(self, sheet: str, row: int) -> int:
1703+
"""
1704+
Get outline level of a single row by given worksheet name and row
1705+
number.
1706+
1707+
Args:
1708+
sheet (str): The worksheet name
1709+
row (int): The row number
1710+
1711+
Returns:
1712+
int: Return the row outline level if no error occurred, otherwise
1713+
raise a RuntimeError with the message.
1714+
1715+
Example:
1716+
For example, get outline level of row 5 in Sheet1:
1717+
1718+
```python
1719+
try:
1720+
level = f.get_row_outline_level("Sheet1", 5)
1721+
except RuntimeError as err:
1722+
print(err)
1723+
```
1724+
"""
1725+
lib.GetRowOutlineLevel.restype = types_go._IntErrorResult
1726+
res = lib.GetRowOutlineLevel(self.file_index, sheet.encode(ENCODE), row)
1727+
err = res.err.decode(ENCODE)
1728+
if not err:
1729+
return res.val
1730+
raise RuntimeError(err)
1731+
1732+
def get_row_height(self, sheet: str, row: int) -> float:
1733+
"""
1734+
Get row height by given worksheet name and row number.
1735+
1736+
Args:
1737+
sheet (str): The worksheet name
1738+
row (int): The row number
1739+
1740+
Returns:
1741+
float: Return the row height if no error occurred, otherwise
1742+
raise a RuntimeError with the message.
1743+
1744+
Example:
1745+
For example, get height of row 5 in Sheet1:
1746+
1747+
```python
1748+
try:
1749+
height = f.get_row_height("Sheet1", 5)
1750+
except RuntimeError as err:
1751+
print(err)
1752+
```
1753+
"""
1754+
lib.GetRowHeight.restype = types_go._Float64ErrorResult
1755+
res = lib.GetRowHeight(self.file_index, sheet.encode(ENCODE), row)
1756+
err = res.err.decode(ENCODE)
1757+
if not err:
1758+
return res.val
1759+
raise RuntimeError(err)
1760+
17021761
def get_col_outline_level(self, sheet: str, col: str) -> int:
17031762
"""
17041763
Get outline level of a single column by given worksheet name and column
@@ -1975,7 +2034,7 @@ def get_sheet_map(self) -> Dict[int, str]:
19752034
sheets ID, and name maps of the workbook.
19762035
19772036
Returns:
1978-
dict[int, str]: Return the sheet ID and name map if no error
2037+
Dict[int, str]: Return the sheet ID and name map if no error
19792038
occurred, otherwise return an empty dictionary.
19802039
"""
19812040
lib.GetSheetMap.restype = types_go._GetSheetMapResult
@@ -3378,7 +3437,7 @@ def set_row_height(self, sheet: str, row: int, height: float) -> None:
33783437
if err != "":
33793438
raise RuntimeError(err)
33803439

3381-
def set_row_outline(self, sheet: str, row: int, level: int) -> None:
3440+
def set_row_outline_level(self, sheet: str, row: int, level: int) -> None:
33823441
"""
33833442
Set outline level number of a single row by given worksheet name and
33843443
Excel row number. The value of parameter 'level' is 1-7.
@@ -3397,7 +3456,7 @@ def set_row_outline(self, sheet: str, row: int, level: int) -> None:
33973456
33983457
```python
33993458
try:
3400-
f.set_row_outline("Sheet1", 2, 1)
3459+
f.set_row_outline_level("Sheet1", 2, 1)
34013460
except RuntimeError as err:
34023461
print(err)
34033462
```

main.go

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -524,7 +524,7 @@ func AddComment(idx int, sheet *C.char, opts *C.struct_Comment) *C.char {
524524
return C.CString(emptyString)
525525
}
526526

527-
// AddFormControl provides the method to add form control button in a worksheet
527+
// AddFormControl provides the method to add form control object in a worksheet
528528
// by given worksheet name and form control options. Supported form control
529529
// type: button, check box, group box, label, option button, scroll bar and
530530
// spinner. If set macro for the form control, the workbook extension should be
@@ -1229,6 +1229,38 @@ func GetDefaultFont(idx int) C.struct_StringErrorResult {
12291229
return C.struct_StringErrorResult{val: C.CString(val), err: C.CString(emptyString)}
12301230
}
12311231

1232+
// GetRowHeight provides a function to get row height by given worksheet name
1233+
// and row number.
1234+
//
1235+
//export GetRowHeight
1236+
func GetRowHeight(idx int, sheet *C.char, row C.int) C.struct_Float64ErrorResult {
1237+
f, ok := files.Load(idx)
1238+
if !ok {
1239+
return C.struct_Float64ErrorResult{val: C.double(0), err: C.CString(errFilePtr)}
1240+
}
1241+
val, err := f.(*excelize.File).GetRowHeight(C.GoString(sheet), int(row))
1242+
if err != nil {
1243+
return C.struct_Float64ErrorResult{val: C.double(val), err: C.CString(err.Error())}
1244+
}
1245+
return C.struct_Float64ErrorResult{val: C.double(val), err: C.CString(emptyString)}
1246+
}
1247+
1248+
// GetRowOutlineLevel provides a function to get outline level of a single row
1249+
// by given worksheet name and row number.
1250+
//
1251+
//export GetRowOutlineLevel
1252+
func GetRowOutlineLevel(idx int, sheet *C.char, row C.int) C.struct_IntErrorResult {
1253+
f, ok := files.Load(idx)
1254+
if !ok {
1255+
return C.struct_IntErrorResult{val: C.int(0), err: C.CString(errFilePtr)}
1256+
}
1257+
val, err := f.(*excelize.File).GetRowOutlineLevel(C.GoString(sheet), int(row))
1258+
if err != nil {
1259+
return C.struct_IntErrorResult{val: C.int(int32(val)), err: C.CString(err.Error())}
1260+
}
1261+
return C.struct_IntErrorResult{val: C.int(int32(val)), err: C.CString(emptyString)}
1262+
}
1263+
12321264
// GetRowVisible provides a function to get visible of a single row by given
12331265
// worksheet name and Excel row number.
12341266
//

test_excelize.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -349,9 +349,14 @@ def test_style(self):
349349
with self.assertRaises(RuntimeError) as context:
350350
_ = f.get_col_outline_level("SheetN", "D")
351351
self.assertEqual(str(context.exception), "sheet SheetN does not exist")
352-
self.assertIsNone(f.set_row_outline("Sheet1", 2, 1))
352+
353+
self.assertIsNone(f.set_row_outline_level("Sheet1", 2, 1))
354+
with self.assertRaises(RuntimeError) as context:
355+
f.set_row_outline_level("SheetN", 2, 1)
356+
self.assertEqual(str(context.exception), "sheet SheetN does not exist")
357+
self.assertEqual(f.get_row_outline_level("Sheet1", 2), 1)
353358
with self.assertRaises(RuntimeError) as context:
354-
f.set_row_outline("SheetN", 2, 1)
359+
_ = f.get_row_outline_level("SheetN", 2)
355360
self.assertEqual(str(context.exception), "sheet SheetN does not exist")
356361

357362
self.assertIsNone(f.set_sheet_background("Sheet2", "chart.png"))
@@ -1229,6 +1234,10 @@ def test_cell_hyperlink(self):
12291234
def test_cell_rich_text(self):
12301235
f = excelize.new_file()
12311236
self.assertIsNone(f.set_row_height("Sheet1", 1, 35))
1237+
self.assertEqual(f.get_row_height("Sheet1", 1), 35)
1238+
with self.assertRaises(RuntimeError) as context:
1239+
f.get_row_height("SheetN", 1)
1240+
self.assertEqual(str(context.exception), "sheet SheetN does not exist")
12321241

12331242
with self.assertRaises(RuntimeError) as context:
12341243
f.set_row_height("Sheet1", 0, 35)

0 commit comments

Comments
 (0)