View | Details | Raw Unified | Return to bug 41726
Collapse All | Expand All

(-)src/java/org/apache/poi/hssf/record/SharedFormulaRecord.java (-22 / +37 lines)
Lines 156-163 Link Here
156
156
157
    protected void fillFields(RecordInputStream in)
157
    protected void fillFields(RecordInputStream in)
158
    {
158
    {
159
      field_1_first_row       = in.readShort();
159
      field_1_first_row       = in.readUShort();
160
      field_2_last_row        = in.readShort();
160
      field_2_last_row        = in.readUShort();
161
      field_3_first_column    = in.readUByte();
161
      field_3_first_column    = in.readUByte();
162
      field_4_last_column     = in.readUByte();
162
      field_4_last_column     = in.readUByte();
163
      field_5_reserved        = in.readShort();
163
      field_5_reserved        = in.readShort();
Lines 200-207 Link Here
200
            Ptg ptg = (Ptg) field_7_parsed_expr.get(k);
200
            Ptg ptg = (Ptg) field_7_parsed_expr.get(k);
201
            if (ptg instanceof RefNPtg) {
201
            if (ptg instanceof RefNPtg) {
202
              RefNPtg refNPtg = (RefNPtg)ptg;
202
              RefNPtg refNPtg = (RefNPtg)ptg;
203
              ptg = new ReferencePtg( (short)(formulaRow + refNPtg.getRow()),
203
              ptg = new ReferencePtg(fixupRelativeRow(formulaRow,refNPtg.getRow(),refNPtg.isRowRelative()),
204
                                      (byte)(formulaColumn + refNPtg.getColumn()),
204
                                     fixupRelativeColumn(formulaColumn,refNPtg.getColumn(),refNPtg.isColRelative()),
205
                                     refNPtg.isRowRelative(),
205
                                     refNPtg.isRowRelative(),
206
                                     refNPtg.isColRelative());
206
                                     refNPtg.isColRelative());
207
            } else if (ptg instanceof RefNVPtg) {
207
            } else if (ptg instanceof RefNVPtg) {
Lines 206-219 Link Here
206
                                     refNPtg.isColRelative());
206
                                     refNPtg.isColRelative());
207
            } else if (ptg instanceof RefNVPtg) {
207
            } else if (ptg instanceof RefNVPtg) {
208
              RefNVPtg refNVPtg = (RefNVPtg)ptg;
208
              RefNVPtg refNVPtg = (RefNVPtg)ptg;
209
              ptg = new RefVPtg( (short)(formulaRow + refNVPtg.getRow()),
209
              ptg = new RefVPtg(fixupRelativeRow(formulaRow,refNVPtg.getRow(),refNVPtg.isRowRelative()),
210
                                 (byte)(formulaColumn + refNVPtg.getColumn()),
210
                                fixupRelativeColumn(formulaColumn,refNVPtg.getColumn(),refNVPtg.isColRelative()),
211
                                 refNVPtg.isRowRelative(),
211
                                refNVPtg.isRowRelative(),
212
                                 refNVPtg.isColRelative());
212
                                refNVPtg.isColRelative());
213
            } else if (ptg instanceof RefNAPtg) {
213
            } else if (ptg instanceof RefNAPtg) {
214
              RefNAPtg refNAPtg = (RefNAPtg)ptg;
214
              RefNAPtg refNAPtg = (RefNAPtg)ptg;
215
              ptg = new RefAPtg( (short)(formulaRow + refNAPtg.getRow()),
215
              ptg = new RefAPtg( fixupRelativeRow(formulaRow,refNAPtg.getRow(),refNAPtg.isRowRelative()),
216
                                 (byte)(formulaColumn + refNAPtg.getColumn()),
216
                                 fixupRelativeColumn(formulaColumn,refNAPtg.getColumn(),refNAPtg.isColRelative()),
217
                                 refNAPtg.isRowRelative(),
217
                                 refNAPtg.isRowRelative(),
218
                                 refNAPtg.isColRelative());
218
                                 refNAPtg.isColRelative());
219
            } else if (ptg instanceof AreaNPtg) {
219
            } else if (ptg instanceof AreaNPtg) {
Lines 218-227 Link Here
218
                                 refNAPtg.isColRelative());
218
                                 refNAPtg.isColRelative());
