mirror of https://github.com/apache/poi.git
[bug-59388] Set comment with option isVisible in .xlsx. Thanks to ryoii. This closes #239
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1894347 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
87a764956c
commit
b906b72d29
|
@ -26,6 +26,7 @@ import org.apache.poi.ss.usermodel.RichTextString;
|
|||
import org.apache.poi.ss.util.CellAddress;
|
||||
import org.apache.poi.ss.util.CellReference;
|
||||
import org.apache.poi.xssf.model.CommentsTable;
|
||||
import org.openxmlformats.schemas.officeDocument.x2006.sharedTypes.STTrueFalseBlank;
|
||||
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTComment;
|
||||
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRst;
|
||||
|
||||
|
@ -108,8 +109,13 @@ public class XSSFComment implements Comment {
|
|||
public boolean isVisible() {
|
||||
boolean visible = false;
|
||||
if(_vmlShape != null) {
|
||||
String style = _vmlShape.getStyle();
|
||||
visible = style != null && style.contains("visibility:visible");
|
||||
if (_vmlShape.sizeOfClientDataArray() > 0) {
|
||||
CTClientData clientData = _vmlShape.getClientDataArray(0);
|
||||
visible = clientData != null && clientData.sizeOfVisibleArray() > 0;
|
||||
} else {
|
||||
String style = _vmlShape.getStyle();
|
||||
visible = style != null && style.contains("visibility:visible");
|
||||
}
|
||||
}
|
||||
return visible;
|
||||
}
|
||||
|
@ -121,11 +127,20 @@ public class XSSFComment implements Comment {
|
|||
*/
|
||||
@Override
|
||||
public void setVisible(boolean visible) {
|
||||
if(_vmlShape != null){
|
||||
String style;
|
||||
if(visible) style = "position:absolute;visibility:visible";
|
||||
else style = "position:absolute;visibility:hidden";
|
||||
_vmlShape.setStyle(style);
|
||||
if(_vmlShape != null) {
|
||||
if (visible) {
|
||||
_vmlShape.setStyle("position:absolute");
|
||||
CTClientData clientData = _vmlShape.getClientDataArray(0);
|
||||
if (clientData != null && clientData.sizeOfVisibleArray() == 0) {
|
||||
clientData.addVisible(STTrueFalseBlank.X);
|
||||
}
|
||||
} else {
|
||||
_vmlShape.setStyle("position:absolute;visibility:hidden");
|
||||
CTClientData clientData = _vmlShape.getClientDataArray(0);
|
||||
if (clientData != null && clientData.sizeOfVisibleArray() > 0) {
|
||||
clientData.removeVisible(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -29,6 +29,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
|
|||
import java.io.IOException;
|
||||
|
||||
import com.microsoft.schemas.vml.CTShape;
|
||||
import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
|
||||
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
|
||||
import org.apache.poi.ss.usermodel.BaseTestCellComment;
|
||||
import org.apache.poi.ss.usermodel.Cell;
|
||||
|
@ -311,4 +312,41 @@ public final class TestXSSFComment extends BaseTestCellComment {
|
|||
|
||||
wb.close();
|
||||
}
|
||||
|
||||
@Test
|
||||
void bug59388CommentVisible() throws IOException {
|
||||
try (UnsynchronizedByteArrayOutputStream bos = new UnsynchronizedByteArrayOutputStream()) {
|
||||
try (Workbook wb = XSSFTestDataSamples.openSampleWorkbook("59388.xlsx")) {
|
||||
Sheet sheet = wb.getSheetAt(0);
|
||||
Cell a1 = sheet.getRow(0).getCell(0);
|
||||
Cell d1 = sheet.getRow(0).getCell(3);
|
||||
|
||||
Comment commentA1 = a1.getCellComment();
|
||||
Comment commentD1 = d1.getCellComment();
|
||||
|
||||
// assert original visibility
|
||||
assertTrue(commentA1.isVisible());
|
||||
assertFalse(commentD1.isVisible());
|
||||
|
||||
commentA1.setVisible(false);
|
||||
commentD1.setVisible(true);
|
||||
|
||||
// assert after changing
|
||||
assertFalse(commentA1.isVisible());
|
||||
assertTrue(commentD1.isVisible());
|
||||
|
||||
// check result
|
||||
wb.write(bos);
|
||||
|
||||
try (Workbook wb2 = new XSSFWorkbook(bos.toInputStream())) {
|
||||
Sheet sheetWb2 = wb2.getSheetAt(0);
|
||||
Cell a1Wb2 = sheetWb2.getRow(0).getCell(0);
|
||||
Cell d1Wb2 = sheetWb2.getRow(0).getCell(3);
|
||||
|
||||
assertFalse(a1Wb2.getCellComment().isVisible());
|
||||
assertTrue(d1Wb2.getCellComment().isVisible());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Binary file not shown.
Loading…
Reference in New Issue