Aspose.Cells for Java セルのテキスト抽出で例外が発生する

以下のコードを使ってセルからテキストを抽出をしています。

Workbook workbook = new Workbook();
Cells cells = workbook.getWorksheets().get(1).getCells();

List<String> cellTexts = new ArrayList<>();

Iterator<?> iterator = cells.iterator();
while (iterator.hasNext()) {
    Cell cell = (Cell) iterator.next();
    cellTexts.add(cell.getDisplayStringValue());
}

しかし、下記のサンプルデータを使用した場合、下記の例外が発生してしまいました。
また、該当のセルにテキストは含まれていました。( R列16行目のセル )
何かこの問題を回避する方法はございますでしょうか。

java.lang.NullPointerException
	at com.aspose.cells.zsz.a(Unknown Source)
	at com.aspose.cells.zin.d(Unknown Source)
	at com.aspose.cells.zim.a(Unknown Source)
	at com.aspose.cells.Cell.a(Unknown Source)
	at com.aspose.cells.Cell.getDisplayStringValue(Unknown Source)

使用バージョン:Aspose.Cells for Java 18.5
サンプルデータ:http://www.purchaseadd.org/files/BLDS/Downloads/Loans/Loan_Calculator_Worksheet.xls

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

@yudai_yamaguchi,

テンプレートファイルとサンプルコードセグメントをありがとう。

私が "Cell.getDisplayStringValue()"メソッドを使用する際に述べたように、私は問題(例外)に気付きました。 ただし、 "Cell.getStringValue()"メソッドを使用できる場合、正常に動作し、期待どおりに動作します。 ワークシートで条件付き書式を使用していない場合は、「Cell.getDisplayStringValue()」は役に立たないので、代わりに「Cell.getStringValue()」メソッドを使用してください。 コード行を変更することができます。 言い換えると、


cellTexts.add(cell.getDisplayStringValue());

to:


cellTexts.add(cell.getStringValue());

それが動作するかどうか私に教えてください。

ご返答ありがとうございます。
Cell.getStringValue()を使用することで例外が発生しなくなることを確認しました。

セルからのテキスト抽出について伺いたいことがあります。

  1. Cell.getDisplayStringValue()とCell.getStringValue()の違いは何でしょうか。
    申し訳ございません。APIリファレンスを確認したのですが、違いがわかりませでした。

  2. Cell.getDisplayStringValue()とCell.getStringValue()で別のテキストが取得されてしまうようなパターンはありますでしょうか。
    セルの書式設定によってCell.getDisplayStringValue()とCell.getStringValue()が異なる結果を返してしまうようなパターンがあれば教えていただきたいです。

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

@yudai_yamaguchi

Cell.getDisplayStringValueはConditional_Formattingに使用されます。 次のコード、このサンプル入力Excelファイル、およびこの方法を説明するコンソール出力を参照してください。

サンプル入力のExcelファイルを開くと、A1セルにConditional_Formattingが表示されます。 このため、getStringValue()は-1234を表示しますが、getDisplayStringValueは表示しています(1234.00)

Download Link:
sample input Excel file.zip (6.2 KB)

Java

Workbook wb = new Workbook(dirPath + "sample.xlsx");

Worksheet ws = wb.getWorksheets().get(0);

Cell cell = ws.getCells().get("A1");

System.out.println(cell.getStringValue());
System.out.println(cell.getDisplayStringValue());

Console Output:

-1234
(1234.00)

ご返答ありがとうございます。
Cell.getDisplayStringValue()とCell.getStringValue()の違いについて理解できました。

私は全てのセルのテキストを抽出したいです。
また、条件付き書式がある場合は書式が適用されたテキストを抽出する必要があります。
そのため、Cell.getDisplayStringValueを使用したいです。

Cell.getDisplayStringValueでも例外が発生しないようにしていただくことは可能でしょうか。

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

@yudai_yamaguchi

あなたはQ7で例外を受けていますか? サンプルコードが正しくないようです。 次のサンプルコードとそのコンソール出力を参照してください。 私はセルQ7の例外を取得しています

Java

Workbook workbook = new Workbook(dirPath + "Loan_Calculator_Worksheet.xls");
Cells cells = workbook.getWorksheets().get(0).getCells();

