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