@@ -547,6 +547,43 @@ func TestDeleteSheet(t *testing.T) {
547547 assert .NoError (t , f .SaveAs (filepath .Join ("test" , "TestDeleteSheet2.xlsx" )))
548548}
549549
550+ func TestMoveSheet (t * testing.T ) {
551+ f := NewFile ()
552+ defer f .Close ()
553+ for i := 2 ; i < 6 ; i ++ {
554+ _ , err := f .NewSheet ("Sheet" + strconv .Itoa (i ))
555+ assert .NoError (t , err )
556+ }
557+ assert .Equal (t , []string {"Sheet1" , "Sheet2" , "Sheet3" , "Sheet4" , "Sheet5" }, f .GetSheetList ())
558+
559+ // Move target to first position
560+ assert .NoError (t , f .MoveSheet ("Sheet2" , "Sheet1" ))
561+ assert .Equal (t , []string {"Sheet2" , "Sheet1" , "Sheet3" , "Sheet4" , "Sheet5" }, f .GetSheetList ())
562+ assert .Equal (t , "Sheet1" , f .GetSheetName (f .GetActiveSheetIndex ()))
563+
564+ // Move target to last position
565+ assert .NoError (t , f .MoveSheet ("Sheet2" , "Sheet5" ))
566+ assert .NoError (t , f .MoveSheet ("Sheet5" , "Sheet2" ))
567+ assert .Equal (t , []string {"Sheet1" , "Sheet3" , "Sheet4" , "Sheet5" , "Sheet2" }, f .GetSheetList ())
568+
569+ // Move target to same position
570+ assert .NoError (t , f .MoveSheet ("Sheet1" , "Sheet1" ))
571+ assert .Equal (t , []string {"Sheet1" , "Sheet3" , "Sheet4" , "Sheet5" , "Sheet2" }, f .GetSheetList ())
572+
573+ // Test move sheet with invalid sheet name
574+ assert .Equal (t , ErrSheetNameBlank , f .MoveSheet ("" , "Sheet2" ))
575+ assert .Equal (t , ErrSheetNameBlank , f .MoveSheet ("Sheet1" , "" ))
576+
577+ // Test move sheet on not exists worksheet
578+ assert .Equal (t , ErrSheetNotExist {"SheetN" }, f .MoveSheet ("SheetN" , "Sheet2" ))
579+ assert .Equal (t , ErrSheetNotExist {"SheetN" }, f .MoveSheet ("Sheet1" , "SheetN" ))
580+
581+ // Test move sheet with unsupported workbook charset
582+ f .WorkBook = nil
583+ f .Pkg .Store ("xl/workbook.xml" , MacintoshCyrillicCharset )
584+ assert .EqualError (t , f .MoveSheet ("Sheet2" , "Sheet1" ), "XML syntax error on line 1: invalid UTF-8" )
585+ }
586+
550587func TestDeleteAndAdjustDefinedNames (t * testing.T ) {
551588 deleteAndAdjustDefinedNames (nil , 0 )
552589 deleteAndAdjustDefinedNames (& xlsxWorkbook {}, 0 )
0 commit comments