Skip to content

Commit e036cfd

Browse files
authored
Add new function: get_col_width (#14)
1 parent 5082cae commit e036cfd

File tree

5 files changed

+64
-1
lines changed

5 files changed

+64
-1
lines changed

excelize.py

+31
Original file line numberDiff line numberDiff line change
@@ -1669,6 +1669,37 @@ def get_col_visible(self, sheet: str, col: str) -> bool:
16691669
return res.val
16701670
raise RuntimeError(err)
16711671

1672+
def get_col_width(self, sheet: str, col: str) -> float:
1673+
"""
1674+
Get column width by given worksheet name and column name.
1675+
1676+
Args:
1677+
sheet (str): The worksheet name
1678+
col (str): The column name
1679+
1680+
Returns:
1681+
float: Return the column width if no error occurred, otherwise
1682+
raise a RuntimeError with the message.
1683+
1684+
Example:
1685+
For example, get width of column D in Sheet1:
1686+
1687+
```python
1688+
try:
1689+
width = f.get_col_width("Sheet1", "D")
1690+
except RuntimeError as err:
1691+
print(err)
1692+
```
1693+
"""
1694+
lib.GetColWidth.restype = types_go._Float64ErrorResult
1695+
res = lib.GetColWidth(
1696+
self.file_index, sheet.encode(ENCODE), col.encode(ENCODE)
1697+
)
1698+
err = res.err.decode(ENCODE)
1699+
if not err:
1700+
return res.val
1701+
raise RuntimeError(err)
1702+
16721703
def get_default_font(self) -> str:
16731704
"""
16741705
Get the default font name currently set in the workbook. The spreadsheet

main.go

+16
Original file line numberDiff line numberDiff line change
@@ -1173,6 +1173,22 @@ func GetColVisible(idx int, sheet, col *C.char) C.struct_BoolErrorResult {
11731173
return C.struct_BoolErrorResult{val: C._Bool(val), err: C.CString(emptyString)}
11741174
}
11751175

1176+
// GetColWidth provides a function to get column width by given worksheet name
1177+
// and column name. This function is concurrency safe.
1178+
//
1179+
//export GetColWidth
1180+
func GetColWidth(idx int, sheet, col *C.char) C.struct_Float64ErrorResult {
1181+
f, ok := files.Load(idx)
1182+
if !ok {
1183+
return C.struct_Float64ErrorResult{val: C.double(0), err: C.CString(errFilePtr)}
1184+
}
1185+
val, err := f.(*excelize.File).GetColWidth(C.GoString(sheet), C.GoString(col))
1186+
if err != nil {
1187+
return C.struct_Float64ErrorResult{val: C.double(val), err: C.CString(err.Error())}
1188+
}
1189+
return C.struct_Float64ErrorResult{val: C.double(val), err: C.CString(emptyString)}
1190+
}
1191+
11761192
// GetDefaultFont provides the default font name currently set in the
11771193
// workbook. The spreadsheet generated by excelize default font is Calibri.
11781194
//

test_excelize.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -1176,10 +1176,15 @@ def test_cell_rich_text(self):
11761176
f.set_row_height("Sheet1", 0, 35)
11771177
self.assertEqual(str(context.exception), "invalid row number 0")
11781178

1179-
self.assertIsNone(f.set_col_width("Sheet1", "A", "A", 44))
1179+
self.assertIsNone(f.set_col_width("Sheet1", "A", "A", 44.5))
11801180
with self.assertRaises(RuntimeError) as context:
11811181
f.set_col_width("SheetN", "A", "A", 44)
11821182
self.assertEqual(str(context.exception), "sheet SheetN does not exist")
1183+
self.assertEqual(f.get_col_width("Sheet1", "A"), 44.5)
1184+
with self.assertRaises(RuntimeError) as context:
1185+
f.get_col_width("SheetN", "A")
1186+
self.assertEqual(str(context.exception), "sheet SheetN does not exist")
1187+
11831188
expected = [
11841189
excelize.RichTextRun(
11851190
text="bold",

types_c.h

+6
Original file line numberDiff line numberDiff line change
@@ -728,6 +728,12 @@ struct BoolErrorResult
728728
char *err;
729729
};
730730

731+
struct Float64ErrorResult
732+
{
733+
double val;
734+
char *err;
735+
};
736+
731737
struct StringArrayErrorResult
732738
{
733739
int ArrLen;

types_go.py

+5
Original file line numberDiff line numberDiff line change
@@ -704,6 +704,11 @@ class _BoolErrorResult(Structure):
704704
("err", c_char_p),
705705
]
706706

707+
class _Float64ErrorResult(Structure):
708+
_fields_ = [
709+
("val", c_double),
710+
("err", c_char_p),
711+
]
707712

708713
class _StringArrayErrorResult(Structure):
709714
_fields_ = [

0 commit comments

Comments
 (0)