diff --git a/README.md b/README.md
index 3328916f..b02bd0a6 100644
--- a/README.md
+++ b/README.md
@@ -1457,8 +1457,6 @@ MiniExcel.SaveAs(path, reader,configuration:config);
#### 6. Batch Add Image (MiniExcel.AddPicture)
-Please add pictures before batch generate rows data, or system will load large memory usage when calling AddPicture.
-
```csharp
var images = new[]
{
diff --git a/README.zh-CN.md b/README.zh-CN.md
index e55b6a1a..1a938305 100644
--- a/README.zh-CN.md
+++ b/README.zh-CN.md
@@ -1634,8 +1634,6 @@ public class Order
#### 6. 批量添加/插入图片 (MiniExcel.AddPicture)
-请在批量生成行数据之前添加图片,否则在调用 AddPicture 时系统会占用大量内存。
-
```csharp
var images = new[]
{
diff --git a/README.zh-Hant.md b/README.zh-Hant.md
index 13b3c64d..ff1562b3 100644
--- a/README.zh-Hant.md
+++ b/README.zh-Hant.md
@@ -1368,8 +1368,6 @@ MiniExcel.SaveAs(path, reader,configuration:config);
#### 6. 批量添加/插入圖片 (MiniExcel.AddPicture)
-請在批量生成行資料之前新增圖片,否則在呼叫 AddPicture 時系統將會佔用大量記憶體。
-
```csharp
var images = new[]
{
diff --git a/docs/README.md b/docs/README.md
index 42248b87..cf28a705 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -23,14 +23,6 @@
---
-### 1.41.3
-- [New] Adding QuoteWhitespaces option to CsvConfiguration for adding double quotes to string containing whitespaces #790 (via @michelebastione )
-- [Bug] Fixed bug that made the DynamicExcelColumn property "Ignore" not work when generating using an IDataReader as source #584 (via @michelebastione )
-- [Bug] v1.41.2 AddPicture not working #814 (via @shps951023)
-- [Bug] v1.41.1 AddPicture image max column and row are 2 cells #815 (via @shps951023)
-- [Bug] AddPicture get error same export file and second time. #816 (via @shps951023)
-
-
### 1.41.2
- [New] Fixes enum behaviour and adds support for DescriptionAttribute when saving by template (via @michelebastione )
- [Bug] SaveAsByTemplate - Excel Dimension Xml is null #459 (via @michelebastione )
diff --git a/docs/README.zh-CN.md b/docs/README.zh-CN.md
index 844cd3a7..b1df9803 100644
--- a/docs/README.zh-CN.md
+++ b/docs/README.zh-CN.md
@@ -27,17 +27,6 @@
-### 1.41.3
-
-* 【新增】在 `CsvConfiguration` 中新增 `QuoteWhitespaces` 選項,用於對包含空白字元的字串加上雙引號 #790(貢獻者:@michelebastione)
-* 【錯誤修正】修正使用 `IDataReader` 作為來源產生資料時,`DynamicExcelColumn` 的 `Ignore` 屬性無效的問題 #584(貢獻者:@michelebastione)
-* 【錯誤修正】v1.41.2 中 `AddPicture` 功能無法使用的問題 #814(貢獻者:@shps951023)
-* 【錯誤修正】v1.41.1 中 `AddPicture` 插入的圖片最大列與欄僅限於 2 個儲存格的問題 #815(貢獻者:@shps951023)
-* 【錯誤修正】`AddPicture` 在匯出檔案後再次執行時出現錯誤的問題 #816(貢獻者:@shps951023)
-
-
-
-
### 1.41.2
- [New] 增加 enum behaviour and adds support for DescriptionAttribute when saving by template (via @michelebastione )
- [Bug] SaveAsByTemplate - Excel Dimension Xml is null #459 (via @michelebastione )
diff --git a/docs/README.zh-Hant.md b/docs/README.zh-Hant.md
index a09e23c6..2dfbbd81 100644
--- a/docs/README.zh-Hant.md
+++ b/docs/README.zh-Hant.md
@@ -25,16 +25,6 @@
---
-
-### 1.41.3
-
-* 【新增】在 CsvConfiguration 中新增 `QuoteWhitespaces` 選項,讓包含空白字元的字串自動加上雙引號 #790(由 @michelebastione 提供)
-* 【修正】修正當使用 IDataReader 作為資料來源時,DynamicExcelColumn 的 `Ignore` 屬性無效的問題 #584(由 @michelebastione 提供)
-* 【修正】v1.41.2 中 `AddPicture` 功能無法使用的問題 #814(由 @shps951023 提供)
-* 【修正】v1.41.1 中 `AddPicture` 插入的圖片最大列與欄僅為兩格儲存格的問題 #815(由 @shps951023 提供)
-* 【修正】當再次使用相同匯出檔案時,`AddPicture` 發生錯誤的問題 #816(由 @shps951023 提供)
-
-
### 1.41.2
- [New] 增加 enum behaviour and adds support for DescriptionAttribute when saving by template (via @michelebastione )
- [Bug] SaveAsByTemplate - Excel Dimension Xml is null #459 (via @michelebastione )
diff --git a/samples/xlsx/TestIssue815_1.xlsx b/samples/xlsx/TestIssue815_1.xlsx
deleted file mode 100644
index a2e266e8..00000000
Binary files a/samples/xlsx/TestIssue815_1.xlsx and /dev/null differ
diff --git a/samples/xlsx/TestIssue815_1/[Content_Types].xml b/samples/xlsx/TestIssue815_1/[Content_Types].xml
deleted file mode 100644
index 431bc4e5..00000000
--- a/samples/xlsx/TestIssue815_1/[Content_Types].xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue815_1/_rels/.rels b/samples/xlsx/TestIssue815_1/_rels/.rels
deleted file mode 100644
index 74bfd8d9..00000000
--- a/samples/xlsx/TestIssue815_1/_rels/.rels
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue815_1/docProps/app.xml b/samples/xlsx/TestIssue815_1/docProps/app.xml
deleted file mode 100644
index 2e1cee69..00000000
--- a/samples/xlsx/TestIssue815_1/docProps/app.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-Microsoft Excel0falseWorksheets1Sheet1falsefalsefalse16.0300
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue815_1/docProps/core.xml b/samples/xlsx/TestIssue815_1/docProps/core.xml
deleted file mode 100644
index 5ff2c2da..00000000
--- a/samples/xlsx/TestIssue815_1/docProps/core.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-WeiWei Lin2025-06-20T17:24:16Z2025-06-20T17:24:16Z
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue815_1/xl/_rels/workbook.xml.rels b/samples/xlsx/TestIssue815_1/xl/_rels/workbook.xml.rels
deleted file mode 100644
index 84cb2b36..00000000
--- a/samples/xlsx/TestIssue815_1/xl/_rels/workbook.xml.rels
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue815_1/xl/drawings/_rels/drawing1.xml.rels b/samples/xlsx/TestIssue815_1/xl/drawings/_rels/drawing1.xml.rels
deleted file mode 100644
index 0d3c6177..00000000
--- a/samples/xlsx/TestIssue815_1/xl/drawings/_rels/drawing1.xml.rels
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue815_1/xl/drawings/drawing1.xml b/samples/xlsx/TestIssue815_1/xl/drawings/drawing1.xml
deleted file mode 100644
index 621e88ba..00000000
--- a/samples/xlsx/TestIssue815_1/xl/drawings/drawing1.xml
+++ /dev/null
@@ -1,86 +0,0 @@
-
-
-
-
- 2
- 0
- 4
- 0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 12
- 0
- 6
- 0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue815_1/xl/media/image1.Png b/samples/xlsx/TestIssue815_1/xl/media/image1.Png
deleted file mode 100644
index fe3479dd..00000000
Binary files a/samples/xlsx/TestIssue815_1/xl/media/image1.Png and /dev/null differ
diff --git a/samples/xlsx/TestIssue815_1/xl/styles.xml b/samples/xlsx/TestIssue815_1/xl/styles.xml
deleted file mode 100644
index 606c7134..00000000
--- a/samples/xlsx/TestIssue815_1/xl/styles.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue815_1/xl/theme/theme1.xml b/samples/xlsx/TestIssue815_1/xl/theme/theme1.xml
deleted file mode 100644
index 4a95cff0..00000000
--- a/samples/xlsx/TestIssue815_1/xl/theme/theme1.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue815_1/xl/workbook.xml b/samples/xlsx/TestIssue815_1/xl/workbook.xml
deleted file mode 100644
index 75d5a5ad..00000000
--- a/samples/xlsx/TestIssue815_1/xl/workbook.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue815_1/xl/worksheets/_rels/sheet1.xml.rels b/samples/xlsx/TestIssue815_1/xl/worksheets/_rels/sheet1.xml.rels
deleted file mode 100644
index 205832e9..00000000
--- a/samples/xlsx/TestIssue815_1/xl/worksheets/_rels/sheet1.xml.rels
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue815_1/xl/worksheets/sheet1.xml b/samples/xlsx/TestIssue815_1/xl/worksheets/sheet1.xml
deleted file mode 100644
index cf3c093e..00000000
--- a/samples/xlsx/TestIssue815_1/xl/worksheets/sheet1.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue815_2.xlsx b/samples/xlsx/TestIssue815_2.xlsx
deleted file mode 100644
index d64d0771..00000000
Binary files a/samples/xlsx/TestIssue815_2.xlsx and /dev/null differ
diff --git a/samples/xlsx/TestIssue815_2/[Content_Types].xml b/samples/xlsx/TestIssue815_2/[Content_Types].xml
deleted file mode 100644
index 431bc4e5..00000000
--- a/samples/xlsx/TestIssue815_2/[Content_Types].xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue815_2/_rels/.rels b/samples/xlsx/TestIssue815_2/_rels/.rels
deleted file mode 100644
index 74bfd8d9..00000000
--- a/samples/xlsx/TestIssue815_2/_rels/.rels
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue815_2/docProps/app.xml b/samples/xlsx/TestIssue815_2/docProps/app.xml
deleted file mode 100644
index 2e1cee69..00000000
--- a/samples/xlsx/TestIssue815_2/docProps/app.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-Microsoft Excel0falseWorksheets1Sheet1falsefalsefalse16.0300
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue815_2/docProps/core.xml b/samples/xlsx/TestIssue815_2/docProps/core.xml
deleted file mode 100644
index 879b1b76..00000000
--- a/samples/xlsx/TestIssue815_2/docProps/core.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-WeiWei Lin2025-06-20T17:25:32Z2025-06-20T17:25:32Z
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue815_2/xl/_rels/workbook.xml.rels b/samples/xlsx/TestIssue815_2/xl/_rels/workbook.xml.rels
deleted file mode 100644
index 84cb2b36..00000000
--- a/samples/xlsx/TestIssue815_2/xl/_rels/workbook.xml.rels
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue815_2/xl/drawings/_rels/drawing1.xml.rels b/samples/xlsx/TestIssue815_2/xl/drawings/_rels/drawing1.xml.rels
deleted file mode 100644
index 0d3c6177..00000000
--- a/samples/xlsx/TestIssue815_2/xl/drawings/_rels/drawing1.xml.rels
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue815_2/xl/drawings/drawing1.xml b/samples/xlsx/TestIssue815_2/xl/drawings/drawing1.xml
deleted file mode 100644
index a7a0b29c..00000000
--- a/samples/xlsx/TestIssue815_2/xl/drawings/drawing1.xml
+++ /dev/null
@@ -1,86 +0,0 @@
-
-
-
-
- 2
- 0
- 4
- 0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 12
- 0
- 6
- 0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue815_2/xl/media/image1.Png b/samples/xlsx/TestIssue815_2/xl/media/image1.Png
deleted file mode 100644
index fe3479dd..00000000
Binary files a/samples/xlsx/TestIssue815_2/xl/media/image1.Png and /dev/null differ
diff --git a/samples/xlsx/TestIssue815_2/xl/styles.xml b/samples/xlsx/TestIssue815_2/xl/styles.xml
deleted file mode 100644
index 606c7134..00000000
--- a/samples/xlsx/TestIssue815_2/xl/styles.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue815_2/xl/theme/theme1.xml b/samples/xlsx/TestIssue815_2/xl/theme/theme1.xml
deleted file mode 100644
index 4a95cff0..00000000
--- a/samples/xlsx/TestIssue815_2/xl/theme/theme1.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue815_2/xl/workbook.xml b/samples/xlsx/TestIssue815_2/xl/workbook.xml
deleted file mode 100644
index 5f963b6a..00000000
--- a/samples/xlsx/TestIssue815_2/xl/workbook.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue815_2/xl/worksheets/_rels/sheet1.xml.rels b/samples/xlsx/TestIssue815_2/xl/worksheets/_rels/sheet1.xml.rels
deleted file mode 100644
index 205832e9..00000000
--- a/samples/xlsx/TestIssue815_2/xl/worksheets/_rels/sheet1.xml.rels
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue815_2/xl/worksheets/sheet1.xml b/samples/xlsx/TestIssue815_2/xl/worksheets/sheet1.xml
deleted file mode 100644
index 3893564e..00000000
--- a/samples/xlsx/TestIssue815_2/xl/worksheets/sheet1.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_1.xlsx b/samples/xlsx/TestIssue816_1.xlsx
deleted file mode 100644
index 9cbb6ef6..00000000
Binary files a/samples/xlsx/TestIssue816_1.xlsx and /dev/null differ
diff --git a/samples/xlsx/TestIssue816_1/[Content_Types].xml b/samples/xlsx/TestIssue816_1/[Content_Types].xml
deleted file mode 100644
index 51b87737..00000000
--- a/samples/xlsx/TestIssue816_1/[Content_Types].xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_1/_rels/.rels b/samples/xlsx/TestIssue816_1/_rels/.rels
deleted file mode 100644
index 74bfd8d9..00000000
--- a/samples/xlsx/TestIssue816_1/_rels/.rels
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_1/docProps/app.xml b/samples/xlsx/TestIssue816_1/docProps/app.xml
deleted file mode 100644
index 3db85d1a..00000000
--- a/samples/xlsx/TestIssue816_1/docProps/app.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-Microsoft Excel0falseWorksheets1Demofalsefalsefalse16.0300
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_1/docProps/core.xml b/samples/xlsx/TestIssue816_1/docProps/core.xml
deleted file mode 100644
index 84719d57..00000000
--- a/samples/xlsx/TestIssue816_1/docProps/core.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-WeiWei Lin2015-06-05T18:17:20Z2025-04-20T14:24:59Z
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_1/xl/_rels/workbook.xml.rels b/samples/xlsx/TestIssue816_1/xl/_rels/workbook.xml.rels
deleted file mode 100644
index 65485f71..00000000
--- a/samples/xlsx/TestIssue816_1/xl/_rels/workbook.xml.rels
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_1/xl/drawings/_rels/drawing8155941d47d148b990d1736b0f18eb14.xml.rels b/samples/xlsx/TestIssue816_1/xl/drawings/_rels/drawing8155941d47d148b990d1736b0f18eb14.xml.rels
deleted file mode 100644
index f54325b6..00000000
--- a/samples/xlsx/TestIssue816_1/xl/drawings/_rels/drawing8155941d47d148b990d1736b0f18eb14.xml.rels
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_1/xl/drawings/drawing8155941d47d148b990d1736b0f18eb14.xml b/samples/xlsx/TestIssue816_1/xl/drawings/drawing8155941d47d148b990d1736b0f18eb14.xml
deleted file mode 100644
index 4b79ac58..00000000
--- a/samples/xlsx/TestIssue816_1/xl/drawings/drawing8155941d47d148b990d1736b0f18eb14.xml
+++ /dev/null
@@ -1,119 +0,0 @@
-
-
-
- 2
- 0
- 2
- 0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 2
- 0
- 8
- 0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 4
- 0
- 8
- 0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_1/xl/media/image6ef1fcd090e14c71a7feddd858da8770.png b/samples/xlsx/TestIssue816_1/xl/media/image6ef1fcd090e14c71a7feddd858da8770.png
deleted file mode 100644
index 8efaf819..00000000
Binary files a/samples/xlsx/TestIssue816_1/xl/media/image6ef1fcd090e14c71a7feddd858da8770.png and /dev/null differ
diff --git a/samples/xlsx/TestIssue816_1/xl/media/imagef63d9dc50eff42f7964d4d5830991165.png b/samples/xlsx/TestIssue816_1/xl/media/imagef63d9dc50eff42f7964d4d5830991165.png
deleted file mode 100644
index fe3479dd..00000000
Binary files a/samples/xlsx/TestIssue816_1/xl/media/imagef63d9dc50eff42f7964d4d5830991165.png and /dev/null differ
diff --git a/samples/xlsx/TestIssue816_1/xl/media/imagefb0519c58a7b412ba445a8775ba5a5cf.png b/samples/xlsx/TestIssue816_1/xl/media/imagefb0519c58a7b412ba445a8775ba5a5cf.png
deleted file mode 100644
index 8efaf819..00000000
Binary files a/samples/xlsx/TestIssue816_1/xl/media/imagefb0519c58a7b412ba445a8775ba5a5cf.png and /dev/null differ
diff --git a/samples/xlsx/TestIssue816_1/xl/sharedStrings.xml b/samples/xlsx/TestIssue816_1/xl/sharedStrings.xml
deleted file mode 100644
index a74a5953..00000000
--- a/samples/xlsx/TestIssue816_1/xl/sharedStrings.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-Image1:Image2:
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_1/xl/styles.xml b/samples/xlsx/TestIssue816_1/xl/styles.xml
deleted file mode 100644
index 04695051..00000000
--- a/samples/xlsx/TestIssue816_1/xl/styles.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_1/xl/theme/theme1.xml b/samples/xlsx/TestIssue816_1/xl/theme/theme1.xml
deleted file mode 100644
index f82d9ebb..00000000
--- a/samples/xlsx/TestIssue816_1/xl/theme/theme1.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_1/xl/workbook.xml b/samples/xlsx/TestIssue816_1/xl/workbook.xml
deleted file mode 100644
index 2a833c3d..00000000
--- a/samples/xlsx/TestIssue816_1/xl/workbook.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_1/xl/worksheets/_rels/sheet1.xml.rels b/samples/xlsx/TestIssue816_1/xl/worksheets/_rels/sheet1.xml.rels
deleted file mode 100644
index 45203544..00000000
--- a/samples/xlsx/TestIssue816_1/xl/worksheets/_rels/sheet1.xml.rels
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_1/xl/worksheets/sheet1.xml b/samples/xlsx/TestIssue816_1/xl/worksheets/sheet1.xml
deleted file mode 100644
index 12cc2053..00000000
--- a/samples/xlsx/TestIssue816_1/xl/worksheets/sheet1.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
- 0
-
-
-
-
- 1
-
-
-
-
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_2.xlsx b/samples/xlsx/TestIssue816_2.xlsx
deleted file mode 100644
index bf718ad2..00000000
Binary files a/samples/xlsx/TestIssue816_2.xlsx and /dev/null differ
diff --git a/samples/xlsx/TestIssue816_2/[Content_Types].xml b/samples/xlsx/TestIssue816_2/[Content_Types].xml
deleted file mode 100644
index 3077b7d2..00000000
--- a/samples/xlsx/TestIssue816_2/[Content_Types].xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_2/_rels/.rels b/samples/xlsx/TestIssue816_2/_rels/.rels
deleted file mode 100644
index c50b69e8..00000000
--- a/samples/xlsx/TestIssue816_2/_rels/.rels
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_2/docProps/app.xml b/samples/xlsx/TestIssue816_2/docProps/app.xml
deleted file mode 100644
index ebd9f193..00000000
--- a/samples/xlsx/TestIssue816_2/docProps/app.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
- Microsoft Excel
- 0
- false
-
-
-
- Worksheets
-
-
- 1
-
-
-
-
-
- Demo
-
-
-
- false
- false
- false
- 16.0300
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_2/docProps/core.xml b/samples/xlsx/TestIssue816_2/docProps/core.xml
deleted file mode 100644
index 09f6e3aa..00000000
--- a/samples/xlsx/TestIssue816_2/docProps/core.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
- Wei
- Wei Lin
- 2015-06-05T18:17:20Z
- 2025-04-20T14:24:59Z
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_2/xl/_rels/workbook.xml.rels b/samples/xlsx/TestIssue816_2/xl/_rels/workbook.xml.rels
deleted file mode 100644
index aafbae06..00000000
--- a/samples/xlsx/TestIssue816_2/xl/_rels/workbook.xml.rels
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_2/xl/drawings/_rels/drawinga13dc3bfd6be4e238ad8f91fcc6c646d.xml.rels b/samples/xlsx/TestIssue816_2/xl/drawings/_rels/drawinga13dc3bfd6be4e238ad8f91fcc6c646d.xml.rels
deleted file mode 100644
index f9d9ae72..00000000
--- a/samples/xlsx/TestIssue816_2/xl/drawings/_rels/drawinga13dc3bfd6be4e238ad8f91fcc6c646d.xml.rels
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_2/xl/drawings/_rels/drawingcea5e87afab34a1b886841980881e6a6.xml.rels b/samples/xlsx/TestIssue816_2/xl/drawings/_rels/drawingcea5e87afab34a1b886841980881e6a6.xml.rels
deleted file mode 100644
index ea055178..00000000
--- a/samples/xlsx/TestIssue816_2/xl/drawings/_rels/drawingcea5e87afab34a1b886841980881e6a6.xml.rels
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_2/xl/drawings/drawinga13dc3bfd6be4e238ad8f91fcc6c646d.xml b/samples/xlsx/TestIssue816_2/xl/drawings/drawinga13dc3bfd6be4e238ad8f91fcc6c646d.xml
deleted file mode 100644
index 9b1e2419..00000000
--- a/samples/xlsx/TestIssue816_2/xl/drawings/drawinga13dc3bfd6be4e238ad8f91fcc6c646d.xml
+++ /dev/null
@@ -1,119 +0,0 @@
-
-
-
- 3
- 0
- 2
- 0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 3
- 0
- 8
- 0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 3
- 0
- 8
- 0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_2/xl/drawings/drawingcea5e87afab34a1b886841980881e6a6.xml b/samples/xlsx/TestIssue816_2/xl/drawings/drawingcea5e87afab34a1b886841980881e6a6.xml
deleted file mode 100644
index 0bebe2c5..00000000
--- a/samples/xlsx/TestIssue816_2/xl/drawings/drawingcea5e87afab34a1b886841980881e6a6.xml
+++ /dev/null
@@ -1,119 +0,0 @@
-
-
-
- 2
- 0
- 2
- 0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 2
- 0
- 8
- 0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 4
- 0
- 8
- 0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_2/xl/media/image037f9747190c43eca595e57604de932c.png b/samples/xlsx/TestIssue816_2/xl/media/image037f9747190c43eca595e57604de932c.png
deleted file mode 100644
index fe3479dd..00000000
Binary files a/samples/xlsx/TestIssue816_2/xl/media/image037f9747190c43eca595e57604de932c.png and /dev/null differ
diff --git a/samples/xlsx/TestIssue816_2/xl/media/image3f83eec97c6c49569a75f076c2d4045a.png b/samples/xlsx/TestIssue816_2/xl/media/image3f83eec97c6c49569a75f076c2d4045a.png
deleted file mode 100644
index 8efaf819..00000000
Binary files a/samples/xlsx/TestIssue816_2/xl/media/image3f83eec97c6c49569a75f076c2d4045a.png and /dev/null differ
diff --git a/samples/xlsx/TestIssue816_2/xl/media/image804ac538d3674fa2abc309543b617971.png b/samples/xlsx/TestIssue816_2/xl/media/image804ac538d3674fa2abc309543b617971.png
deleted file mode 100644
index 8efaf819..00000000
Binary files a/samples/xlsx/TestIssue816_2/xl/media/image804ac538d3674fa2abc309543b617971.png and /dev/null differ
diff --git a/samples/xlsx/TestIssue816_2/xl/media/image8d00375faa1f4b41aa5109c3e419c964.png b/samples/xlsx/TestIssue816_2/xl/media/image8d00375faa1f4b41aa5109c3e419c964.png
deleted file mode 100644
index 8efaf819..00000000
Binary files a/samples/xlsx/TestIssue816_2/xl/media/image8d00375faa1f4b41aa5109c3e419c964.png and /dev/null differ
diff --git a/samples/xlsx/TestIssue816_2/xl/media/imagec4303bb6725242df941fea79b5e1296f.png b/samples/xlsx/TestIssue816_2/xl/media/imagec4303bb6725242df941fea79b5e1296f.png
deleted file mode 100644
index 8efaf819..00000000
Binary files a/samples/xlsx/TestIssue816_2/xl/media/imagec4303bb6725242df941fea79b5e1296f.png and /dev/null differ
diff --git a/samples/xlsx/TestIssue816_2/xl/media/imagee87f98b0db1a48898a63678d92b3660a.png b/samples/xlsx/TestIssue816_2/xl/media/imagee87f98b0db1a48898a63678d92b3660a.png
deleted file mode 100644
index fe3479dd..00000000
Binary files a/samples/xlsx/TestIssue816_2/xl/media/imagee87f98b0db1a48898a63678d92b3660a.png and /dev/null differ
diff --git a/samples/xlsx/TestIssue816_2/xl/sharedStrings.xml b/samples/xlsx/TestIssue816_2/xl/sharedStrings.xml
deleted file mode 100644
index a74a5953..00000000
--- a/samples/xlsx/TestIssue816_2/xl/sharedStrings.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-Image1:Image2:
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_2/xl/styles.xml b/samples/xlsx/TestIssue816_2/xl/styles.xml
deleted file mode 100644
index 04695051..00000000
--- a/samples/xlsx/TestIssue816_2/xl/styles.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_2/xl/theme/theme1.xml b/samples/xlsx/TestIssue816_2/xl/theme/theme1.xml
deleted file mode 100644
index 2c75da85..00000000
--- a/samples/xlsx/TestIssue816_2/xl/theme/theme1.xml
+++ /dev/null
@@ -1,262 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_2/xl/workbook.xml b/samples/xlsx/TestIssue816_2/xl/workbook.xml
deleted file mode 100644
index 2462c3ec..00000000
--- a/samples/xlsx/TestIssue816_2/xl/workbook.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_2/xl/worksheets/_rels/sheet1.xml.rels b/samples/xlsx/TestIssue816_2/xl/worksheets/_rels/sheet1.xml.rels
deleted file mode 100644
index 9fc078e3..00000000
--- a/samples/xlsx/TestIssue816_2/xl/worksheets/_rels/sheet1.xml.rels
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_2/xl/worksheets/sheet1.xml b/samples/xlsx/TestIssue816_2/xl/worksheets/sheet1.xml
deleted file mode 100644
index f986fca9..00000000
--- a/samples/xlsx/TestIssue816_2/xl/worksheets/sheet1.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
- 0
-
-
-
-
- 1
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_3.xlsx b/samples/xlsx/TestIssue816_3.xlsx
deleted file mode 100644
index 52e750d1..00000000
Binary files a/samples/xlsx/TestIssue816_3.xlsx and /dev/null differ
diff --git a/samples/xlsx/TestIssue816_3/[Content_Types].xml b/samples/xlsx/TestIssue816_3/[Content_Types].xml
deleted file mode 100644
index 8ee982ab..00000000
--- a/samples/xlsx/TestIssue816_3/[Content_Types].xml
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_3/_rels/.rels b/samples/xlsx/TestIssue816_3/_rels/.rels
deleted file mode 100644
index 74bfd8d9..00000000
--- a/samples/xlsx/TestIssue816_3/_rels/.rels
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_3/docProps/app.xml b/samples/xlsx/TestIssue816_3/docProps/app.xml
deleted file mode 100644
index d5e92215..00000000
--- a/samples/xlsx/TestIssue816_3/docProps/app.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-Microsoft Excel0falseWorksheets1Sheet1falsefalsefalse16.0300
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_3/docProps/core.xml b/samples/xlsx/TestIssue816_3/docProps/core.xml
deleted file mode 100644
index 50439f08..00000000
--- a/samples/xlsx/TestIssue816_3/docProps/core.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-Wei LinWei Lin2025-06-21T14:00:28Z2025-06-21T14:01:05Z
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_3/xl/_rels/workbook.xml.rels b/samples/xlsx/TestIssue816_3/xl/_rels/workbook.xml.rels
deleted file mode 100644
index 65485f71..00000000
--- a/samples/xlsx/TestIssue816_3/xl/_rels/workbook.xml.rels
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_3/xl/drawings/_rels/drawing1.xml.rels b/samples/xlsx/TestIssue816_3/xl/drawings/_rels/drawing1.xml.rels
deleted file mode 100644
index 9db7c50e..00000000
--- a/samples/xlsx/TestIssue816_3/xl/drawings/_rels/drawing1.xml.rels
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_3/xl/drawings/drawing1.xml b/samples/xlsx/TestIssue816_3/xl/drawings/drawing1.xml
deleted file mode 100644
index e68275f7..00000000
--- a/samples/xlsx/TestIssue816_3/xl/drawings/drawing1.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-4013016370514382800615040281132952528096
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_3/xl/media/image1.png b/samples/xlsx/TestIssue816_3/xl/media/image1.png
deleted file mode 100644
index e52f6c8a..00000000
Binary files a/samples/xlsx/TestIssue816_3/xl/media/image1.png and /dev/null differ
diff --git a/samples/xlsx/TestIssue816_3/xl/media/image2.png b/samples/xlsx/TestIssue816_3/xl/media/image2.png
deleted file mode 100644
index 66283404..00000000
Binary files a/samples/xlsx/TestIssue816_3/xl/media/image2.png and /dev/null differ
diff --git a/samples/xlsx/TestIssue816_3/xl/sharedStrings.xml b/samples/xlsx/TestIssue816_3/xl/sharedStrings.xml
deleted file mode 100644
index d36ba8f0..00000000
--- a/samples/xlsx/TestIssue816_3/xl/sharedStrings.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-f
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_3/xl/styles.xml b/samples/xlsx/TestIssue816_3/xl/styles.xml
deleted file mode 100644
index 659107a0..00000000
--- a/samples/xlsx/TestIssue816_3/xl/styles.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_3/xl/theme/theme1.xml b/samples/xlsx/TestIssue816_3/xl/theme/theme1.xml
deleted file mode 100644
index 4a95cff0..00000000
--- a/samples/xlsx/TestIssue816_3/xl/theme/theme1.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_3/xl/workbook.xml b/samples/xlsx/TestIssue816_3/xl/workbook.xml
deleted file mode 100644
index 6182b7c8..00000000
--- a/samples/xlsx/TestIssue816_3/xl/workbook.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_3/xl/worksheets/_rels/sheet1.xml.rels b/samples/xlsx/TestIssue816_3/xl/worksheets/_rels/sheet1.xml.rels
deleted file mode 100644
index 205832e9..00000000
--- a/samples/xlsx/TestIssue816_3/xl/worksheets/_rels/sheet1.xml.rels
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_3/xl/worksheets/sheet1.xml b/samples/xlsx/TestIssue816_3/xl/worksheets/sheet1.xml
deleted file mode 100644
index cb9d4e7c..00000000
--- a/samples/xlsx/TestIssue816_3/xl/worksheets/sheet1.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
- 0
-
-
-
-
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_4.xlsx b/samples/xlsx/TestIssue816_4.xlsx
deleted file mode 100644
index 1d9aedfe..00000000
Binary files a/samples/xlsx/TestIssue816_4.xlsx and /dev/null differ
diff --git a/samples/xlsx/TestIssue816_4/[Content_Types].xml b/samples/xlsx/TestIssue816_4/[Content_Types].xml
deleted file mode 100644
index ce9f84a0..00000000
--- a/samples/xlsx/TestIssue816_4/[Content_Types].xml
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_4/_rels/.rels b/samples/xlsx/TestIssue816_4/_rels/.rels
deleted file mode 100644
index 22c9382f..00000000
--- a/samples/xlsx/TestIssue816_4/_rels/.rels
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_4/docProps/app.xml b/samples/xlsx/TestIssue816_4/docProps/app.xml
deleted file mode 100644
index d5e92215..00000000
--- a/samples/xlsx/TestIssue816_4/docProps/app.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-Microsoft Excel0falseWorksheets1Sheet1falsefalsefalse16.0300
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_4/docProps/core.xml b/samples/xlsx/TestIssue816_4/docProps/core.xml
deleted file mode 100644
index 50439f08..00000000
--- a/samples/xlsx/TestIssue816_4/docProps/core.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-Wei LinWei Lin2025-06-21T14:00:28Z2025-06-21T14:01:05Z
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_4/xl/_rels/workbook.xml.rels b/samples/xlsx/TestIssue816_4/xl/_rels/workbook.xml.rels
deleted file mode 100644
index e7fe8ebe..00000000
--- a/samples/xlsx/TestIssue816_4/xl/_rels/workbook.xml.rels
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_4/xl/drawings/_rels/drawing1.xml.rels b/samples/xlsx/TestIssue816_4/xl/drawings/_rels/drawing1.xml.rels
deleted file mode 100644
index fad44dfe..00000000
--- a/samples/xlsx/TestIssue816_4/xl/drawings/_rels/drawing1.xml.rels
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_4/xl/drawings/drawing1.xml b/samples/xlsx/TestIssue816_4/xl/drawings/drawing1.xml
deleted file mode 100644
index bf5f98f9..00000000
--- a/samples/xlsx/TestIssue816_4/xl/drawings/drawing1.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-401301636195038280051504028104775252809520140 120160
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_4/xl/media/image1.png b/samples/xlsx/TestIssue816_4/xl/media/image1.png
deleted file mode 100644
index e52f6c8a..00000000
Binary files a/samples/xlsx/TestIssue816_4/xl/media/image1.png and /dev/null differ
diff --git a/samples/xlsx/TestIssue816_4/xl/media/image2.png b/samples/xlsx/TestIssue816_4/xl/media/image2.png
deleted file mode 100644
index 66283404..00000000
Binary files a/samples/xlsx/TestIssue816_4/xl/media/image2.png and /dev/null differ
diff --git a/samples/xlsx/TestIssue816_4/xl/media/image3.Png b/samples/xlsx/TestIssue816_4/xl/media/image3.Png
deleted file mode 100644
index fe3479dd..00000000
Binary files a/samples/xlsx/TestIssue816_4/xl/media/image3.Png and /dev/null differ
diff --git a/samples/xlsx/TestIssue816_4/xl/sharedStrings.xml b/samples/xlsx/TestIssue816_4/xl/sharedStrings.xml
deleted file mode 100644
index 33295552..00000000
--- a/samples/xlsx/TestIssue816_4/xl/sharedStrings.xml
+++ /dev/null
@@ -1 +0,0 @@
-f
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_4/xl/styles.xml b/samples/xlsx/TestIssue816_4/xl/styles.xml
deleted file mode 100644
index e431b21a..00000000
--- a/samples/xlsx/TestIssue816_4/xl/styles.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_4/xl/theme/theme1.xml b/samples/xlsx/TestIssue816_4/xl/theme/theme1.xml
deleted file mode 100644
index e57b14ae..00000000
--- a/samples/xlsx/TestIssue816_4/xl/theme/theme1.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_4/xl/workbook.xml b/samples/xlsx/TestIssue816_4/xl/workbook.xml
deleted file mode 100644
index 61bb5488..00000000
--- a/samples/xlsx/TestIssue816_4/xl/workbook.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_4/xl/worksheets/_rels/sheet1.xml.rels b/samples/xlsx/TestIssue816_4/xl/worksheets/_rels/sheet1.xml.rels
deleted file mode 100644
index 5f1e29b8..00000000
--- a/samples/xlsx/TestIssue816_4/xl/worksheets/_rels/sheet1.xml.rels
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssue816_4/xl/worksheets/sheet1.xml b/samples/xlsx/TestIssue816_4/xl/worksheets/sheet1.xml
deleted file mode 100644
index 95d494b1..00000000
--- a/samples/xlsx/TestIssue816_4/xl/worksheets/sheet1.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
- 0
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssueICFV1I_1_41_1.xlsx b/samples/xlsx/TestIssueICFV1I_1_41_1.xlsx
deleted file mode 100644
index 9c86969c..00000000
Binary files a/samples/xlsx/TestIssueICFV1I_1_41_1.xlsx and /dev/null differ
diff --git a/samples/xlsx/TestIssueICFV1I_1_41_1/[Content_Types].xml b/samples/xlsx/TestIssueICFV1I_1_41_1/[Content_Types].xml
deleted file mode 100644
index 7ba678e5..00000000
--- a/samples/xlsx/TestIssueICFV1I_1_41_1/[Content_Types].xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssueICFV1I_1_41_1/_rels/.rels b/samples/xlsx/TestIssueICFV1I_1_41_1/_rels/.rels
deleted file mode 100644
index 74bfd8d9..00000000
--- a/samples/xlsx/TestIssueICFV1I_1_41_1/_rels/.rels
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssueICFV1I_1_41_1/docProps/app.xml b/samples/xlsx/TestIssueICFV1I_1_41_1/docProps/app.xml
deleted file mode 100644
index 3db85d1a..00000000
--- a/samples/xlsx/TestIssueICFV1I_1_41_1/docProps/app.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-Microsoft Excel0falseWorksheets1Demofalsefalsefalse16.0300
\ No newline at end of file
diff --git a/samples/xlsx/TestIssueICFV1I_1_41_1/docProps/core.xml b/samples/xlsx/TestIssueICFV1I_1_41_1/docProps/core.xml
deleted file mode 100644
index 84719d57..00000000
--- a/samples/xlsx/TestIssueICFV1I_1_41_1/docProps/core.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-WeiWei Lin2015-06-05T18:17:20Z2025-04-20T14:24:59Z
\ No newline at end of file
diff --git a/samples/xlsx/TestIssueICFV1I_1_41_1/xl/_rels/workbook.xml.rels b/samples/xlsx/TestIssueICFV1I_1_41_1/xl/_rels/workbook.xml.rels
deleted file mode 100644
index 65485f71..00000000
--- a/samples/xlsx/TestIssueICFV1I_1_41_1/xl/_rels/workbook.xml.rels
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssueICFV1I_1_41_1/xl/drawings/_rels/drawing98482106b774449083d3adfa462f1707.xml.rels b/samples/xlsx/TestIssueICFV1I_1_41_1/xl/drawings/_rels/drawing98482106b774449083d3adfa462f1707.xml.rels
deleted file mode 100644
index dec5e486..00000000
--- a/samples/xlsx/TestIssueICFV1I_1_41_1/xl/drawings/_rels/drawing98482106b774449083d3adfa462f1707.xml.rels
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssueICFV1I_1_41_1/xl/drawings/drawing98482106b774449083d3adfa462f1707.xml b/samples/xlsx/TestIssueICFV1I_1_41_1/xl/drawings/drawing98482106b774449083d3adfa462f1707.xml
deleted file mode 100644
index 209cc8b1..00000000
--- a/samples/xlsx/TestIssueICFV1I_1_41_1/xl/drawings/drawing98482106b774449083d3adfa462f1707.xml
+++ /dev/null
@@ -1,114 +0,0 @@
-
-
-
-
- 2
- 0
- 2
- 0
-
-
- 3
- 0
- 3
- 0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 2
- 0
- 8
- 0
-
-
- 3
- 4762500
- 9
- 4762500
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 7
- 0
- 8
- 0
-
- 8
- 476250
- 9
- 476250
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssueICFV1I_1_41_1/xl/media/image8d8065829ab5449aa3b52723e51a7b20.png b/samples/xlsx/TestIssueICFV1I_1_41_1/xl/media/image8d8065829ab5449aa3b52723e51a7b20.png
deleted file mode 100644
index fe3479dd..00000000
Binary files a/samples/xlsx/TestIssueICFV1I_1_41_1/xl/media/image8d8065829ab5449aa3b52723e51a7b20.png and /dev/null differ
diff --git a/samples/xlsx/TestIssueICFV1I_1_41_1/xl/media/image9f62c0e5edfb4a4fb4df39966f9e930f.png b/samples/xlsx/TestIssueICFV1I_1_41_1/xl/media/image9f62c0e5edfb4a4fb4df39966f9e930f.png
deleted file mode 100644
index fe3479dd..00000000
Binary files a/samples/xlsx/TestIssueICFV1I_1_41_1/xl/media/image9f62c0e5edfb4a4fb4df39966f9e930f.png and /dev/null differ
diff --git a/samples/xlsx/TestIssueICFV1I_1_41_1/xl/media/imagea8f3b74b2f8041e9ae2cad406188704c.png b/samples/xlsx/TestIssueICFV1I_1_41_1/xl/media/imagea8f3b74b2f8041e9ae2cad406188704c.png
deleted file mode 100644
index fe3479dd..00000000
Binary files a/samples/xlsx/TestIssueICFV1I_1_41_1/xl/media/imagea8f3b74b2f8041e9ae2cad406188704c.png and /dev/null differ
diff --git a/samples/xlsx/TestIssueICFV1I_1_41_1/xl/sharedStrings.xml b/samples/xlsx/TestIssueICFV1I_1_41_1/xl/sharedStrings.xml
deleted file mode 100644
index a74a5953..00000000
--- a/samples/xlsx/TestIssueICFV1I_1_41_1/xl/sharedStrings.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-Image1:Image2:
\ No newline at end of file
diff --git a/samples/xlsx/TestIssueICFV1I_1_41_1/xl/styles.xml b/samples/xlsx/TestIssueICFV1I_1_41_1/xl/styles.xml
deleted file mode 100644
index 04695051..00000000
--- a/samples/xlsx/TestIssueICFV1I_1_41_1/xl/styles.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssueICFV1I_1_41_1/xl/theme/theme1.xml b/samples/xlsx/TestIssueICFV1I_1_41_1/xl/theme/theme1.xml
deleted file mode 100644
index f82d9ebb..00000000
--- a/samples/xlsx/TestIssueICFV1I_1_41_1/xl/theme/theme1.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssueICFV1I_1_41_1/xl/workbook.xml b/samples/xlsx/TestIssueICFV1I_1_41_1/xl/workbook.xml
deleted file mode 100644
index 2a833c3d..00000000
--- a/samples/xlsx/TestIssueICFV1I_1_41_1/xl/workbook.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssueICFV1I_1_41_1/xl/worksheets/_rels/sheet1.xml.rels b/samples/xlsx/TestIssueICFV1I_1_41_1/xl/worksheets/_rels/sheet1.xml.rels
deleted file mode 100644
index 194fc9f1..00000000
--- a/samples/xlsx/TestIssueICFV1I_1_41_1/xl/worksheets/_rels/sheet1.xml.rels
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssueICFV1I_1_41_1/xl/worksheets/sheet1.xml b/samples/xlsx/TestIssueICFV1I_1_41_1/xl/worksheets/sheet1.xml
deleted file mode 100644
index 0d58db40..00000000
--- a/samples/xlsx/TestIssueICFV1I_1_41_1/xl/worksheets/sheet1.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
- 0
-
-
-
-
- 1
-
-
-
-
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssueICFV1I_1_41_2.xlsx b/samples/xlsx/TestIssueICFV1I_1_41_2.xlsx
deleted file mode 100644
index 41c44144..00000000
Binary files a/samples/xlsx/TestIssueICFV1I_1_41_2.xlsx and /dev/null differ
diff --git a/samples/xlsx/TestIssueICFV1I_1_41_2/[Content_Types].xml b/samples/xlsx/TestIssueICFV1I_1_41_2/[Content_Types].xml
deleted file mode 100644
index 5cf7020b..00000000
--- a/samples/xlsx/TestIssueICFV1I_1_41_2/[Content_Types].xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssueICFV1I_1_41_2/_rels/.rels b/samples/xlsx/TestIssueICFV1I_1_41_2/_rels/.rels
deleted file mode 100644
index 74bfd8d9..00000000
--- a/samples/xlsx/TestIssueICFV1I_1_41_2/_rels/.rels
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssueICFV1I_1_41_2/docProps/app.xml b/samples/xlsx/TestIssueICFV1I_1_41_2/docProps/app.xml
deleted file mode 100644
index 3db85d1a..00000000
--- a/samples/xlsx/TestIssueICFV1I_1_41_2/docProps/app.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-Microsoft Excel0falseWorksheets1Demofalsefalsefalse16.0300
\ No newline at end of file
diff --git a/samples/xlsx/TestIssueICFV1I_1_41_2/docProps/core.xml b/samples/xlsx/TestIssueICFV1I_1_41_2/docProps/core.xml
deleted file mode 100644
index 84719d57..00000000
--- a/samples/xlsx/TestIssueICFV1I_1_41_2/docProps/core.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-WeiWei Lin2015-06-05T18:17:20Z2025-04-20T14:24:59Z
\ No newline at end of file
diff --git a/samples/xlsx/TestIssueICFV1I_1_41_2/xl/_rels/workbook.xml.rels b/samples/xlsx/TestIssueICFV1I_1_41_2/xl/_rels/workbook.xml.rels
deleted file mode 100644
index 65485f71..00000000
--- a/samples/xlsx/TestIssueICFV1I_1_41_2/xl/_rels/workbook.xml.rels
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssueICFV1I_1_41_2/xl/drawings/_rels/drawing2605be385d194157a1ed844bf85a6825.xml.rels b/samples/xlsx/TestIssueICFV1I_1_41_2/xl/drawings/_rels/drawing2605be385d194157a1ed844bf85a6825.xml.rels
deleted file mode 100644
index 9b97e377..00000000
--- a/samples/xlsx/TestIssueICFV1I_1_41_2/xl/drawings/_rels/drawing2605be385d194157a1ed844bf85a6825.xml.rels
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssueICFV1I_1_41_2/xl/drawings/drawing2605be385d194157a1ed844bf85a6825.xml b/samples/xlsx/TestIssueICFV1I_1_41_2/xl/drawings/drawing2605be385d194157a1ed844bf85a6825.xml
deleted file mode 100644
index 005072ef..00000000
--- a/samples/xlsx/TestIssueICFV1I_1_41_2/xl/drawings/drawing2605be385d194157a1ed844bf85a6825.xml
+++ /dev/null
@@ -1,114 +0,0 @@
-
-
-
-
- 2
- 0
- 2
- 0
-
-
- 3
- 0
- 3
- 0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 2
- 0
- 8
- 0
-
-
- 3
- 4762500
- 9
- 4762500
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 7
- 0
- 8
- 0
-
- 8
- 476250
- 9
- 476250
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssueICFV1I_1_41_2/xl/media/image6c041a7f44094767b6c8f3d48a6f6a1f.png b/samples/xlsx/TestIssueICFV1I_1_41_2/xl/media/image6c041a7f44094767b6c8f3d48a6f6a1f.png
deleted file mode 100644
index fe3479dd..00000000
Binary files a/samples/xlsx/TestIssueICFV1I_1_41_2/xl/media/image6c041a7f44094767b6c8f3d48a6f6a1f.png and /dev/null differ
diff --git a/samples/xlsx/TestIssueICFV1I_1_41_2/xl/media/imagec8cb923a01634a9489b256bae76a61b2.png b/samples/xlsx/TestIssueICFV1I_1_41_2/xl/media/imagec8cb923a01634a9489b256bae76a61b2.png
deleted file mode 100644
index fe3479dd..00000000
Binary files a/samples/xlsx/TestIssueICFV1I_1_41_2/xl/media/imagec8cb923a01634a9489b256bae76a61b2.png and /dev/null differ
diff --git a/samples/xlsx/TestIssueICFV1I_1_41_2/xl/media/imagef69f64bf01fc457985842f20542262c5.png b/samples/xlsx/TestIssueICFV1I_1_41_2/xl/media/imagef69f64bf01fc457985842f20542262c5.png
deleted file mode 100644
index fe3479dd..00000000
Binary files a/samples/xlsx/TestIssueICFV1I_1_41_2/xl/media/imagef69f64bf01fc457985842f20542262c5.png and /dev/null differ
diff --git a/samples/xlsx/TestIssueICFV1I_1_41_2/xl/sharedStrings.xml b/samples/xlsx/TestIssueICFV1I_1_41_2/xl/sharedStrings.xml
deleted file mode 100644
index a74a5953..00000000
--- a/samples/xlsx/TestIssueICFV1I_1_41_2/xl/sharedStrings.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-Image1:Image2:
\ No newline at end of file
diff --git a/samples/xlsx/TestIssueICFV1I_1_41_2/xl/styles.xml b/samples/xlsx/TestIssueICFV1I_1_41_2/xl/styles.xml
deleted file mode 100644
index 04695051..00000000
--- a/samples/xlsx/TestIssueICFV1I_1_41_2/xl/styles.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssueICFV1I_1_41_2/xl/theme/theme1.xml b/samples/xlsx/TestIssueICFV1I_1_41_2/xl/theme/theme1.xml
deleted file mode 100644
index f82d9ebb..00000000
--- a/samples/xlsx/TestIssueICFV1I_1_41_2/xl/theme/theme1.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssueICFV1I_1_41_2/xl/workbook.xml b/samples/xlsx/TestIssueICFV1I_1_41_2/xl/workbook.xml
deleted file mode 100644
index 2a833c3d..00000000
--- a/samples/xlsx/TestIssueICFV1I_1_41_2/xl/workbook.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssueICFV1I_1_41_2/xl/worksheets/_rels/sheet1.xml.rels b/samples/xlsx/TestIssueICFV1I_1_41_2/xl/worksheets/_rels/sheet1.xml.rels
deleted file mode 100644
index 2891bcc5..00000000
--- a/samples/xlsx/TestIssueICFV1I_1_41_2/xl/worksheets/_rels/sheet1.xml.rels
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/samples/xlsx/TestIssueICFV1I_1_41_2/xl/worksheets/sheet1.xml b/samples/xlsx/TestIssueICFV1I_1_41_2/xl/worksheets/sheet1.xml
deleted file mode 100644
index a9ca2b84..00000000
--- a/samples/xlsx/TestIssueICFV1I_1_41_2/xl/worksheets/sheet1.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
- 0
-
-
-
-
- 1
-
-
-
-
-
\ No newline at end of file
diff --git a/src/MiniExcel/MiniExcelLibs.csproj b/src/MiniExcel/MiniExcelLibs.csproj
index 9cdeb482..96e620ec 100644
--- a/src/MiniExcel/MiniExcelLibs.csproj
+++ b/src/MiniExcel/MiniExcelLibs.csproj
@@ -1,7 +1,7 @@
net462;netstandard2.0;net8.0;net9.0
- 1.41.3
+ 1.41.2
8
diff --git a/src/MiniExcel/Picture/MiniExcelPicture.cs b/src/MiniExcel/Picture/MiniExcelPicture.cs
index d04668c5..2ae40af3 100644
--- a/src/MiniExcel/Picture/MiniExcelPicture.cs
+++ b/src/MiniExcel/Picture/MiniExcelPicture.cs
@@ -10,7 +10,7 @@ public class MiniExcelPicture
public string CellAddress { get; set; }
internal int ColumnNumber => ReferenceHelper.ConvertCellToXY(CellAddress).Item1 -1;
internal int RowNumber => ReferenceHelper.ConvertCellToXY(CellAddress).Item2 - 1;
- public int WidthPx { get; set; } = 80;
- public int HeightPx { get; set; } = 24;
+ public int WidthPx { get; set; }
+ public int HeightPx { get; set; }
}
}
\ No newline at end of file
diff --git a/src/MiniExcel/Picture/MiniExcelPictureImplement.cs b/src/MiniExcel/Picture/MiniExcelPictureImplement.cs
index b1fa21ff..24a470c6 100644
--- a/src/MiniExcel/Picture/MiniExcelPictureImplement.cs
+++ b/src/MiniExcel/Picture/MiniExcelPictureImplement.cs
@@ -1,33 +1,17 @@
-namespace MiniExcelLibs.Picture
+using MiniExcelLibs.OpenXml;
+using MiniExcelLibs.Zip;
+using System;
+using System.IO;
+using System.IO.Compression;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Xml;
+
+namespace MiniExcelLibs.Picture
{
- using MiniExcelLibs.OpenXml;
- using MiniExcelLibs.Zip;
- using System;
- using System.IO;
- using System.IO.Compression;
- using System.Linq;
- using System.Xml;
-
- internal static class MiniExcelPictureImplement
+ internal static partial class MiniExcelPictureImplement
{
- private static XmlNamespaceManager GetRNamespaceManager(XmlDocument doc)
- {
- var nsmgr = new XmlNamespaceManager(doc.NameTable);
- nsmgr.AddNamespace("x", "http://schemas.openxmlformats.org/spreadsheetml/2006/main");
- nsmgr.AddNamespace("r", "http://schemas.openxmlformats.org/officeDocument/2006/relationships");
- return nsmgr;
- }
-
- private static bool CheckRelationshipExists(XmlDocument doc, string id, string type, string target)
- {
- var namespaceManager = new XmlNamespaceManager(doc.NameTable);
- namespaceManager.AddNamespace("x", "http://schemas.openxmlformats.org/package/2006/relationships");
-
- var xpath = $"/x:Relationships/x:Relationship[@Id='{id}' and @Type='{type}' and @Target='{target}']";
- var node = doc.SelectSingleNode(xpath, namespaceManager);
-
- return node != null;
- }
[Zomp.SyncMethodGenerator.CreateSyncVersion]
public static async Task AddPictureAsync(Stream excelStream, CancellationToken cancellationToken = default, params MiniExcelPicture[] images)
{
@@ -36,130 +20,221 @@ public static async Task AddPictureAsync(Stream excelStream, CancellationToken c
using var reader = await ExcelOpenXmlSheetReader.CreateAsync(excelStream, null, cancellationToken: cancellationToken).ConfigureAwait(false);
var sheetEntries = await reader.GetWorkbookRelsAsync(excelArchive.entries, cancellationToken).ConfigureAwait(false);
+ var drawingRelId = $"rId{Guid.NewGuid():N}";
+ var drawingId = Guid.NewGuid().ToString("N");
+ var imageId = 2;
using (var archive = new ZipArchive(excelStream, ZipArchiveMode.Update, true))
{
- // Group images by sheet
- var imagesBySheet = images.GroupBy(img => img.SheetName ?? sheetEntries.First().Name);
- foreach (var sheetGroup in imagesBySheet)
+ foreach (var image in images)
{
- var sheetName = sheetGroup.Key;
- var sheetEnt = sheetEntries.FirstOrDefault(x => x.Name == sheetName) ?? sheetEntries.First();
- var sheetXmlName = sheetEnt.Path.Split('/').Last().Split('.')[0];
- string sheetPath = $"xl/worksheets/{sheetXmlName}.xml";
+ var imageBytes = image.ImageBytes;
+ var sheetEnt = image?.SheetName == null
+ ? sheetEntries[0]
+ : sheetEntries.FirstOrDefault(x => x.Name == image.SheetName) ?? sheetEntries.First();
+
+ var sheetName = sheetEnt.Path.Split('/').Last().Split('.')[0];
+ var col = image.ColumnNumber;
+ var row = image.RowNumber;
+ var widthPx = image?.WidthPx;
+ var heightPx = image?.HeightPx;
+
+ // Step 1: Add image to /xl/media/
+ var imageName = $"image{Guid.NewGuid():N}.png";
+ var imagePath = $"xl/media/{imageName}";
+ var imageEntry = archive.CreateEntry(imagePath);
+ using (var entryStream = imageEntry.Open())
+ {
+#if NET5_0_OR_GREATER
+ await entryStream.WriteAsync(imageBytes.AsMemory(), cancellationToken).ConfigureAwait(false);
+#else
+ await entryStream.WriteAsync(imageBytes, 0, imageBytes.Length, cancellationToken).ConfigureAwait(false);
+#endif
+ }
+
+ // Step 2: Update [Content_Types].xml
+ var contentTypesEntry = archive.GetEntry("[Content_Types].xml");
+ var contentTypesDoc = LoadXml(contentTypesEntry);
+ if (!contentTypesDoc.DocumentElement.InnerXml.Contains("image/png"))
+ {
+ var defaultNode = contentTypesDoc.CreateElement("Default", contentTypesDoc.DocumentElement.NamespaceURI);
+ defaultNode.SetAttribute("Extension", "png");
+ defaultNode.SetAttribute("ContentType", "image/png");
+ contentTypesDoc.DocumentElement.AppendChild(defaultNode);
+ }
+ var overrideDrawingFileExists = contentTypesDoc.DocumentElement.ChildNodes
+ .Cast()
+ .Any(node => node.Name == "Override" && node.Attributes?["PartName"].Value == $"/xl/drawings/drawing{drawingId}.xml");
+
+ if (!overrideDrawingFileExists)
+ {
+ var overrideNode = contentTypesDoc.CreateElement("Override", contentTypesDoc.DocumentElement.NamespaceURI);
+ overrideNode.SetAttribute("PartName", $"/xl/drawings/drawing{drawingId}.xml");
+ overrideNode.SetAttribute("ContentType", "application/vnd.openxmlformats-officedocument.drawing+xml");
+ contentTypesDoc.DocumentElement.AppendChild(overrideNode);
+ }
+ SaveXml(contentTypesDoc, contentTypesEntry);
+
+ // Step 3: Update xl/worksheets/sheetX.xml
+ var sheetPath = $"xl/worksheets/{sheetName}.xml";
var sheetEntry = archive.GetEntry(sheetPath);
var sheetDoc = LoadXml(sheetEntry);
+ var relId = $"rId{Guid.NewGuid():N}";
+ // unique relId for drawing
+
+ // existMiniExcelUniqueDrawingNode = check sheetDoc exist and check its attribut r:id = drawingRelId
+ var uniqueDrawingNode = sheetDoc.SelectSingleNode(
+ $"/x:worksheet/x:drawing[@r:id='{drawingRelId}']",
+ GetRNamespaceManager(sheetDoc));
- // Check for existing node
- var nsmgr = GetRNamespaceManager(sheetDoc);
- var drawingNode = sheetDoc.SelectSingleNode("/x:worksheet/x:drawing", nsmgr) as XmlElement;
- string drawingRelId;
- string drawingId;
- if (drawingNode != null)
+ if (uniqueDrawingNode != null)
{
- // Drawing exists, get r:id
- drawingRelId = drawingNode.GetAttribute("id", nsmgr.LookupNamespace("r"));
- // Find the drawing target from .rels
- string relsPath = $"xl/worksheets/_rels/{sheetXmlName}.xml.rels";
- var relsEntry = archive.GetEntry(relsPath);
- var relsDoc = LoadXml(relsEntry);
- var namespaceManager = new XmlNamespaceManager(relsDoc.NameTable);
- namespaceManager.AddNamespace("x", "http://schemas.openxmlformats.org/package/2006/relationships");
- var xpath = $"/x:Relationships/x:Relationship[@Id='{drawingRelId}']";
- var relNode = relsDoc.SelectSingleNode(xpath, namespaceManager);
- string drawingTarget = relNode?.Attributes["Target"]?.Value;
- drawingId = drawingTarget != null ? drawingTarget.Split('/').Last().Replace("drawing", "").Replace(".xml", "") : Guid.NewGuid().ToString("N");
+ var drawingNode = sheetDoc.CreateElement("drawing", sheetDoc.DocumentElement?.NamespaceURI);
+ drawingNode.Attributes
+ .Append(sheetDoc.CreateAttribute("r", "id", "http://schemas.openxmlformats.org/officeDocument/2006/relationships"))
+ .Value = drawingRelId;
+ sheetDoc.DocumentElement.AppendChild(drawingNode);
}
- else
+ SaveXml(sheetDoc, sheetEntry);
+
{
- // No drawing, create new
- drawingRelId = $"rId{Guid.NewGuid().ToString("N")}";
- drawingId = Guid.NewGuid().ToString("N");
- // Add node
- var newDrawingNode = sheetDoc.CreateElement("drawing", sheetDoc.DocumentElement.NamespaceURI);
- newDrawingNode.SetAttribute("id", nsmgr.LookupNamespace("r"), drawingRelId);
- sheetDoc.DocumentElement.AppendChild(newDrawingNode);
- SaveXml(sheetDoc, sheetEntry);
- // Add relationship
- string relsPath = $"xl/worksheets/_rels/{sheetXmlName}.xml.rels";
- var relsEntry = archive.GetEntry(relsPath) ?? archive.CreateEntry(relsPath);
- var relsDoc = LoadXml(relsEntry);
- var relNode = relsDoc.CreateElement("Relationship", relsDoc.DocumentElement.NamespaceURI);
- relNode.SetAttribute("Id", drawingRelId);
- relNode.SetAttribute("Type", "http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing");
- relNode.SetAttribute("Target", $"../drawings/drawing{drawingId}.xml");
- relsDoc.DocumentElement.AppendChild(relNode);
- SaveXml(relsDoc, relsEntry);
- // Update [Content_Types].xml for drawing
- var contentTypesEntry = archive.GetEntry("[Content_Types].xml");
- var contentTypesDoc = LoadXml(contentTypesEntry);
- var overrideDrawingFileExists = false;
- foreach (XmlNode node in contentTypesDoc.DocumentElement.ChildNodes)
+ var drawingPath = $"xl/worksheets/_rels/{sheetName}.xml.rels";
+ var isExistEntry = false;
+ var sheetRelsEntry = archive.GetEntry(drawingPath);
+ if (sheetRelsEntry != null)
+ {
+ isExistEntry = true;
+ }
+ else
{
- if (node.Name == "Override" && node.Attributes["PartName"].Value == $"/xl/drawings/drawing{drawingId}.xml")
+ sheetRelsEntry = archive.CreateEntry(drawingPath);
+ }
+
+ if (isExistEntry)
+ {
+ var sheetRelsDoc = LoadXml(sheetRelsEntry);
+ var exists = CheckRelationshipExists(
+ sheetRelsDoc,
+ drawingRelId,
+ "http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing",
+ $"../drawings/drawing{drawingId}.xml"
+ );
+ if (!exists)
{
- overrideDrawingFileExists = true;
- break;
+ var relNode = sheetRelsDoc.CreateElement("Relationship", sheetRelsDoc.DocumentElement.NamespaceURI);
+ relNode.SetAttribute("Id", drawingRelId);
+ relNode.SetAttribute("Type", "http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing");
+ relNode.SetAttribute("Target", $"../drawings/drawing{drawingId}.xml");
+ sheetRelsDoc.DocumentElement.AppendChild(relNode);
}
+ SaveXml(sheetRelsDoc, sheetRelsEntry);
}
- if (!overrideDrawingFileExists)
+ else
{
- var overrideNode = contentTypesDoc.CreateElement("Override", contentTypesDoc.DocumentElement.NamespaceURI);
- overrideNode.SetAttribute("PartName", $"/xl/drawings/drawing{drawingId}.xml");
- overrideNode.SetAttribute("ContentType", "application/vnd.openxmlformats-officedocument.drawing+xml");
- contentTypesDoc.DocumentElement.AppendChild(overrideNode);
+ var sheetRelsDoc = new XmlDocument();
+ sheetRelsDoc.LoadXml(@"");
+ var relNode = sheetRelsDoc.CreateElement("Relationship", sheetRelsDoc.DocumentElement.NamespaceURI);
+ relNode.SetAttribute("Id", drawingRelId);
+ relNode.SetAttribute("Type", "http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing");
+ relNode.SetAttribute("Target", $"../drawings/drawing{drawingId}.xml");
+ sheetRelsDoc.DocumentElement.AppendChild(relNode);
+ SaveXml(sheetRelsDoc, sheetRelsEntry);
}
- SaveXml(contentTypesDoc, contentTypesEntry);
+
}
+ // Step 4: Update exist xl/drawings/drawingX if not create one
+ {
+ XmlDocument drawingDoc;
+ var drawingPath = $"xl/drawings/drawing{drawingId}.xml";
+ var drawingEntry = archive.GetEntry(drawingPath);
+ if (drawingEntry != null)
+ {
+ drawingDoc = LoadXml(drawingEntry);
+ if (drawingDoc.DocumentElement != null)
+ {
+ // Create the new node
+ var newTwoCellAnchor = drawingDoc.CreateElement("xdr", "twoCellAnchor", "http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing");
+ newTwoCellAnchor.SetAttribute("editAs", "oneCell");
+
+ // Add the node
+ var fromNode = drawingDoc.CreateElement("xdr", "from", "http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing");
+ fromNode.InnerXml = $@"
+ {col}
+ 0
+ {row}
+ 0";
+ newTwoCellAnchor.AppendChild(fromNode);
+
+ // Add the node
+ var toNode = drawingDoc.CreateElement("xdr", "to", "http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing");
+ toNode.InnerXml = $@"
+ {col + 1}
+ {widthPx * 9525}
+ {row + 1}
+ {heightPx * 9525}";
+ newTwoCellAnchor.AppendChild(toNode);
+
+ // Add the node
+ var picNode = drawingDoc.CreateElement("xdr", "pic", "http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing");
+ picNode.InnerXml = $@"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ";
+ newTwoCellAnchor.AppendChild(picNode);
+
+ // Add the node
+ var clientDataNode = drawingDoc.CreateElement("xdr", "clientData", "http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing");
+ newTwoCellAnchor.AppendChild(clientDataNode);
+
+ // Append the new node after the last
+ drawingDoc.DocumentElement.AppendChild(newTwoCellAnchor);
+ }
- // Load or create drawing XML
- string drawingPath = $"xl/drawings/drawing{drawingId}.xml";
- var drawingEntry = archive.GetEntry(drawingPath) ?? archive.CreateEntry(drawingPath);
- XmlDocument drawingDoc = LoadXml(drawingEntry);
+ }
+ else
+ {
+ drawingEntry = archive.CreateEntry(drawingPath);
+ drawingDoc = CreateDrawingXml(col, row, widthPx, heightPx, relId);
+ }
- // Load or create drawing rels
- string drawingRelsPath = $"xl/drawings/_rels/drawing{drawingId}.xml.rels";
- var drawingRelsEntry = archive.GetEntry(drawingRelsPath) ?? archive.CreateEntry(drawingRelsPath);
- var drawingRelsDoc = LoadXml(drawingRelsEntry);
+ SaveXml(drawingDoc, drawingEntry);
+ }
- // Add each image to drawing and rels
- foreach (var image in sheetGroup)
+ // Step 5: Create or update xl/drawings/_rels/drawingX.xml.rels
{
- var imageBytes = image.ImageBytes;
- var col = image.ColumnNumber;
- var row = image.RowNumber;
- var widthPx = image.WidthPx;
- var heightPx = image.HeightPx;
- // Step 1: Add image to /xl/media/
- string imageName = $"image{Guid.NewGuid().ToString("N")}.png";
- string imagePath = $"xl/media/{imageName}";
- var imageEntry = archive.CreateEntry(imagePath);
- using (var entryStream = imageEntry.Open())
- entryStream.Write(imageBytes, 0, imageBytes.Length);
- // Step 2: Update [Content_Types].xml for image
- var contentTypesEntry = archive.GetEntry("[Content_Types].xml");
- var contentTypesDoc = LoadXml(contentTypesEntry);
- if (!contentTypesDoc.DocumentElement.InnerXml.Contains("image/png"))
- {
- var defaultNode = contentTypesDoc.CreateElement("Default", contentTypesDoc.DocumentElement.NamespaceURI);
- defaultNode.SetAttribute("Extension", "png");
- defaultNode.SetAttribute("ContentType", "image/png");
- contentTypesDoc.DocumentElement.AppendChild(defaultNode);
- SaveXml(contentTypesDoc, contentTypesEntry);
- }
- // Step 3: Add anchor to drawing XML
- var relId = $"rId{Guid.NewGuid().ToString("N")}";
- drawingDoc = CreateDrawingXml(drawingDoc, col, row, widthPx, heightPx, relId);
- // Step 4: Add image relationship to drawing rels
+ var drawingRelsPath = $"xl/drawings/_rels/drawing{drawingId}.xml.rels";
+ var drawingRelsEntry = archive.GetEntry(drawingRelsPath) ?? archive.CreateEntry(drawingRelsPath);
+ var drawingRelsDoc = LoadXml(drawingRelsEntry);
+
+ // Check if the relationship already exists
+ var existingRel = drawingRelsDoc.SelectSingleNode($"/x:Relationships/x:Relationship[@Id='{relId}']", GetNamespaceManager(drawingRelsDoc)); //todo: why never used?
var relNode = drawingRelsDoc.CreateElement("Relationship", drawingRelsDoc.DocumentElement.NamespaceURI);
relNode.SetAttribute("Id", relId);
relNode.SetAttribute("Type", "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image");
relNode.SetAttribute("Target", $"../media/{imageName}");
drawingRelsDoc.DocumentElement.AppendChild(relNode);
+
+ SaveXml(drawingRelsDoc, drawingRelsEntry);
}
- SaveXml(drawingDoc, drawingEntry);
- SaveXml(drawingRelsDoc, drawingRelsEntry);
}
}
}
@@ -205,175 +280,48 @@ private static XmlNamespaceManager GetNamespaceManager(XmlDocument doc)
return nsmgr;
}
- private static XmlDocument CreateDrawingXml(XmlDocument existingDoc, int col, int row, int widthPx, int heightPx, string relId)
+ private static XmlDocument CreateDrawingXml(int col, int row, int? widthPx, int? heightPx, string relId)
{
- return DrawingXmlHelper.CreateOrUpdateDrawingXml(existingDoc, col, row, widthPx, heightPx, relId);
+ var doc = new XmlDocument();
+ doc.LoadXml($@"
+
+
+ {col}0{row}0
+ {col + 1}{widthPx * 9525}{row + 1}{heightPx * 9525}
+
+
+
+
+
+
+
+
+
+
+
+
+
+");
+ return doc;
}
-
- public class DrawingXmlHelper
+ private static XmlNamespaceManager GetRNamespaceManager(XmlDocument doc)
{
- private const string XdrNamespace = "http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing";
- private const string ANamespace = "http://schemas.openxmlformats.org/drawingml/2006/main";
-
- private static long PixelsToEMU(int pixels) => (long)(pixels * 9525);
-
- private static string GetColumnName(int colIndex)
- {
- string columnName = "";
- int dividend = colIndex + 1;
- while (dividend > 0)
- {
- int modulo = (dividend - 1) % 26;
- columnName = Convert.ToChar('A' + modulo).ToString() + columnName;
- dividend = (dividend - modulo) / 26;
- }
- return columnName;
- }
-
- public static XmlDocument CreateOrUpdateDrawingXml(
- XmlDocument existingDoc,
- int col, int row,
- int widthPx, int heightPx,
- string relId)
- {
- var doc = existingDoc ?? new XmlDocument();
- var ns = new XmlNamespaceManager(doc.NameTable);
- ns.AddNamespace("xdr", XdrNamespace);
- ns.AddNamespace("a", ANamespace);
- ns.AddNamespace("r", "http://schemas.openxmlformats.org/officeDocument/2006/relationships");
-
-
- // check or create
- XmlElement wsDr;
- if (existingDoc == null)
- {
- wsDr = doc.CreateElement("xdr", "wsDr", XdrNamespace);
- wsDr.SetAttribute("xmlns:xdr", XdrNamespace);
- wsDr.SetAttribute("xmlns:a", ANamespace);
- doc.AppendChild(wsDr);
- }
- else
- {
- wsDr = doc.DocumentElement;
- }
-
- // get current oneCellAnchor to get id 和 name
- XmlNodeList anchors = wsDr.SelectNodes("//xdr:oneCellAnchor", ns);
- int imageCount = anchors?.Count ?? 0;
-
- // next ID(2)
- int nextId = imageCount + 2;
-
- // create oneCellAnchor
- var oneCellAnchor = doc.CreateElement("xdr", "oneCellAnchor", XdrNamespace);
-
- //
- var from = doc.CreateElement("xdr", "from", XdrNamespace);
- AppendXmlElement(doc, from, "xdr", "col", col.ToString());
- AppendXmlElement(doc, from, "xdr", "colOff", "0");
- AppendXmlElement(doc, from, "xdr", "row", row.ToString());
- AppendXmlElement(doc, from, "xdr", "rowOff", "0");
-
- //
- var ext = doc.CreateElement("xdr", "ext", XdrNamespace);
- ext.SetAttribute("cx", PixelsToEMU(widthPx).ToString());
- ext.SetAttribute("cy", PixelsToEMU(heightPx).ToString());
-
- //
- var pic = doc.CreateElement("xdr", "pic", XdrNamespace);
-
- //
- var nvPicPr = doc.CreateElement("xdr", "nvPicPr", XdrNamespace);
- var cNvPr = doc.CreateElement("xdr", "cNvPr", XdrNamespace);
- cNvPr.SetAttribute("id", nextId.ToString());
- cNvPr.SetAttribute("name", $"ImageAt{GetColumnName(col)}{row + 1}");
-
- // ...
- var extLst = doc.CreateElement("a", "extLst", ANamespace);
- var extNode = doc.CreateElement("a", "ext", ANamespace);
- extNode.SetAttribute("uri", "{FF2B5EF4-FFF2-40B4-BE49-F238E27FC236}");
-
- var creationId = doc.CreateElement("a16", "creationId", "http://schemas.microsoft.com/office/drawing/2014/main");
- creationId.SetAttribute("id", "http://schemas.microsoft.com/office/drawing/2014/main", $"{{00000000-0008-0000-0000-0000{nextId:D6}000000}}");
-
- extNode.AppendChild(creationId);
- extLst.AppendChild(extNode);
- cNvPr.AppendChild(extLst);
-
- //
- var cNvPicPr = doc.CreateElement("xdr", "cNvPicPr", XdrNamespace);
- var picLocks = doc.CreateElement("a", "picLocks", ANamespace);
- picLocks.SetAttribute("noChangeAspect", "1");
- cNvPicPr.AppendChild(picLocks);
-
- nvPicPr.AppendChild(cNvPr);
- nvPicPr.AppendChild(cNvPicPr);
- pic.AppendChild(nvPicPr);
-
- //
-
- var blipFill = doc.CreateElement("xdr", "blipFill", XdrNamespace);
- var blip = doc.CreateElement("a", "blip", ANamespace);
-
- blip.SetAttribute("xmlns:r", "http://schemas.openxmlformats.org/officeDocument/2006/relationships");
- blip.SetAttribute("embed", ns.LookupNamespace("r"), relId);
- blip.SetAttribute("cstate", "print");
-
-
- var stretch = doc.CreateElement("a", "stretch", ANamespace);
- var fillRect = doc.CreateElement("a", "fillRect", ANamespace);
- stretch.AppendChild(fillRect);
-
- blipFill.AppendChild(blip);
- blipFill.AppendChild(stretch);
- pic.AppendChild(blipFill);
-
- //
- var spPr = doc.CreateElement("xdr", "spPr", XdrNamespace);
- var xfrm = doc.CreateElement("a", "xfrm", ANamespace);
-
- var off = doc.CreateElement("a", "off", ANamespace);
- off.SetAttribute("x", "0");
- off.SetAttribute("y", "0");
-
- var spExt = doc.CreateElement("a", "ext", ANamespace);
- spExt.SetAttribute("cx", "0");
- spExt.SetAttribute("cy", "0");
-
- xfrm.AppendChild(off);
- xfrm.AppendChild(spExt);
-
- var prstGeom = doc.CreateElement("a", "prstGeom", ANamespace);
- prstGeom.SetAttribute("prst", "rect");
-
- var avLst = doc.CreateElement("a", "avLst", ANamespace);
- prstGeom.AppendChild(avLst);
-
- spPr.AppendChild(xfrm);
- spPr.AppendChild(prstGeom);
-
- pic.AppendChild(spPr);
-
- //
- var clientData = doc.CreateElement("xdr", "clientData", XdrNamespace);
-
- oneCellAnchor.AppendChild(from);
- oneCellAnchor.AppendChild(ext);
- oneCellAnchor.AppendChild(pic);
- oneCellAnchor.AppendChild(clientData);
+ var nsmgr = new XmlNamespaceManager(doc.NameTable);
+ nsmgr.AddNamespace("x", "http://schemas.openxmlformats.org/spreadsheetml/2006/main");
+ nsmgr.AddNamespace("r", "http://schemas.openxmlformats.org/officeDocument/2006/relationships");
+ return nsmgr;
+ }
- wsDr.AppendChild(oneCellAnchor);
+ private static bool CheckRelationshipExists(XmlDocument doc, string id, string type, string target)
+ {
+ var namespaceManager = new XmlNamespaceManager(doc.NameTable);
+ namespaceManager.AddNamespace("x", "http://schemas.openxmlformats.org/package/2006/relationships");
- return doc;
- }
+ var xpath = $"/x:Relationships/x:Relationship[@Id='{id}' and @Type='{type}' and @Target='{target}']";
+ var node = doc.SelectSingleNode(xpath, namespaceManager);
- private static void AppendXmlElement(XmlDocument doc, XmlElement parent, string prefix, string localName, string value)
- {
- var el = doc.CreateElement(prefix, localName, prefix == "xdr" ? XdrNamespace : ANamespace);
- el.InnerText = value;
- parent.AppendChild(el);
- }
+ return node != null;
}
}
}
\ No newline at end of file
diff --git a/tests/MiniExcelTests/MiniExcelIssueTests.cs b/tests/MiniExcelTests/MiniExcelIssueTests.cs
index d36048c1..d08241a7 100644
--- a/tests/MiniExcelTests/MiniExcelIssueTests.cs
+++ b/tests/MiniExcelTests/MiniExcelIssueTests.cs
@@ -20,11 +20,8 @@
using static MiniExcelLibs.Tests.MiniExcelOpenXmlTests;
using MiniExcelLibs.Picture;
using TableStyles = MiniExcelLibs.OpenXml.TableStyles;
-using ClosedXML.Excel;
-using System.Drawing;
using System.Threading.Tasks;
-
namespace MiniExcelLibs.Tests;
public class MiniExcelIssueTests(ITestOutputHelper output)
@@ -4399,233 +4396,6 @@ public void TestIssue789()
}
///
- /// https://github.com/mini-software/MiniExcel/issues/814
- ///
- [Fact]
- public void TestIssue814()
- {
- var originPath = PathHelper.GetFile("xlsx/TestIssue186_Template.xlsx");
- using var path = AutoDeletingPath.Create();
- File.Copy(originPath, path.FilePath);
-
- MiniExcelPicture[] images =
- [
- new()
- {
- ImageBytes = File.ReadAllBytes(PathHelper.GetFile("images/github_logo.png")),
- SheetName = null, // default null is first sheet
- CellAddress = "C3", // required
- },
- new()
- {
- ImageBytes = File.ReadAllBytes(PathHelper.GetFile("images/google_logo.png")),
- PictureType = "image/png", // default PictureType = image/png
- SheetName = "Demo",
- CellAddress = "C9", // required
- WidthPx = 500,
- HeightPx = 500
- },
- new()
- {
- ImageBytes = File.ReadAllBytes(PathHelper.GetFile("images/google_logo.png")),
- PictureType = "image/png", // default PictureType = image/png
- SheetName = "Demo",
- CellAddress = "E9", // required
- WidthPx = 800,
- HeightPx = 850
- }
- ];
-
- MiniExcel.AddPicture(path.FilePath, images);
-
- using var package = new ExcelPackage(new FileInfo(path.FilePath));
-
- // Check picture in the first sheet (C3)
- var firstSheet = package.Workbook.Worksheets[0];
- var pictureInC3 = firstSheet.Drawings.OfType().FirstOrDefault(p => p.From.Column == 2 && p.From.Row == 2);
- Assert.NotNull(pictureInC3);
-
- // Check picture in the "Demo" sheet (C9)
- var demoSheet = package.Workbook.Worksheets["Demo"];
- var pictureInC9 = demoSheet.Drawings.OfType().FirstOrDefault(p => p.From.Column == 2 && p.From.Row == 8);
- Assert.NotNull(pictureInC9);
- }
-
- ///
- /// https://github.com/mini-software/MiniExcel/issues/815
- ///
- [Fact]
- public void TestIssue815()
- {
- var originPath = PathHelper.GetFile("xlsx/TestIssue186_Template.xlsx");
- using var path = AutoDeletingPath.Create();
- File.Copy(originPath, path.FilePath);
- {
- MiniExcelPicture[] images =
- [
- new()
- {
- ImageBytes = File.ReadAllBytes(PathHelper.GetFile("images/github_logo.png")),
- SheetName = null, // default null is first sheet
- CellAddress = "C3", // required
- },
- new()
- {
- ImageBytes = File.ReadAllBytes(PathHelper.GetFile("images/google_logo.png")),
- PictureType = "image/png", // default PictureType = image/png
- SheetName = "Demo",
- CellAddress = "C9", // required
- WidthPx = 500,
- HeightPx = 500
- },
- new()
- {
- ImageBytes = File.ReadAllBytes(PathHelper.GetFile("images/google_logo.png")),
- PictureType = "image/png", // default PictureType = image/png
- SheetName = "Demo",
- CellAddress = "E9", // required
- WidthPx = 800,
- HeightPx = 850
- }
- ];
-
- MiniExcel.AddPicture(path.FilePath, images);
-
- using (var package = new ExcelPackage(new FileInfo(path.FilePath)))
- {
- // Check picture in the first sheet (C3)
- var firstSheet = package.Workbook.Worksheets[0];
- var pictureInC3 = firstSheet.Drawings.OfType().FirstOrDefault(p => p.From.Column == 2 && p.From.Row == 2);
- Assert.NotNull(pictureInC3);
-
- // Check picture in the "Demo" sheet (C9)
- var demoSheet = package.Workbook.Worksheets["Demo"];
- var pictureInC9 = demoSheet.Drawings.OfType().FirstOrDefault(p => p.From.Column == 2 && p.From.Row == 8);
- Assert.NotNull(pictureInC9);
- }
- }
-
- // TODO:check C3 image WidthPx = 80px, HeightPx = 24px, C9 WidthPx=500,HeightPx=500
- }
-
- ///
- /// https://github.com/mini-software/MiniExcel/issues/816
- ///
- [Fact]
- public void TestIssue816()
- {
- var originPath = PathHelper.GetFile("xlsx/TestIssue186_Template.xlsx");
- using var path = AutoDeletingPath.Create();
- File.Copy(originPath, path.FilePath);
- {
- MiniExcelPicture[] images =
- [
- new()
- {
- ImageBytes = File.ReadAllBytes(PathHelper.GetFile("images/github_logo.png")),
- SheetName = null, // default null is first sheet
- CellAddress = "C3", // required
- },
- new()
- {
- ImageBytes = File.ReadAllBytes(PathHelper.GetFile("images/google_logo.png")),
- PictureType = "image/png", // default PictureType = image/png
- SheetName = "Demo",
- CellAddress = "C9", // required
- WidthPx = 500,
- HeightPx = 500
- },
- new()
- {
- ImageBytes = File.ReadAllBytes(PathHelper.GetFile("images/google_logo.png")),
- PictureType = "image/png", // default PictureType = image/png
- SheetName = "Demo",
- CellAddress = "E9", // required
- WidthPx = 800,
- HeightPx = 850
- }
- ];
-
- MiniExcel.AddPicture(path.FilePath, images);
-
- using (var package = new ExcelPackage(new FileInfo(path.FilePath)))
- {
- // Check picture in the first sheet (C3)
- var firstSheet = package.Workbook.Worksheets[0];
- var pictureInC3 = firstSheet.Drawings.OfType().FirstOrDefault(p => p.From.Column == 2 && p.From.Row == 2);
- Assert.NotNull(pictureInC3);
-
- // Check picture in the "Demo" sheet (C9)
- var demoSheet = package.Workbook.Worksheets["Demo"];
- var pictureInC9 = demoSheet.Drawings.OfType().FirstOrDefault(p => p.From.Column == 2 && p.From.Row == 8);
- Assert.NotNull(pictureInC9);
- }
- }
-
- {
- MiniExcelPicture[] images =
- [
- new()
- {
- ImageBytes = File.ReadAllBytes(PathHelper.GetFile("images/github_logo.png")),
- SheetName = null, // default null is first sheet
- CellAddress = "D3", // required
- },
- new()
- {
- ImageBytes = File.ReadAllBytes(PathHelper.GetFile("images/google_logo.png")),
- PictureType = "image/png", // default PictureType = image/png
- SheetName = "Demo",
- CellAddress = "D9", // required
- WidthPx = 500,
- HeightPx = 500
- },
- new()
- {
- ImageBytes = File.ReadAllBytes(PathHelper.GetFile("images/google_logo.png")),
- PictureType = "image/png", // default PictureType = image/png
- SheetName = "Demo",
- CellAddress = "F9", // required
- WidthPx = 800,
- HeightPx = 850
- }
- ];
-
- MiniExcel.AddPicture(path.FilePath, images);
-
- using (var package = new ExcelPackage(new FileInfo(path.FilePath)))
- {
- {
- // Check picture in the first sheet (C3)
- var firstSheet = package.Workbook.Worksheets[0];
- var pictureInC3 = firstSheet.Drawings.OfType().FirstOrDefault(p => p.From.Column == 2 && p.From.Row == 2);
- Assert.NotNull(pictureInC3);
-
- // Check picture in the "Demo" sheet (C9)
- var demoSheet = package.Workbook.Worksheets["Demo"];
- var pictureInC9 = demoSheet.Drawings.OfType().FirstOrDefault(p => p.From.Column == 2 && p.From.Row == 8);
- Assert.NotNull(pictureInC9);
- }
-
- {
- // Check picture in the first sheet (D3)
- var firstSheet = package.Workbook.Worksheets[0];
- var pictureInD3 = firstSheet.Drawings.OfType().FirstOrDefault(p => p.From.Column == 3 && p.From.Row == 2);
- Assert.NotNull(pictureInD3);
-
- // Check picture in the "Demo" sheet (D9)
- var demoSheet = package.Workbook.Worksheets["Demo"];
- var pictureInD9 = demoSheet.Drawings.OfType().FirstOrDefault(p => p.From.Column == 3 && p.From.Row == 8);
- Assert.NotNull(pictureInD9);
-
- // Check picture in the "Demo" sheet (F9)
- var pictureInF9 = demoSheet.Drawings.OfType().FirstOrDefault(p => p.From.Column == 5 && p.From.Row == 8);
- Assert.NotNull(pictureInF9);
- }
- }
-
- }
-
/// https://github.com/mini-software/MiniExcel/issues/809
///
[Fact]
@@ -4636,6 +4406,5 @@ public void TestIssue809()
Assert.Equal(3, rows.Count);
Assert.Equal(null, rows[0].A);
Assert.Equal(2, rows[2].B);
-
}
}
\ No newline at end of file