@@ -443,5 +443,229 @@ public void ReadAndCopyTwoAnchorImage()
443
443
SaveAndCleanup ( package ) ;
444
444
}
445
445
}
446
+
447
+ [ TestMethod ]
448
+ public void CopyImagesBetweenTwo_Unsaved_Workbooks ( )
449
+ {
450
+ string sheetName = "AWs" ;
451
+ string wbName = "CopyPicture_PictureObject" ;
452
+
453
+ using ( var src = OpenPackage ( $ "{ wbName } 1.xlsx", true ) )
454
+ {
455
+ var wbFirst = src . Workbook ;
456
+ var wsFirst = wbFirst . Worksheets . Add ( sheetName ) ;
457
+
458
+ var pic1 = wsFirst . Drawings . AddPicture ( "epplusPicture" , GetResourceFile ( "EPPlus.png" ) ) ;
459
+
460
+ using ( var target = OpenPackage ( $ "{ wbName } 2.xlsx", true ) )
461
+ {
462
+ var wbSecond = target . Workbook ;
463
+ var wsSecond = wbSecond . Worksheets . Add ( sheetName ) ;
464
+
465
+ var pic2 = wsSecond . Drawings . AddPicture ( "screenshotPicture" , GetResourceFile ( "screenshot.PNG" ) ) ;
466
+ pic1 . Copy ( wsSecond , 1 , 1 , 0 , 0 ) ;
467
+ pic2 . Copy ( wsFirst , 1 , 1 , 0 , 0 ) ;
468
+
469
+ Assert . AreEqual ( 2 , wsSecond . Drawings . Count ) ;
470
+ Assert . AreEqual ( 2 , wsFirst . Drawings . Count ) ;
471
+
472
+ Assert . AreEqual ( "epplusPicture" , wsSecond . Drawings [ 1 ] . Name ) ;
473
+ Assert . AreEqual ( "screenshotPicture" , wsFirst . Drawings [ 1 ] . Name ) ;
474
+
475
+ //Check that we don't create new rels as image already exists in target
476
+ Assert . AreEqual ( 2 , wsFirst . Drawings . Part . _rels . Count ) ;
477
+ Assert . AreEqual ( 2 , wsSecond . Drawings . Part . _rels . Count ) ;
478
+
479
+ SaveAndCleanup ( target ) ;
480
+ }
481
+ SaveAndCleanup ( src ) ;
482
+ }
483
+ }
484
+
485
+ [ TestMethod ]
486
+ public void CopyImagesBetweenTwo_UnsavedWorkbooks_NamedRanges ( )
487
+ {
488
+ string sheetName = "AWs" ;
489
+ string rangeName = "SomeName" ;
490
+ string rangeAddress = "A1:G9" ;
491
+ string wbName = "CopyPicture_NamedRanges" ;
492
+
493
+ using ( var src = OpenPackage ( $ "{ wbName } 1.xlsx", true ) )
494
+ {
495
+ var wbFirst = src . Workbook ;
496
+ var wsFirst = wbFirst . Worksheets . Add ( sheetName ) ;
497
+
498
+ var pic1 = wsFirst . Drawings . AddPicture ( "epplusPicture" , GetResourceFile ( "EPPlus.png" ) ) ;
499
+
500
+ wsFirst . Names . AddName ( rangeName , wsFirst . Cells [ rangeAddress ] ) ;
501
+
502
+ using ( var target = OpenPackage ( $ "{ wbName } 2.xlsx", true ) )
503
+ {
504
+ var wbSecond = target . Workbook ;
505
+ var wsSecond = wbSecond . Worksheets . Add ( sheetName ) ;
506
+
507
+ var pic2 = wsSecond . Drawings . AddPicture ( "screenshotPicture" , GetResourceFile ( "screenshot.PNG" ) ) ;
508
+ wsSecond . Names . AddName ( rangeName , wsSecond . Cells [ rangeAddress ] ) ;
509
+
510
+ CopyImagesBetweenWorkbooks ( src , target , sheetName , rangeName ) ;
511
+
512
+ //ensure "normal" copying works
513
+ Assert . AreEqual ( 2 , wsSecond . Drawings . Count ) ;
514
+ Assert . AreEqual ( "screenshotPicture" , wsSecond . Drawings [ 0 ] . Name ) ;
515
+ Assert . AreEqual ( "epplusPicture" , wsSecond . Drawings [ 1 ] . Name ) ;
516
+
517
+ CopyImagesBetweenWorkbooks ( target , src , sheetName , rangeName ) ;
518
+
519
+ //Ensure nothing's changed in the workbook we are copying FROM when copying back
520
+ Assert . AreEqual ( 2 , wsSecond . Drawings . Count ) ;
521
+ Assert . AreEqual ( "screenshotPicture" , wsSecond . Drawings [ 0 ] . Name ) ;
522
+ Assert . AreEqual ( "epplusPicture" , wsSecond . Drawings [ 1 ] . Name ) ;
523
+
524
+ //Copies the copy therefore 3
525
+ Assert . AreEqual ( 3 , wsFirst . Drawings . Count ) ;
526
+ Assert . AreEqual ( "epplusPicture" , wsFirst . Drawings [ 0 ] . Name ) ;
527
+ Assert . AreEqual ( "screenshotPicture" , wsFirst . Drawings [ 1 ] . Name ) ;
528
+ Assert . AreEqual ( "epplusPicture1" , wsFirst . Drawings [ 2 ] . Name ) ;
529
+
530
+ //Check that we don't create new rels as image already exists in target
531
+ Assert . AreEqual ( 2 , wsFirst . Drawings . Part . _rels . Count ) ;
532
+ Assert . AreEqual ( 2 , wsSecond . Drawings . Part . _rels . Count ) ;
533
+
534
+ //Ensure no missmatch of ids
535
+ var relIdOriginal = wsFirst . Drawings [ 0 ] . As . Picture . GetRelId ( ) ;
536
+ var relIdCopiedBack = wsFirst . Drawings [ 2 ] . As . Picture . GetRelId ( ) ;
537
+
538
+ Assert . AreEqual ( relIdOriginal , relIdCopiedBack ) ;
539
+ Assert . AreEqual ( "rId1" , relIdOriginal ) ;
540
+ Assert . AreEqual ( "rId2" , wsFirst . Drawings [ 1 ] . As . Picture . GetRelId ( ) ) ;
541
+
542
+ SaveAndCleanup ( target ) ;
543
+ }
544
+ SaveAndCleanup ( src ) ;
545
+ }
546
+ }
547
+
548
+ [ TestMethod ]
549
+ public void CopyImagesBetweenTwo_Saved_Workbooks_NamedRanges ( )
550
+ {
551
+ string sheetName = "AWs" ;
552
+ string rangeName = "SomeName" ;
553
+ string rangeAddress = "A1:G9" ;
554
+ string wbName = "CopyPictureRead_NamedRanges" ;
555
+
556
+ //Create the workbooks
557
+ using ( var src = OpenPackage ( $ "{ wbName } 1.xlsx", true ) )
558
+ {
559
+ var wbFirst = src . Workbook ;
560
+ var wsFirst = wbFirst . Worksheets . Add ( sheetName ) ;
561
+
562
+ var pic1 = wsFirst . Drawings . AddPicture ( "epplusPicture" , GetResourceFile ( "EPPlus.png" ) ) ;
563
+
564
+ wsFirst . Names . AddName ( rangeName , wsFirst . Cells [ rangeAddress ] ) ;
565
+
566
+ SaveAndCleanup ( src ) ;
567
+ }
568
+ using ( var target = OpenPackage ( $ "{ wbName } 2.xlsx", true ) )
569
+ {
570
+ var wbSecond = target . Workbook ;
571
+ var wsSecond = wbSecond . Worksheets . Add ( sheetName ) ;
572
+
573
+ var pic2 = wsSecond . Drawings . AddPicture ( "screenshotPicture" , GetResourceFile ( "screenshot.PNG" ) ) ;
574
+ wsSecond . Names . AddName ( rangeName , wsSecond . Cells [ rangeAddress ] ) ;
575
+
576
+ SaveAndCleanup ( target ) ;
577
+ }
578
+
579
+ //Read and copy images between the workbooks
580
+ using ( var src = OpenPackage ( $ "{ wbName } 1.xlsx") )
581
+ {
582
+ var wbFirst = src . Workbook ;
583
+ var wsFirst = wbFirst . Worksheets . First ( ) ;
584
+
585
+ using ( var target = OpenPackage ( $ "{ wbName } 2.xlsx") )
586
+ {
587
+ var wbSecond = target . Workbook ;
588
+ var wsSecond = wbSecond . Worksheets . First ( ) ;
589
+
590
+ Assert . AreEqual ( 1 , wsSecond . Drawings . Count ) ;
591
+ Assert . AreEqual ( 1 , wsFirst . Drawings . Count ) ;
592
+
593
+ CopyImagesBetweenWorkbooks ( src , target , sheetName , rangeName ) ;
594
+ CopyImagesBetweenWorkbooks ( target , src , sheetName , rangeName ) ;
595
+
596
+ Assert . AreEqual ( 2 , wsSecond . Drawings . Count ) ;
597
+ //Copies the copy therefore 3
598
+ Assert . AreEqual ( 3 , wsFirst . Drawings . Count ) ;
599
+
600
+ Assert . AreEqual ( "epplusPicture" , wsSecond . Drawings [ 1 ] . Name ) ;
601
+ Assert . AreEqual ( "screenshotPicture" , wsFirst . Drawings [ 1 ] . Name ) ;
602
+
603
+ //Assert.AreEqual("1", wsFirst.Drawings[2].As.Picture.Part._rels["0"].Id);
604
+
605
+ var outputName = GetOutputFile ( "" , "copy_" + target . File . Name ) . FullName ;
606
+ target . SaveAs ( outputName ) ;
607
+ }
608
+ var outputName2 = GetOutputFile ( "" , "copy_" + src . File . Name ) . FullName ;
609
+ src . SaveAs ( outputName2 ) ;
610
+ }
611
+ }
612
+
613
+ [ TestMethod ]
614
+ public void CopyImages_Read_EnsureWorkaround ( )
615
+ {
616
+ using ( var src = OpenTemplatePackage ( "ImageInRange1.xlsx" ) )
617
+ {
618
+ var wb = src . Workbook ;
619
+ using ( var target = OpenTemplatePackage ( "ImageInRange2.xlsx" ) )
620
+ {
621
+ var wb2 = target . Workbook ;
622
+
623
+ CopyNamedRangeToTargetSheetWB ( src , target , "sheet1" , "SomeName" ) ;
624
+
625
+ var outputName = GetOutputFile ( "" , "alt_" + target . File . Name ) . FullName ;
626
+ target . SaveAs ( outputName ) ;
627
+ }
628
+ var outputName2 = GetOutputFile ( "" , "alt_" + src . File . Name ) . FullName ;
629
+ src . SaveAs ( outputName2 ) ;
630
+ }
631
+ }
632
+
633
+ [ TestMethod ]
634
+ public void CopyImages_Read ( )
635
+ {
636
+ using ( var src = OpenTemplatePackage ( "ImageInRange1.xlsx" ) )
637
+ {
638
+ var wb = src . Workbook ;
639
+ using ( var target = OpenTemplatePackage ( "ImageInRange2.xlsx" ) )
640
+ {
641
+ var wb2 = target . Workbook ;
642
+
643
+ CopyImagesBetweenWorkbooks ( src , target , "sheet1" , "SomeName" ) ;
644
+
645
+ SaveAndCleanup ( target ) ;
646
+ }
647
+ SaveAndCleanup ( src ) ;
648
+ }
649
+ }
650
+
651
+ //From i1841 / s814
652
+ public void CopyImagesBetweenWorkbooks ( ExcelPackage src , ExcelPackage target , string sheetName , string namedRange )
653
+ {
654
+ var range = src . Workbook . Worksheets [ sheetName ] . Names [ namedRange ] ;
655
+ var targetRange = target . Workbook . Worksheets [ sheetName ] . Names [ namedRange ] ;
656
+ range . Copy ( targetRange ) ;
657
+ }
658
+
659
+ public void CopyNamedRangeToTargetSheetWB ( ExcelPackage src , ExcelPackage target , string sheetName , string namedRange )
660
+ {
661
+ var srcWs = src . Workbook . Worksheets [ sheetName ] ;
662
+ var tmpWs = target . Workbook . Worksheets . Add ( "tmpCopy" , srcWs ) ;
663
+
664
+ var range = tmpWs . Names [ namedRange ] ;
665
+ var targetRange = target . Workbook . Worksheets [ sheetName ] . Names [ namedRange ] ;
666
+ range . Copy ( targetRange ) ;
667
+
668
+ target . Workbook . Worksheets . Delete ( tmpWs ) ;
669
+ }
446
670
}
447
671
}
0 commit comments