List<String> cellTexts = new ArrayList<>();

Iterator<?> iterator = cells.iterator();
while (iterator.hasNext()) {
    Cell cell = (Cell) iterator.next();
    
    System.out.println(cell.getName());
    cellTexts.add(cell.getDisplayStringValue());
}

Console Output

B2
C2
D2
E2
F2
G2
H2
I2
J2
K2
L2
N2
O2
P2
Q2
R2
S2
T2
B3
C3
D3
E3
F3
G3
H3
I3
J3
K3
L3
N3
O3
P3
Q3
R3
S3
T3
B4
C4
D4
E4
F4
G4
H4
I4
J4
K4
L4
N4
O4
P4
Q4
R4
S4
T4
B5
C5
D5
E5
F5
G5
H5
I5
J5
K5
L5
M5
N5
O5
P5
Q5
R5
S5
T5
B6
C6
D6
E6
F6
G6
H6
I6
J6
K6
L6
M6
N6
O6
P6
Q6
R6
S6
T6
B7
C7
D7
E7
F7
G7
H7
I7
J7
K7
L7
M7
N7
O7
P7
Q7
Exception in thread "main" java.lang.NullPointerException
	at com.aspose.cells.zsy.a(Unknown Source)
	at com.aspose.cells.zin.d(Unknown Source)
	at com.aspose.cells.zim.a(Unknown Source)
	at com.aspose.cells.Cell.a(Unknown Source)
	at com.aspose.cells.Cell.getDisplayStringValue(Unknown Source)
	at ClsAsposeCells.f1(ClsAsposeCells.java:43)
	at ClsAsposeCells.main(ClsAsposeCells.java:16)
R7
S7
T7
B8
C8
D8
E8
F8
G8
H8
I8
J8
K8
L8
M8
N8
O8
P8
Q8
R8
S8
T8
B9
C9
D9
E9
F9
G9
H9
I9
J9
K9
L9
M9
N9
O9
P9
Q9
R9
S9
T9
B10
C10
D10
E10
F10
G10
H10
I10
J10
K10
L10
M10
N10
O10
P10
Q10
R10
S10
T10
B11
C11
D11
E11
F11
G11
H11
I11
J11
K11
L11
M11
N11
O11
P11
Q11
R11
S11
T11
B12
C12
D12
E12
F12
G12
H12
I12
J12
K12
L12
M12
N12
O12
P12
Q12
R12
S12
T12
B13
C13
D13
E13
F13
G13
H13
I13
J13
K13
L13
M13
N13
O13
P13
Q13
R13
S13
T13
B14
C14
D14
E14
F14
G14
H14
I14
J14
K14
L14
N14
O14
P14
Q14
R14
S14
T14
B15
C15
D15
E15
F15
G15
H15
I15
J15
K15
L15
N15
O15
P15
Q15
R15
S15
T15
B16
C16
D16
E16
F16
G16
H16
I16
J16
K16
L16
N16
O16
P16
Q16
R16

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

私が試してみたところ、R16で例外が発生しています。

private static void test(Workbook workbook) {

   Cells cells = workbook.getWorksheets().get(0).getCells();

   List<String> cellTexts = new ArrayList<>();

   Iterator<?> iterator = cells.iterator();
   while (iterator.hasNext()) {
       Cell cell = (Cell) iterator.next();

       try {
           System.out.println(cell.getName());
           cellTexts.add(cell.getDisplayStringValue());
       } catch (Exception e) {
           System.out.println(cell.getName());
           System.out.println(e.getMessage());
       }
   }

}

Console Output

