Skip to content

Commit 8d26b84

Browse files
committed
Support use formula in chart title, this related for qax-os/excelize#2288
- Add new font and formula fields in ChartTitle data type - Update docs for add_chart function - Update unit tests - Upgrade the dependencies package version - Upgrade GitHub Action packages version
1 parent 8a96280 commit 8d26b84

9 files changed

Lines changed: 143 additions & 91 deletions

File tree

.github/workflows/build.yml

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ jobs:
1010
matrix:
1111
go-version: [1.26.x]
1212
os: [ubuntu-24.04, macos-latest, windows-latest]
13-
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14", "3.15.0-alpha.6"]
13+
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14", "3.15.0-beta.1"]
1414
targetplatform: [x64]
1515

1616
runs-on: ${{ matrix.os }}
@@ -57,7 +57,7 @@ jobs:
5757
run: go build -buildmode=c-shared -o libexcelize.arm64.darwin.dylib main.go && coverage run -m unittest
5858

5959
- name: Codecov
60-
uses: codecov/codecov-action@v5
60+
uses: codecov/codecov-action@v6
6161
env:
6262
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
6363
with:
@@ -99,8 +99,8 @@ jobs:
9999
run: |
100100
docker run --rm -v $PWD:/src -w /src quay.io/pypa/manylinux2014_x86_64 bash -c "
101101
yum install -y wget || true
102-
wget https://go.dev/dl/go1.26.1.linux-amd64.tar.gz && \
103-
tar -C /usr/local -xzf go1.26.1.linux-amd64.tar.gz && \
102+
wget https://go.dev/dl/go1.26.3.linux-amd64.tar.gz && \
103+
tar -C /usr/local -xzf go1.26.3.linux-amd64.tar.gz && \
104104
export PATH=/usr/local/go/bin:\$PATH && \
105105
CGO_ENABLED=1 CC=gcc GOOS=linux GOARCH=amd64 \
106106
go build -buildmode=c-shared -ldflags='-s -w' -trimpath \
@@ -110,8 +110,8 @@ jobs:
110110
111111
docker run --rm -v $PWD:/src -w /src quay.io/pypa/manylinux2014_i686 bash -c "
112112
yum install -y wget || true
113-
wget https://go.dev/dl/go1.26.1.linux-386.tar.gz && \
114-
tar -C /usr/local -xzf go1.26.1.linux-386.tar.gz && \
113+
wget https://go.dev/dl/go1.26.3.linux-386.tar.gz && \
114+
tar -C /usr/local -xzf go1.26.3.linux-386.tar.gz && \
115115
export PATH=/usr/local/go/bin:\$PATH && \
116116
CGO_ENABLED=1 CC=gcc GOOS=linux GOARCH=386 \
117117
go build -buildmode=c-shared -ldflags='-s -w' -trimpath \
@@ -126,8 +126,8 @@ jobs:
126126
run: |
127127
docker run --rm -v $PWD:/src -w /src quay.io/pypa/manylinux2014_aarch64 bash -c "
128128
yum install -y wget || true
129-
wget https://go.dev/dl/go1.26.1.linux-arm64.tar.gz && \
130-
tar -C /usr/local -xzf go1.26.1.linux-arm64.tar.gz && \
129+
wget https://go.dev/dl/go1.26.3.linux-arm64.tar.gz && \
130+
tar -C /usr/local -xzf go1.26.3.linux-arm64.tar.gz && \
131131
export PATH=/usr/local/go/bin:\$PATH && \
132132
CGO_ENABLED=1 CC=gcc GOOS=linux GOARCH=arm64 \
133133
go build -buildmode=c-shared -ldflags='-s -w' -trimpath \
@@ -140,9 +140,9 @@ jobs:
140140
env:
141141
CGO_ENABLED: 1
142142
run: |
143-
wget https://github.com/mstorsjo/llvm-mingw/releases/download/20260324/llvm-mingw-20260324-ucrt-macos-universal.tar.xz
144-
tar -xzf llvm-mingw-20260324-ucrt-macos-universal.tar.xz
145-
export PATH="$(pwd)/llvm-mingw-20260324-ucrt-macos-universal/bin:$PATH"
143+
wget https://github.com/mstorsjo/llvm-mingw/releases/download/20260505/llvm-mingw-20260505-ucrt-macos-universal.tar.xz
144+
tar -xzf llvm-mingw-20260505-ucrt-macos-universal.tar.xz
145+
export PATH="$(pwd)/llvm-mingw-20260505-ucrt-macos-universal/bin:$PATH"
146146
CC=x86_64-w64-mingw32-gcc GOOS=windows GOARCH=amd64 go build -ldflags "-s -w" -buildmode=c-shared -trimpath -o libexcelize.amd64.windows.dll main.go
147147
CC=i686-w64-mingw32-gcc GOOS=windows GOARCH=386 go build -ldflags "-s -w" -buildmode=c-shared -trimpath -o libexcelize.386.windows.dll main.go
148148
CC=aarch64-w64-mingw32-gcc GOOS=windows GOARCH=arm64 go build -ldflags "-s -w" -buildmode=c-shared -trimpath -o libexcelize.arm64.windows.dll main.go

