Aspose.Cells for Java SmartArtのテキスト抽出時にエラーが発生する

Worksheet内にあるSmartArtのテキスト抽出を下記のコードを使って行いました。

Shape shape = (Shape) shapeObj;
// SmartArtを取得
if (shape.isSmartArt()) {
GroupShape resultOfSmartArt = shape.getResultOfSmartArt();
Shape[] groupedShapes = resultOfSmartArt.getGroupedShapes();
Arrays.asList(groupedShapes).stream()
.forEach(x -> {
texts.add(x.getText());
});
}

しかし、SmartArtに代替テキストが設定されている場合は
下記のコードでNullPointerExceptionが発生します。

GroupShape resultOfSmartArt = shape.getResultOfSmartArt();

何かこの現象を回避する方法はございますでしょうか、

以上、ご確認の程よろしくお願いいたします。

使用バージョン:Aspose.Cells for Java 18.2.
サンプルデータ:smartart_alternative_text.zip (12.4 KB)

@yudai_yamaguchi,

サンプルコードとテンプレートファイルをお寄せいただきありがとうございます。

最初のテストの後、私はあなたが言及したように問題を再現することができます。 SmartArtシェイプのテキストを抽出する際に例外 "NullPointerException"が発生しました。問題を再現するために、テンプレートファイルで次のサンプルコードを使用しました。
e.g
Sample code:

//Load source Excel file
Workbook wb = new Workbook("f:\\files\\smartart_alternative_text.xlsx");

//Access first worksheet
Worksheet ws = wb.getWorksheets().get(0);

//Access this Smart Art Shape (first shape)
Shape smShape = ws.getShapes().get(0);
System.out.println(smShape.isSmartArt());
  //Check if this shape is smart art shape
  if (smShape.isSmartArt())
  {
       //Convert it to group shape and access all indvidual shapes
       Shape[] shapes = smShape.getResultOfSmartArt().getGroupedShapes();

       for (int i =0; i< shapes.length; i++)
       {
	   Shape shape = shapes[i];	
	   System.out.println(shape.getText());
       }
  }//end if 

あなたの問題のためにあなたのIDを "CELLSJAVA-42533"記録しました。私たちはすぐにそれを調べます。

それを理解したら、ここでお知らせします。

チケット作成のご対応ありがとうございました。
以上、よろしくお願いいたします。

@yudai_yamaguchi

私たちはあなたの問題を修正したので、数日後に修正を提供します。

問題を解決していただき、ありがとうございました。

@yudai_yamaguchi,

最新のバージョン/修正を試してください:Aspose.Cells for Java v18.2.4

あなたの問題は修正されるべきです。

あなたのフィードバックをお知らせください。

Aspose.Cells for Java v18.2.41を使用し、
"NullPointerException"が発生しないことを確認いたしました。
迅速なご対応、ありがとうございました。

例外は発生しなくなったのですが、
以下のコードを使ってSmartArtの代替テキストを抽出することができません。

Shape shape = (Shape) shapeObj;
// SmartArtを取得
if (shape.isSmartArt()) {
    GroupShape resultOfSmartArt = shape.getResultOfSmartArt();
    Shape[] groupedShapes = resultOfSmartArt.getGroupedShapes();
    Arrays.asList(groupedShapes).stream()
            .forEach(x -> {
                // extract alternative text
                System.out.println(x.getTitle());
                System.out.println(x.getAlternativeText());
            });
}

以前にお渡ししたサンプルデータを使用しています。

何かこの問題を回避する方法がございますでしょうか。
以上、ご確認の程よろしくお願いいたします。

@yudai_yamaguchi

私たちはこの問題を察知し、調査と修正のためにデータベースに記録しました。 一度、あなたのためのいくつかのニュースがあります、私たちはできるだけ早くお知らせします。

この問題は次のように記録されています。

  • CELLSJAVA-42540 - Unable to get Alternative Text after getting the Results Shapes of Smart Art Shape

Screenshot:

チケット作成のご対応ありがとうございました。
以上、よろしくお願いいたします。

@yudai_yamaguchi

この問題は、excel / diagrams / drawing1.xml内のキャッシュされた図形のみを読み取ることができ、このXMLの代替テキストに関する設定はないため、この問題を解決することはできません。