B2
C2
D2
E2
F2
G2
H2
I2
J2
K2
L2
N2
O2
P2
Q2
R2
S2
T2
B3
C3
D3
E3
F3
G3
H3
I3
J3
K3
L3
N3
O3
P3
Q3
R3
S3
T3
B4
C4
D4
E4
F4
G4
H4
I4
J4
K4
L4
N4
O4
P4
Q4
R4
S4
T4
B5
C5
D5
E5
F5
G5
H5
I5
J5
K5
L5
M5
N5
O5
P5
Q5
R5
S5
T5
B6
C6
D6
E6
F6
G6
H6
I6
J6
K6
L6
M6
N6
O6
P6
Q6
R6
S6
T6
B7
C7
D7
E7
F7
G7
H7
I7
J7
K7
L7
M7
N7
O7
P7
Q7
R7
S7
T7
B8
C8
D8
E8
F8
G8
H8
I8
J8
K8
L8
M8
N8
O8
P8
Q8
R8
S8
T8
B9
C9
D9
E9
F9
G9
H9
I9
J9
K9
L9
M9
N9
O9
P9
Q9
R9
S9
T9
B10
C10
D10
E10
F10
G10
H10
I10
J10
K10
L10
M10
N10
O10
P10
Q10
R10
S10
T10
B11
C11
D11
E11
F11
G11
H11
I11
J11
K11
L11
M11
N11
O11
P11
Q11
R11
S11
T11
B12
C12
D12
E12
F12
G12
H12
I12
J12
K12
L12
M12
N12
O12
P12
Q12
R12
S12
T12
B13
C13
D13
E13
F13
G13
H13
I13
J13
K13
L13
M13
N13
O13
P13
Q13
R13
S13
T13
B14
C14
D14
E14
F14
G14
H14
I14
J14
K14
L14
N14
O14
P14
Q14
R14
S14
T14
B15
C15
D15
E15
F15
G15
H15
I15
J15
K15
L15
N15
O15
P15
Q15
R15
S15
T15
B16
C16
D16
E16
F16
G16
H16
I16
J16
K16
L16
N16
O16
P16
Q16
R16
null
S16
T16
B17
C17
D17
E17
F17
G17
H17
I17
J17
K17
L17
N17
O17
P17
Q17
R17
S17
T17
B18
C18
D18
E18
F18
G18
H18
I18
J18
K18
L18
N18
O18
P18
Q18
R18
S18
T18
B19
C19
D19
E19
F19
G19
H19
I19
J19
K19
L19
N19
O19
P19
Q19
R19
S19
T19
B20
C20
D20
E20
F20
G20
H20
I20
J20
K20
L20
N20
O20
P20
Q20
R20
S20
T20
B21
C21
D21
E21
F21
G21
H21
I21
J21
K21
L21
N21
O21
P21
Q21
R21
S21
T21
B22
C22
D22
E22
F22
G22
H22
I22
J22
K22
L22
N22
O22
P22
Q22
R22
S22
T22
B23
C23
D23
E23
F23
G23
H23
I23
J23
K23
L23
N23
O23
P23
Q23
R23
S23
T23
B24
C24
D24
E24
F24
G24
H24
I24
J24
K24
L24
N24
O24
P24
Q24
R24
S24
T24
B25
C25
D25
E25
F25
G25
H25
I25
J25
K25
L25
N25
O25
P25
Q25
R25
S25
T25
B26
C26
D26
E26
F26
G26
H26
I26
J26
K26
L26
N26
O26
P26
Q26
R26
S26
T26
B27
C27
D27
E27
F27
G27
H27
I27
J27
K27
L27
N27
O27
P27
Q27
R27
S27
T27
B28
C28
D28
E28
F28
G28
H28
I28
J28
K28
L28
N28
O28
P28
Q28
R28
S28
T28
B29
C29
D29
E29
F29
G29
H29
I29
J29
K29
L29
N29
O29
P29
Q29
R29
S29
T29
B30
C30
D30
E30
F30
G30
H30
I30
J30
K30
L30
N30
O30
P30
Q30
R30
S30
T30
B31
C31
D31
E31
F31
G31
H31
I31
J31
K31
L31
N31
O31
P31
Q31
R31
S31
T31
B32
C32
D32
E32
F32
G32
H32
I32
J32
K32
L32
N32
O32
P32
Q32
R32
S32
T32
B33
C33
D33
E33
F33
G33
H33
I33
J33
K33
L33
N33
O33
P33
Q33
R33
S33
T33
B34
C34
D34
E34
F34
G34
H34
I34
J34
K34
L34
N34
O34
P34
Q34
R34
S34
T34
B35
C35
D35
E35
F35
G35
H35
I35
J35
K35
L35
N35
O35
P35
Q35
R35
S35
T35
B36
C36
D36
E36
F36
G36
H36
I36
J36
K36
L36
N36
O36
P36
Q36
R36
S36
T36
B37
C37
D37
E37
F37
G37
H37
I37
J37
K37
L37
N37
O37
P37
Q37
R37
S37
T37
B38
C38
D38
E38
F38
G38
H38
I38
J38
K38
L38
N38
O38
P38
Q38
R38
S38
T38
B39
C39
D39
E39
F39
G39
H39
I39
J39
K39
L39
N39
O39
P39
Q39
R39
S39
T39
B40
C40
D40
E40
F40
G40
H40
I40
J40
K40
L40
N40
O40
P40
Q40
R40
S40
T40
B41
C41
D41
E41
F41
G41
H41
I41
J41
K41
L41
N41
O41
P41
Q41
R41
S41
T41
B42
C42
D42
E42
F42
G42
H42
I42
J42
K42
L42
N42
O42
P42
Q42
R42
S42
T42
B43
C43
D43
E43
F43
G43
H43
I43
J43
K43
L43
N43
O43
P43
Q43
R43
S43
T43
B44
C44
D44
E44
F44
G44
H44
I44
J44
K44
L44
N44
O44
P44
Q44
R44
S44
T44
B45
C45
D45
E45
F45
G45
H45
I45
J45
K45
L45
N45
O45
P45
Q45
R45
S45
T45
B46
C46
D46
E46
F46
G46
H46
I46
J46
K46
L46
N46
O46
P46
Q46
R46
S46
T46
B47
C47
D47
E47
F47
G47
H47
I47
J47
K47
L47
N47
O47
P47
Q47
R47
S47
T47
B48
C48
D48
E48
F48
G48
H48
I48
J48
K48
L48
N48
O48
P48
Q48
R48
S48
T48
B49
C49
D49
E49
F49
G49
H49
I49
J49
K49
L49
N49
O49
P49
Q49
R49
S49
T49
B50
C50
D50
E50
F50
G50
H50
I50
J50
K50
L50
N50
O50
P50
Q50
R50
S50
T50
B51
C51
D51
E51
F51
G51
H51
I51
J51
K51
L51
N51
O51
P51
Q51
R51
S51
T51
B52
C52
D52
E52
F52
G52
H52
I52
J52
K52
L52
N52
O52
P52
Q52
R52
S52
T52
B53
C53
D53
E53
F53
G53
H53
I53
J53
K53
L53
N53
O53
P53
Q53
R53
S53
T53
B54
C54
D54
E54
F54
G54
H54
I54
J54
K54
L54
N54
O54
P54
Q54
R54
S54
T54
B55
C55
D55
E55
F55
G55
H55
I55
J55
K55
L55
N55
O55
P55
Q55
R55
S55
T55
B56
C56
D56
E56
F56
G56
H56
I56
J56
K56
L56
N56
O56
P56
Q56
R56
S56
T56
B57
C57
D57
E57
F57
G57
H57
I57
J57
K57
L57
N57
O57
P57
Q57
R57
S57
T57
B58
C58
D58
E58
F58
G58
H58
I58
J58
K58
L58
N58
O58
P58
Q58
R58
S58
T58
B59
C59
D59
E59
F59
G59
H59
I59
J59
K59
L59
N59
O59
P59
Q59
R59
S59
T59
B60
C60
D60
E60
F60
G60
H60
I60
J60
K60
L60
N60
O60
P60
Q60
R60
S60
T60
B61
C61
D61
E61
F61
G61
H61
I61
J61
K61
L61
N61
O61
P61
Q61
R61
S61
T61
B62
C62
D62
E62
F62
G62
H62
I62
J62
K62
L62
N62
O62
P62
Q62
R62
S62
T62
N63
O63
P63
Q63
R63
S63
T63
N64
O64
P64
Q64
R64
S64
T64
N65
O65
P65
Q65
R65
S65
T65
N66
O66
P66
Q66
R66
S66
T66
N67
O67
P67
Q67
R67
S67
T67
N68
O68
P68
Q68
R68
S68
T68
N69
O69
P69
Q69
R69
S69
T69
N70
O70
P70
Q70
R70
S70
T70
N71
O71
P71
Q71
R71
S71
T71
N72
O72
P72
Q72
R72
S72
T72
N73
O73
P73
Q73
R73
S73
T73
N74
O74
P74
Q74
R74
S74
T74
N75
O75
P75
Q75
R75
S75
T75
N76
O76
P76
Q76
R76
S76
T76
N77
O77
P77
Q77
R77
S77
T77
N78
O78
P78
Q78
R78
S78
T78
N79
O79
P79
Q79
R79
S79
T79
N80
O80
P80
Q80
R80
S80
T80
N81
O81
P81
Q81
R81
S81
T81
N82
O82
P82
Q82
R82
S82
T82
N83
O83
P83
Q83
R83
S83
T83
N84
O84
P84
Q84
R84
S84
T84
N85
O85
P85
Q85
R85
S85
T85
N86
O86
P86
Q86
R86
S86
T86
N87
O87
P87
Q87
R87
S87
T87
N88
O88
P88
Q88
R88
S88
T88
N89
O89
P89
Q89
R89
S89
T89
N90
O90
P90
Q90
R90
S90
T90
N91
O91
P91
Q91
R91
S91
T91
N92
O92
P92
Q92
R92
S92
T92
N93
O93
P93
Q93
R93
S93
T93
N94
O94
P94
Q94
R94
S94
T94
N95
O95
P95
Q95
R95
S95
T95
N96
O96
P96
Q96
R96
S96
T96
N97
O97
P97
Q97
R97
S97
T97
N98
O98
P98
Q98
R98
S98
T98
N99
O99
P99
Q99
R99
S99
T99

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

