@@ -563,7 +563,7 @@ func TestGetValueFrom(t *testing.T) {
563563 assert .NoError (t , err )
564564 value , err := c .getValueFrom (f , sst , false )
565565 assert .NoError (t , err )
566- assert .Equal ( t , "" , value )
566+ assert .Empty ( t , value )
567567
568568 c = xlsxC {T : "s" , V : " 1 " }
569569 value , err = c .getValueFrom (f , & xlsxSST {Count : 1 , SI : []xlsxSI {{}, {T : & xlsxT {Val : "s" }}}}, false )
@@ -602,13 +602,17 @@ func TestGetCellFormula(t *testing.T) {
602602 formula , err := f .GetCellFormula ("Sheet1" , "B3" )
603603 assert .NoError (t , err )
604604 assert .Equal (t , expected , formula )
605+ // Test get shared formula form cache
606+ formula , err = f .GetCellFormula ("Sheet1" , "B3" )
607+ assert .NoError (t , err )
608+ assert .Equal (t , expected , formula )
605609 }
606610
607611 f .Sheet .Delete ("xl/worksheets/sheet1.xml" )
608612 f .Pkg .Store ("xl/worksheets/sheet1.xml" , []byte (`<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"><sheetData><row r="2"><c r="B2"><f t="shared" si="0"></f></c></row></sheetData></worksheet>` ))
609613 formula , err := f .GetCellFormula ("Sheet1" , "B2" )
610614 assert .NoError (t , err )
611- assert .Equal ( t , "" , formula )
615+ assert .Empty ( t , formula )
612616
613617 // Test get array formula with invalid cell range reference
614618 f = NewFile ()
@@ -628,6 +632,81 @@ func TestGetCellFormula(t *testing.T) {
628632 f .Sheet .Delete ("xl/worksheets/sheet1.xml" )
629633 f .Pkg .Store ("xl/worksheets/sheet1.xml" , MacintoshCyrillicCharset )
630634 assert .EqualError (t , f .setArrayFormulaCells (), "XML syntax error on line 1: invalid UTF-8" )
635+
636+ // Test get shared formula after updated refer cell formula, the shared
637+ // formula cell reference range covered the previous.
638+ f = NewFile ()
639+ formulaType , ref = STCellFormulaTypeShared , "C2:C6"
640+ assert .NoError (t , f .SetCellFormula ("Sheet1" , "C2" , "=A2+B2" , FormulaOpts {Ref : & ref , Type : & formulaType }))
641+ formula , err = f .GetCellFormula ("Sheet1" , "C2" )
642+ assert .NoError (t , err )
643+ assert .Equal (t , "A2+B2" , formula )
644+ formula , err = f .GetCellFormula ("Sheet1" , "C6" )
645+ assert .NoError (t , err )
646+ assert .Equal (t , "A6+B6" , formula )
647+
648+ formulaType , ref = STCellFormulaTypeShared , "C2:C8"
649+ assert .NoError (t , f .SetCellFormula ("Sheet1" , "C2" , "=A2*B2" , FormulaOpts {Ref : & ref , Type : & formulaType }))
650+ formula , err = f .GetCellFormula ("Sheet1" , "C2" )
651+ assert .NoError (t , err )
652+ assert .Equal (t , "A2*B2" , formula )
653+ formula , err = f .GetCellFormula ("Sheet1" , "C8" )
654+ assert .NoError (t , err )
655+ assert .Equal (t , "A8*B8" , formula )
656+ assert .NoError (t , f .Close ())
657+
658+ // Test get shared formula after updated refer cell formula, the shared
659+ // formula cell reference range not over the previous.
660+ f = NewFile ()
661+ formulaType , ref = STCellFormulaTypeShared , "C2:C6"
662+ assert .NoError (t , f .SetCellFormula ("Sheet1" , "C2" , "=A2+B2" , FormulaOpts {Ref : & ref , Type : & formulaType }))
663+ formula , err = f .GetCellFormula ("Sheet1" , "C2" )
664+ assert .NoError (t , err )
665+ assert .Equal (t , "A2+B2" , formula )
666+ formula , err = f .GetCellFormula ("Sheet1" , "C6" )
667+ assert .NoError (t , err )
668+ assert .Equal (t , "A6+B6" , formula )
669+
670+ formulaType , ref = STCellFormulaTypeShared , "C2:C4"
671+ assert .NoError (t , f .SetCellFormula ("Sheet1" , "C2" , "=A2*B2" , FormulaOpts {Ref : & ref , Type : & formulaType }))
672+ formula , err = f .GetCellFormula ("Sheet1" , "C2" )
673+ assert .NoError (t , err )
674+ assert .Equal (t , "A2*B2" , formula )
675+ formula , err = f .GetCellFormula ("Sheet1" , "C6" )
676+ assert .NoError (t , err )
677+ assert .Empty (t , formula )
678+
679+ // Test get shared formula after remove refer cell formula
680+ f = NewFile ()
681+ formulaType , ref = STCellFormulaTypeShared , "C2:C6"
682+ assert .NoError (t , f .SetCellFormula ("Sheet1" , "C2" , "=A2+B2" , FormulaOpts {Ref : & ref , Type : & formulaType }))
683+
684+ assert .NoError (t , f .SetCellFormula ("Sheet1" , "C2" , "" ))
685+
686+ formula , err = f .GetCellFormula ("Sheet1" , "C2" )
687+ assert .NoError (t , err )
688+ assert .Empty (t , formula )
689+ formula , err = f .GetCellFormula ("Sheet1" , "C6" )
690+ assert .NoError (t , err )
691+ assert .Empty (t , formula )
692+
693+ formulaType , ref = STCellFormulaTypeShared , "C2:C8"
694+ assert .NoError (t , f .SetCellFormula ("Sheet1" , "C2" , "=A2*B2" , FormulaOpts {Ref : & ref , Type : & formulaType }))
695+ formula , err = f .GetCellFormula ("Sheet1" , "C2" )
696+ assert .NoError (t , err )
697+ assert .Equal (t , "A2*B2" , formula )
698+ formula , err = f .GetCellFormula ("Sheet1" , "C8" )
699+ assert .NoError (t , err )
700+ assert .Equal (t , "A8*B8" , formula )
701+ assert .NoError (t , f .Close ())
702+ }
703+
704+ func TestConvertSharedFormula (t * testing.T ) {
705+ c := xlsxC {R : "A" }
706+ _ , err := c .convertSharedFormula ("A" )
707+ assert .Equal (t , newCellNameToCoordinatesError ("A" , newInvalidCellNameError ("A" )), err )
708+ _ , err = c .convertSharedFormula ("A1" )
709+ assert .Equal (t , newCellNameToCoordinatesError ("A" , newInvalidCellNameError ("A" )), err )
631710}
632711
633712func ExampleFile_SetCellFloat () {
0 commit comments