We cannot fix this issue because we can only read the cached shapes in xl/diagrams/drawing1.xml and there is no such setting about Alternative Text in this XML.

The issues you have found earlier (filed as CELLSJAVA-42533) have been fixed in this Aspose.Cells for Java 18.3 update. Please also check the <a href="Installation|Documentation

The issues you have found earlier (filed as CELLSJAVA-42533) have been fixed in this Aspose.Cells for Java 18.3 update. Please also check the document for your reference: Installation|Documentation

xl/diagrams/drawing1.xml には代替テキストの設定がないことは理解しました。
しかし、xl\diagrams\data1.xml には代替テキストの情報が含まれています。
こちらから代替テキストを抽出することはできないでしょうか。

お手数おかけしますが、ご確認の程よろしくお願いいたします。

@yudai_yamaguchi,

詳細をありがとう。

"xl / diagrams / drawing1.xml"がファイルに含まれていない場合、私はスマートアートに含まれる数字の数はわかりません。 だから私たちはそれらの代替テキストを返すことができませんでした。

ご返答ありがとうございます。

代替テキストの情報があるxmlを添付させていただきます。
smartart_sample.zip (15.4 KB)

1つご確認させていただきたいことがあります。
SmartArtの代替テキストの対応については以下のどちらかになるのでしょうか。

1. ASPOSEでSmartArtの代替テキストが抽出できないのはバグであり、修正すればASPOSEで代替テキストを取得可能になる

2. ASPOSEでSmartArtの代替テキストを抽出することは不可能であり、これはASPOSEの仕様である (今後も修正することはできない)

お手数おかけしますが、ご確認の程よろしくお願いいたします。

@yudai_yamaguchi,

テンプレートファイルと詳細をありがとう。

私はあなたの懸念を記録し、私たちのデータベースに "CELLSJAVA - 42540"に対してあなたの問題を記録しました。 より多くの情報が得られれば、アップデートを評価して共有します。

@yudai_yamaguchi,

ファイル "xl / diagrams / drawing1.xml"は、表示されているすべての図形をキャッシュするために使用されます。
Aspose.Cellsは "xl / diagrams / drawing1.xml"ファイルを解析して形状を取得し、その図を "data1.xml"と比較して代替テキストを抽出します。
したがって、Shapes.getGroupedShapes()ファイルによって返されるシェイプはすべて読み取り専用です。
MS Excelは “data1.xml”、 “layout1.xml”、 “colors1.xml”、 "quickStyle1.xml"で "xl / diagrams / drawing1.xml"を生成します。 Aspose.Cellsはこれらのファイルの解析をサポートしておらず、これらのファイル内の数字が生成されます。

1)Aspose.CellsがSmartArtの代替テキストを抽出できないというバグがあります。これを変更すると、Aspose.Cellの代替テキストが表示されます。 "xl / diagrams / drawing1.xml"がファイルに含まれていない場合、SmartArtの代替テキストは抽出できません。 Aspose.Cellsは、Shapes.getGroupedShapes()ファイルによって返されるすべての図形が読み取り専用であるため、代替テキストの設定をサポートしていません。

2)Aspose.Cellsを使用してSmartArtの代替テキストを抽出することは不可能です。 Aspose.Cellsの仕様(将来は変更できません)これらのファイル( “data1.xml”、 “layout1.xml”、 “colors1.xml”、 “quickStyle1.xml”)をグラフィカルに解析することは困難です。今のところそれをサポートする計画はありません。あなたが自分自身を分析する必要があるタスクを達成する必要がある場合。我々は、ファイルデータを提供しようとすることができます。

返答ありがとうございます。

ご報告です。
SmartArtの代替テキストを抽出することは不可能との回答でしたが、
Aspose.Cells for Java 18.6 を使用することで抽出が可能になっていました。

ご対応ありがとうございました。

@yudai_yamaguchi,

今後数日以内に是正処置についてお知らせいたします。 修正版は2〜3日後に提供されます。 ファイルに "xl / diagrams / drawing1.xml"が含まれている場合、Aspose.CellsはSmartArtの代替テキストを抽出します。

連絡を取り合う。