diff --git a/src/documentation/content/xdocs/changes.xml b/src/documentation/content/xdocs/changes.xml
index fee7028097..150b41ff9d 100644
--- a/src/documentation/content/xdocs/changes.xml
+++ b/src/documentation/content/xdocs/changes.xml
@@ -43,7 +43,7 @@
44914 - Fix/suppress warning message "WARN. Unread n bytes of record 0xNN"
44892 - made HSSFWorkbook.getSheet(String) case insensitive
44886] - Correctly process PICT metafile in EscherMetafileBlip
- 44893 - Correctly handle merged regions in HSSFSheet.autoSizeColumn
+ 44893 - Take into account indentation in HSSFSheet.autoSizeColumn
44857 - Avoid OOM on unknown escher records when EscherMetafileBlip is incorrect
diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java b/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java
index b6d8d5723f..b56122688e 100644
--- a/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java
+++ b/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java
@@ -1710,6 +1710,8 @@ public final class HSSFSheet {
HSSFCellStyle style = cell.getCellStyle();
HSSFFont font = wb.getFontAt(style.getFontIndex());
+ //the number of spaces to indent the text in the cell
+ int indention = style.getIndention();
if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
HSSFRichTextString rt = cell.getRichStringCellValue();
@@ -1742,9 +1744,9 @@ public final class HSSFSheet {
trans.concatenate(
AffineTransform.getScaleInstance(1, fontHeightMultiple)
);
- width = Math.max(width, layout.getOutline(trans).getBounds().getWidth() / defaultCharWidth);
+ width = Math.max(width, layout.getOutline(trans).getBounds().getWidth() / defaultCharWidth + indention);
} else {
- width = Math.max(width, layout.getBounds().getWidth() / defaultCharWidth);
+ width = Math.max(width, layout.getBounds().getWidth() / defaultCharWidth + indention);
}
}
} else {
@@ -1787,15 +1789,15 @@ public final class HSSFSheet {
trans.concatenate(
AffineTransform.getScaleInstance(1, fontHeightMultiple)
);
- width = Math.max(width, layout.getOutline(trans).getBounds().getWidth() / defaultCharWidth);
+ width = Math.max(width, layout.getOutline(trans).getBounds().getWidth() / defaultCharWidth + indention);
} else {
- width = Math.max(width, layout.getBounds().getWidth() / defaultCharWidth);
+ width = Math.max(width, layout.getBounds().getWidth() / defaultCharWidth + indention);
}
}
}
if (width != -1) {
- if (width > Short.MAX_VALUE) { //width can be bigger that Short.MAX_VALUE!
+ if (width > Short.MAX_VALUE) { //calculated width can be greater that Short.MAX_VALUE!
width = Short.MAX_VALUE;
}
sheet.setColumnWidth(column, (short) (width * 256));