[Bug] Absolute row/column index 0 is ignored for images, hyperlinks and comments

Open Beginner friendly
#1,332 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

@fanOfSunny is already working on this.

Since Nov 12, 2026.

  • #1333 by @fanOfSunny — open

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
82/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Active
Tech stack
java
Domain
backend

Research direction

Start by reading StyleUtil.getCellCoordinate, which the issue identifies as the source of the coordinate fallback, and check its callers in AbstractExcelWriteExecutor. Confirm how absolute and relative coordinates are handled for image, hyperlink, and comment anchors. Done means absolute index 0 takes precedence while null and negative values retain the fallback behavior; verify with the reproduction for XLSX and XLS.

Written by the indexing model from the issue text.

Description

Search before asking
  • I searched in the issues and found nothing similar.
Fesod version

main (commit 69147b7)

JDK version

17 (the affected code is JDK-independent)

Operating system

Windows 11 (OS-independent)

Steps To Reproduce

StyleUtil.getCellCoordinate only honors an absolute coordinate when it is > 0:

if (absoluteCoordinate != null && absoluteCoordinate > 0) {
    return absoluteCoordinate;
}

Index 0 (row 1 / column A) is a valid zero-based coordinate, but it silently falls back to the relative coordinate or to the position of the cell that carries the data. The method is used for image, hyperlink and comment anchors in AbstractExcelWriteExecutor.

Reproduce with an image:

ImageData imageData = new ImageData();
imageData.setImage(imageBytes);
imageData.setFirstRowIndex(0);
imageData.setFirstColumnIndex(0);
imageData.setLastRowIndex(0);
imageData.setLastColumnIndex(0);

WriteCellData<Void> cellData = new WriteCellData<>(CellDataTypeEnum.EMPTY);
cellData.setImageDataList(new ArrayList<>(Collections.singletonList(imageData)));

List<List<Object>> data = Arrays.asList(
        Arrays.asList("row1", "value1"),
        Arrays.asList("row2", "value2"),
        Arrays.asList("row3", cellData));   // written to B4 (one head row)

FesodSheet.write(file)
        .head(Arrays.asList(Collections.singletonList("Name"), Collections.singletonList("Image")))
        .sheet()
        .doWrite(data);
Current Behavior

The picture is anchored at B4 (the data cell) instead of A1, for both XLSX and XLS. When a relative coordinate is also set, the relative value wins over the absolute 0.

Expected Behavior

An absolute index of 0 is honored, and it takes precedence over the relative index. This matches the CoordinateData Javadoc ("Priority is higher than relative...").

Anything else?

Proposed fix: change the check to absoluteCoordinate >= 0. null and negative values keep the current fallback behavior, so existing callers that do not set absolute coordinates are unaffected.

Are you willing to submit a PR?
  • I'm willing to submit a PR!
Dominant language
Java
Stars
6.3k
Forks
554
Avg merge
1d 21h
Merged PRs (30d)
44

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from apache/fesod

All issues in apache/fesod

Similar issues

More Java issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.