Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions excelize.py
Original file line number Diff line number Diff line change
Expand Up @@ -1669,6 +1669,37 @@ def get_col_visible(self, sheet: str, col: str) -> bool:
return res.val
raise RuntimeError(err)

def get_col_width(self, sheet: str, col: str) -> float:
"""
Get column width by given worksheet name and column name.

Args:
sheet (str): The worksheet name
col (str): The column name

Returns:
float: Return the column width if no error occurred, otherwise
raise a RuntimeError with the message.

Example:
For example, get width of column D in Sheet1:

```python
try:
width = f.get_col_width("Sheet1", "D")
except RuntimeError as err:
print(err)
```
"""
lib.GetColWidth.restype = types_go._Float64ErrorResult
res = lib.GetColWidth(
self.file_index, sheet.encode(ENCODE), col.encode(ENCODE)
)
err = res.err.decode(ENCODE)
if not err:
return res.val
raise RuntimeError(err)

def get_default_font(self) -> str:
"""
Get the default font name currently set in the workbook. The spreadsheet
Expand Down
16 changes: 16 additions & 0 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -1173,6 +1173,22 @@ func GetColVisible(idx int, sheet, col *C.char) C.struct_BoolErrorResult {
return C.struct_BoolErrorResult{val: C._Bool(val), err: C.CString(emptyString)}
}

// GetColWidth provides a function to get column width by given worksheet name
// and column name. This function is concurrency safe.
//
//export GetColWidth
func GetColWidth(idx int, sheet, col *C.char) C.struct_Float64ErrorResult {
f, ok := files.Load(idx)
if !ok {
return C.struct_Float64ErrorResult{val: C.double(0), err: C.CString(errFilePtr)}
}
val, err := f.(*excelize.File).GetColWidth(C.GoString(sheet), C.GoString(col))
if err != nil {
return C.struct_Float64ErrorResult{val: C.double(val), err: C.CString(err.Error())}
}
return C.struct_Float64ErrorResult{val: C.double(val), err: C.CString(emptyString)}
}

// GetDefaultFont provides the default font name currently set in the
// workbook. The spreadsheet generated by excelize default font is Calibri.
//
Expand Down
7 changes: 6 additions & 1 deletion test_excelize.py
Original file line number Diff line number Diff line change
Expand Up @@ -1176,10 +1176,15 @@ def test_cell_rich_text(self):
f.set_row_height("Sheet1", 0, 35)
self.assertEqual(str(context.exception), "invalid row number 0")

self.assertIsNone(f.set_col_width("Sheet1", "A", "A", 44))
self.assertIsNone(f.set_col_width("Sheet1", "A", "A", 44.5))
with self.assertRaises(RuntimeError) as context:
f.set_col_width("SheetN", "A", "A", 44)
self.assertEqual(str(context.exception), "sheet SheetN does not exist")
self.assertEqual(f.get_col_width("Sheet1", "A"), 44.5)
with self.assertRaises(RuntimeError) as context:
f.get_col_width("SheetN", "A")
self.assertEqual(str(context.exception), "sheet SheetN does not exist")

expected = [
excelize.RichTextRun(
text="bold",
Expand Down
6 changes: 6 additions & 0 deletions types_c.h
Original file line number Diff line number Diff line change
Expand Up @@ -728,6 +728,12 @@ struct BoolErrorResult
char *err;
};

struct Float64ErrorResult
{
double val;
char *err;
};

struct StringArrayErrorResult
{
int ArrLen;
Expand Down
5 changes: 5 additions & 0 deletions types_go.py
Original file line number Diff line number Diff line change
Expand Up @@ -704,6 +704,11 @@ class _BoolErrorResult(Structure):
("err", c_char_p),
]

class _Float64ErrorResult(Structure):
_fields_ = [
("val", c_double),
("err", c_char_p),
]

class _StringArrayErrorResult(Structure):
_fields_ = [
Expand Down