@yudai_yamaguchi

私たちはセルR16の例外を観察することができ、調査と修正のためにこの問題をデータベースに記録しました。

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

  • CELLSJAVA-42638 - Cell.getDisplayStringValue() throws java.lang.NullPointerException

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

@yudai_yamaguchi,

ただちに例外訂正を提供します。 ただし、非表示のセルでは、セルが表示されないため空の文字列を返す "Cell.getDisplayStringValue()"の代わりに "Cell.getStringValue()"を使用して書式設定されたセル値を取得する必要があります。

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

@yudai_yamaguchi

Aspose APIを使用していただきありがとうございます。

以下の修正プログラムをダウンロードしてお試しください。フィードバックをお寄せください。

ご対応ありがとうございます。
修正版を使って、例外が発生しなくなったことを確認しました。

私は下記のコードでオブジェクトのテキストと代替テキストを取得しています。
しかし、Aspose.Cells for Java 18.5.7を使用した場合、
コメントのテキストがShape.getText()とShape.getAlternativeText()の両方から取得されます。
そのため、コメントのテキストが二重で取得されてしまいます。

Workbook workbook = new Workbook(inputStream);
List<String> texts = new ArrayList<>();

for (Object sheetObj : workbook.getWorksheets()) {

    Worksheet sheet = (Worksheet) sheetObj;
	for (Object shapeObj : sheet.getShapes()) {

	    Shape shape = (Shape) shapeObj;

	    texts.add(shape.getText());  // return "user1:comment_01"
	    texts.add(shape.getTitle());
	    texts.add(shape.getAlternativeText()); // return "user1:comment_01
	}
}

Aspose.Cells for Java 18.5では発生していなかった問題ですので、修正していただくことは可能でしょうか。

使用バージョン:Aspose.Cells for Java 18.5.7
サンプルデータ:comment.zip (13.2 KB)

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

@yudai_yamaguchi

私たちはこの問題を察知し、調査と修正のためにデータベースに記録しました。 問題が解決されるか、その他のニュースがありましたら、このトピックで更新いたします。

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

  • CELLSJAVA-42656 - AlternativeText returns value of the comment Text

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

@yudai_yamaguchi

CELLSJAVA-42656の問題が修正されたことをお知らせするためです。 QAを実行した後、すぐに修正を提供し、その他の拡張機能や修正が含まれます。

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

The issues you have found earlier (filed as CELLSJAVA-42638) have been fixed in Aspose.Cells for Java 18.6. Please also see the document for your reference: Installation|Documentation

18.6を使って1つ目の例外が発生しなくなったことを確認しました。
2つ目の問題(42656)が対応されているバージョンの提供もお待ちしています
引き続きご対応の程よろしくお願いいたします。

@yudai_yamaguchi

ご意見をいただきありがとうございます。 CELLSJAVA-42656も修正されました。 私たちはできるだけ早くあなたと修正を共有します。