使用POI读取文本框高度时,获取不到该标签对象
如下是一个Excel的Drawing.xml的文件。
<xdr:twoCellAnchor>
<xdr:from>
<xdr:col>9xdr:col>
<xdr:colOff>449580xdr:colOff>
<xdr:row>1xdr:row>
<xdr:rowOff>160020xdr:rowOff>
xdr:from>
<xdr:to>
<xdr:col>9xdr:col>
<xdr:colOff>2842260xdr:colOff>
<xdr:row>1xdr:row>
<xdr:rowOff>937260xdr:rowOff>
xdr:to>
<mc:AlternateContent
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006">
<mc:Choice
xmlns:a14="http://schemas.microsoft.com/office/drawing/2010/main" Requires="a14">
<xdr:sp>
<xdr:nvSpPr>
<xdr:cNvPr id="3" name="文本框 2"/>
<xdr:cNvSpPr txBox="1"/>
xdr:nvSpPr>
<xdr:spPr>
<a:xfrm>
<a:off x="10035540" y="381000"/>
<a:ext cx="2392680" cy="777240"/>
正常情况下,a:ext cx="2392680" cy="777240"这些内容应该是可以获取到的,代码如下。
height = (short)((int)ctTwoCellAnchor2.getSp().getSpPr().getXfrm().getExt().getCy()
但是我现在在getSp的时候就空指针异常了,无法获取到sp这个对象,我猜想可能是由于mc:AlternateContent这个标签的原因,
但是网上关于mc:AlternateContent的资料很少,有没有人可以解答一下。
POI是Apache下的一个开源项目,是一种用Java编写的库,可以用于读取和写入Microsoft Office格式的文件。你提到在使用POI读取文本框高度时,不能获取到xdr:twoCellAnchor下的<a:ext>对象,这可能是由于在xml文件中出现了"mc:AlternateContent"标签导致的,它会使得文档在不同应用程序中显示不同的内容。建议你可以通过检查代码并使用最新版本的POI来解决这个问题。举个例子, 你可以使用以下代码来访问文本框高度:
import org.apache.poi.xssf.usermodel.*;
XSSFWorkbook workbook = new XSSFWorkbook("path/to/workbook.xlsx");
XSSFDrawing drawing = workbook.getSheetAt(0).createDrawingPatriarch();
for (XSSFShape shape : drawing.getShapes()) {
if (shape instanceof XSSFSimpleShape) {
XSSFSimpleShape textbox = (XSSFSimpleShape) shape;
int height = textbox.getHeight();
System.out.println("Textbox height: " + height);
}
}
代码首先创建了一个XSSFWorkbook对象并打开了一个名为"workbook.xlsx"的Excel文件。然后通过workbook.getSheetAt(0).createDrawingPatriarch(); 找到第一个sheet中的所有图形.
接下来使用 for loop 遍历所有图形, 如果该图形是一个文本框,则将其强制转换为XSSFSimpleShape对象,最后调用 getHeight() 方法获取高度,并将其打印出来。
注意,在这段代码中, 依然需要判断mc:AlternateContent是否存在,如果存在需要做特殊处理