excelize.py

Lines changed: 109 additions & 63 deletions
Large diffs are not rendered by default.

go.mod

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ module github.com/xuri/excelize-py
33
go 1.25.0
44

55
require (
6-
github.com/xuri/excelize/v2 v2.10.2-0.20260326234041-d7456a4cee11
7-
golang.org/x/image v0.38.0
6+
github.com/xuri/excelize/v2 v2.10.2-0.20260512020616-4bebb6125c68
7+
golang.org/x/image v0.40.0
88
)
99

1010
require (
@@ -13,7 +13,7 @@ require (
1313
github.com/tiendc/go-deepcopy v1.7.2 // indirect
1414
github.com/xuri/efp v0.0.1 // indirect
1515
github.com/xuri/nfp v0.0.2-0.20250530014748-2ddeb826f9a9 // indirect
16-
golang.org/x/crypto v0.49.0 // indirect
17-
golang.org/x/net v0.52.0 // indirect
18-
golang.org/x/text v0.35.0 // indirect
16+
golang.org/x/crypto v0.51.0 // indirect
17+
golang.org/x/net v0.54.0 // indirect
18+
golang.org/x/text v0.37.0 // indirect
1919
)

go.sum

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,17 @@ github.com/tiendc/go-deepcopy v1.7.2 h1:Ut2yYR7W9tWjTQitganoIue4UGxZwCcJy3orjrrI
1212
github.com/tiendc/go-deepcopy v1.7.2/go.mod h1:4bKjNC2r7boYOkD2IOuZpYjmlDdzjbpTRyCx+goBCJQ=
1313
github.com/xuri/efp v0.0.1 h1:fws5Rv3myXyYni8uwj2qKjVaRP30PdjeYe2Y6FDsCL8=
1414
github.com/xuri/efp v0.0.1/go.mod h1:ybY/Jr0T0GTCnYjKqmdwxyxn2BQf2RcQIIvex5QldPI=
15-
github.com/xuri/excelize/v2 v2.10.2-0.20260326234041-d7456a4cee11 h1:xqjxzU5h0eOJmxxPKY++LXRQO00SFyh2Ff/Texw4KB0=
16-
github.com/xuri/excelize/v2 v2.10.2-0.20260326234041-d7456a4cee11/go.mod h1:VXP0lmZJT52/iRPrjhz//3ZUz2D1GviA2p8XCzUyhs4=
15+
github.com/xuri/excelize/v2 v2.10.2-0.20260512020616-4bebb6125c68 h1:d8G0sTyeOeTVqrRBwEbHfXCEOy7/NHtfdZQ+PazXXtI=
16+
github.com/xuri/excelize/v2 v2.10.2-0.20260512020616-4bebb6125c68/go.mod h1:eYid42/ztfQEtVWGHKOdOKOi5yJRb0pFxjc5IYZbl4I=
1717
github.com/xuri/nfp v0.0.2-0.20250530014748-2ddeb826f9a9 h1:+C0TIdyyYmzadGaL/HBLbf3WdLgC29pgyhTjAT/0nuE=
1818
github.com/xuri/nfp v0.0.2-0.20250530014748-2ddeb826f9a9/go.mod h1:WwHg+CVyzlv/TX9xqBFXEZAuxOPxn2k1GNHwG41IIUQ=
19-
golang.org/x/crypto v0.49.0 h1:+Ng2ULVvLHnJ/ZFEq4KdcDd/cfjrrjjNSXNzxg0Y4U4=
20-
golang.org/x/crypto v0.49.0/go.mod h1:ErX4dUh2UM+CFYiXZRTcMpEcN8b/1gxEuv3nODoYtCA=
21-
golang.org/x/image v0.38.0 h1:5l+q+Y9JDC7mBOMjo4/aPhMDcxEptsX+Tt3GgRQRPuE=
22-
golang.org/x/image v0.38.0/go.mod h1:/3f6vaXC+6CEanU4KJxbcUZyEePbyKbaLoDOe4ehFYY=
23-
golang.org/x/net v0.52.0 h1:He/TN1l0e4mmR3QqHMT2Xab3Aj3L9qjbhRm78/6jrW0=
24-
golang.org/x/net v0.52.0/go.mod h1:R1MAz7uMZxVMualyPXb+VaqGSa3LIaUqk0eEt3w36Sw=
25-
golang.org/x/text v0.35.0 h1:JOVx6vVDFokkpaq1AEptVzLTpDe9KGpj5tR4/X+ybL8=
26-
golang.org/x/text v0.35.0/go.mod h1:khi/HExzZJ2pGnjenulevKNX1W67CUy0AsXcNubPGCA=
19+
golang.org/x/crypto v0.51.0 h1:IBPXwPfKxY7cWQZ38ZCIRPI50YLeevDLlLnyC5wRGTI=
20+
golang.org/x/crypto v0.51.0/go.mod h1:8AdwkbraGNABw2kOX6YFPs3WM22XqI4EXEd8g+x7Oc8=
21+
golang.org/x/image v0.40.0 h1:Tw4GyDXMo+daZN1znreBRC3VayR1aLFUyUEOLUdW1a8=
22+
golang.org/x/image v0.40.0/go.mod h1:uIc348UZMSvS5Z65CVZ7iDPaNobNFEPeJ4kbqTOszmA=
23+
golang.org/x/net v0.54.0 h1:2zJIZAxAHV/OHCDTCOHAYehQzLfSXuf/5SoL/Dv6w/w=
24+
golang.org/x/net v0.54.0/go.mod h1:Sj4oj8jK6XmHpBZU/zWHw3BV3abl4Kvi+Ut7cQcY+cQ=
25+
golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc=
26+
golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38=
2727
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
2828
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ func cValueToGo(cVal reflect.Value, goType reflect.Type) (reflect.Value, error)
220220
if !goBaseTypes[ptrType.Kind()] {
221221
// Pointer of the Go struct, for example: *excelize.Options
222222
cObjVal := cVal.FieldByName(field.Name)
223-
if cObjVal.Elem().CanAddr() {
223+
if cObjVal.Kind() == reflect.Ptr && !cObjVal.IsNil() {
224224
v, err := cValueToGo(cObjVal.Elem(), ptrType)
225225
if err != nil {
226226
return result, err

test_excelize.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2043,7 +2043,7 @@ def test_pivot_table(self):
20432043
)
20442044
opts = excelize.PivotTableOptions(
20452045
data_range="Sheet1!A1:E31",
2046-
pivot_table_range="Sheet1!G4:M31",
2046+
pivot_table_range="Sheet1!G4:M30",
20472047
rows=[
20482048
excelize.PivotTableField(data="Month", default_subtotal=True),
20492049
excelize.PivotTableField(data="Year"),

types_c.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -466,6 +466,8 @@ struct ChartTitle
466466
struct LineOptions Border;
467467
int ParagraphLen;
468468
struct RichTextRun *Paragraph;
469+
struct Font *Font;
470+
char *Formula;
469471
int OffsetX;
470472
int OffsetY;
471473
int Width;

types_go.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,8 @@ class _ChartTitle(Structure):
434434
("Border", _LineOptions),
435435
("ParagraphLen", c_int),
436436
("Paragraph", POINTER(_RichTextRun)),
437+
("Font", POINTER(_Font)),
438+
("Formula", c_char_p),
437439
("OffsetX", c_int),
438440
("OffsetY", c_int),
439441
("Width", c_int),

types_py.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -877,6 +877,8 @@ class ChartTitle:
877877
fill: Fill = Fill
878878
border: LineOptions = LineOptions
879879
paragraph: Optional[List[RichTextRun]] = None
880+
font: Optional[Font] = None
881+
formula: str = ""
880882
offset_x: int = 0
881883
offset_y: int = 0
882884
width: int = 0

0 commit comments

Comments
 (0)