219
            } else if (ptg instanceof AreaNPtg) {
219
            } else if (ptg instanceof AreaNPtg) {
220
              AreaNPtg areaNPtg = (AreaNPtg)ptg;
220
              AreaNPtg areaNPtg = (AreaNPtg)ptg;
221
              ptg = new AreaPtg((short)(formulaRow + areaNPtg.getFirstRow()),
221
              ptg = new AreaPtg(fixupRelativeRow(formulaRow,areaNPtg.getFirstRow(),areaNPtg.isFirstRowRelative()),
222
                                (short)(formulaRow + areaNPtg.getLastRow()),
222
                                fixupRelativeRow(formulaRow,areaNPtg.getLastRow(),areaNPtg.isLastRowRelative()),
223
                                (short)(formulaColumn + areaNPtg.getFirstColumn()),
223
                                fixupRelativeColumn(formulaColumn,areaNPtg.getFirstColumn(),areaNPtg.isFirstColRelative()),
224
                                (short)(formulaColumn + areaNPtg.getLastColumn()),
224
                                fixupRelativeColumn(formulaColumn,areaNPtg.getLastColumn(),areaNPtg.isLastColRelative()),
225
                                areaNPtg.isFirstRowRelative(),
225
                                areaNPtg.isFirstRowRelative(),
226
                                areaNPtg.isLastRowRelative(),
226
                                areaNPtg.isLastRowRelative(),
227
                                areaNPtg.isFirstColRelative(),
227
                                areaNPtg.isFirstColRelative(),
Lines 228-237 Link Here
228
                                areaNPtg.isLastColRelative());
228
                                areaNPtg.isLastColRelative());
229
            } else if (ptg instanceof AreaNVPtg) {
229
            } else if (ptg instanceof AreaNVPtg) {
230
              AreaNVPtg areaNVPtg = (AreaNVPtg)ptg;
230
              AreaNVPtg areaNVPtg = (AreaNVPtg)ptg;
231
              ptg = new AreaVPtg((short)(formulaRow + areaNVPtg.getFirstRow()),
231
              ptg = new AreaVPtg(fixupRelativeRow(formulaRow,areaNVPtg.getFirstRow(),areaNVPtg.isFirstRowRelative()),
232
                                (short)(formulaRow + areaNVPtg.getLastRow()),
232
                                fixupRelativeRow(formulaRow,areaNVPtg.getLastRow(),areaNVPtg.isLastRowRelative()),
233
                                (short)(formulaColumn + areaNVPtg.getFirstColumn()),
233
                                fixupRelativeColumn(formulaColumn,areaNVPtg.getFirstColumn(),areaNVPtg.isFirstColRelative()),
234
                                (short)(formulaColumn + areaNVPtg.getLastColumn()),
234
                                fixupRelativeColumn(formulaColumn,areaNVPtg.getLastColumn(),areaNVPtg.isLastColRelative()),
235
                                areaNVPtg.isFirstRowRelative(),
235
                                areaNVPtg.isFirstRowRelative(),
236
                                areaNVPtg.isLastRowRelative(),
236
                                areaNVPtg.isLastRowRelative(),
237
                                areaNVPtg.isFirstColRelative(),
237
                                areaNVPtg.isFirstColRelative(),
Lines 238-247 Link Here
238
                                areaNVPtg.isLastColRelative());
238
                                areaNVPtg.isLastColRelative());
239
            } else if (ptg instanceof AreaNAPtg) {
239
            } else if (ptg instanceof AreaNAPtg) {
240
              AreaNAPtg areaNAPtg = (AreaNAPtg)ptg;
240
              AreaNAPtg areaNAPtg = (AreaNAPtg)ptg;
241
              ptg = new AreaAPtg((short)(formulaRow + areaNAPtg.getFirstRow()),
241
              ptg = new AreaAPtg(fixupRelativeRow(formulaRow,areaNAPtg.getFirstRow(),areaNAPtg.isFirstRowRelative()),
242
                                (short)(formulaRow + areaNAPtg.getLastRow()),
242
                                fixupRelativeRow(formulaRow,areaNAPtg.getLastRow(),areaNAPtg.isLastRowRelative()),
243
                                (short)(formulaColumn + areaNAPtg.getFirstColumn()),
243
                                fixupRelativeColumn(formulaColumn,areaNAPtg.getFirstColumn(),areaNAPtg.isFirstColRelative()),
244
                                (short)(formulaColumn + areaNAPtg.getLastColumn()),
244
                                fixupRelativeColumn(formulaColumn,areaNAPtg.getLastColumn(),areaNAPtg.isLastColRelative()),
245
                                areaNAPtg.isFirstRowRelative(),
245
                                areaNAPtg.isFirstRowRelative(),
246
                                areaNAPtg.isLastRowRelative(),
246
                                areaNAPtg.isLastRowRelative(),
247
                                areaNAPtg.isFirstColRelative(),
247
                                areaNAPtg.isFirstColRelative(),
Lines 256-261 Link Here
256
        throw new RuntimeException("Shared Formula Conversion: Coding Error");
256
        throw new RuntimeException("Shared Formula Conversion: Coding Error");
257
      }
257
      }
258
    }
258
    }
259
    
260
    private short fixupRelativeColumn(int currentcolumn, short column, boolean relative) {
261
    	if(relative) {
262
    		if((column&128)!=0) column=(short)(column-256);
263
    		column+=currentcolumn;
264
    	}
265
    	return column;
266
	}
267
268
	private short fixupRelativeRow(int currentrow, short row, boolean relative) {
269
		if(relative) {
270
			row+=currentrow;
271
		}
272
		return row;
273
	}
259
274
260
	/**
275
	/**
261
	 * Mirroring formula records so it is registered in the ValueRecordsAggregate
276
	 * Mirroring formula records so it is registered in the ValueRecordsAggregate

Return to bug 41726