Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NET Core不落地导出Excel支持 #588

Merged
merged 4 commits into from
May 3, 2024

Conversation

1257960069
Copy link
Contributor

1.废除FastMode, 支持http响应流直接输出(取消了流回退功能,见解释)
2.每1000行进行重刷一次,节约内存
3不使用new List导致迭代器全部计算浪费内存
4.解释:
在OpenXML中,<x:dimension ref="..."/> 元素指定了工作表中使用的单元格区域,它定义了工作表中所有单元格的最小矩形范围。这个元素是可选的,因为Excel和其他兼容的电子表格程序通常能够在没有这个元素的情况下打开文件,并计算出实际使用的单元格范围。

然而,省略 <x:dimension ref="..."/> 可能会导致性能问题,尤其是在处理大型工作表时。如果存在这个元素,电子表格程序可以直接定位到工作表中的活动区域,而不需要扫描整个工作表来确定哪些单元格包含数据。这可以减少文件打开的时间和内存使用量。

所以,如果你在乎打开文件的性能,特别是对于大型的工作表,最好是包含 <x:dimension ref="..."/> 元素。但如果你在生成的文件中遇到兼容性问题,或者你正在处理的是小型工作表,并且不太关心打开文件的性能,那么你可以选择省略它。

在OpenXML SDK中,如果你使用OpenXmlWriter来写入工作表,你可以选择是否写入这个元素。如果你决定省略它,确保你的电子表格程序能够在没有这个元素的情况下正确处理文件。

1.废除FastMode, 支持http响应流直接输出(取消了流回退功能,见解释)
2.每1000行进行重刷一次,节约内存
3不使用new List导致迭代器全部计算浪费内存
4.解释:
在OpenXML中,<x:dimension ref="..."/> 元素指定了工作表中使用的单元格区域,它定义了工作表中所有单元格的最小矩形范围。这个元素是可选的,因为Excel和其他兼容的电子表格程序通常能够在没有这个元素的情况下打开文件,并计算出实际使用的单元格范围。

然而,省略 <x:dimension ref="..."/> 可能会导致性能问题,尤其是在处理大型工作表时。如果存在这个元素,电子表格程序可以直接定位到工作表中的活动区域,而不需要扫描整个工作表来确定哪些单元格包含数据。这可以减少文件打开的时间和内存使用量。

所以,如果你在乎打开文件的性能,特别是对于大型的工作表,最好是包含 <x:dimension ref="..."/> 元素。但如果你在生成的文件中遇到兼容性问题,或者你正在处理的是小型工作表,并且不太关心打开文件的性能,那么你可以选择省略它。

在OpenXML SDK中,如果你使用OpenXmlWriter来写入工作表,你可以选择是否写入这个元素。如果你决定省略它,确保你的电子表格程序能够在没有这个元素的情况下正确处理文件。
@shps951023
Copy link
Member

@1257960069 谢谢贡献
Fastmode 还是会是一个选项,不会破坏性为了更方便支持.net core就移除,因为WPF用户会需要用到

@1257960069
Copy link
Contributor Author

@1257960069 谢谢贡献
Fastmode 还是会是一个选项,不会破坏性为了更方便支持.net core就移除,因为WPF用户会需要用到

Fastmode的意义我感觉并不大,还吃内存。能告诉我他具体的优势吗

@shps951023
Copy link
Member

shps951023 commented May 3, 2024

@1257960069

  • 第一,fastmode 就是用于 .net core 不落地导出 excel,不需要遍历两次
  • 第二dimension是 excel 标准,像是 epplus, npoi 会需要读取,避免需要遍历全部一次,可以变成一个选项,但删除会变成破坏性更新

谢谢 PR! 也想邀请你进我们 team 🙌
( 我会在下 commit 改回来支持 dimension,变成一个选项)

@shps951023 shps951023 merged commit 6eb30eb into mini-software:master May 3, 2024
1 of 2 checks passed
@shaofing
Copy link
Contributor

1,首先你这个代码不合并都支持直接写http响应流,我已经用在生产环境

2,你把SetPosition 去掉,和 fastmode 去掉 不知道这种破坏性变合并的意义
基于SetPosition 我这边已经在设计一些功能了

 不知道这种破坏性变合并到master分支的意义

@shps951023 @1257960069

@shaofing
Copy link
Contributor

@1257960069 谢谢贡献
Fastmode 还是会是一个选项,不会破坏性为了更方便支持.net core就移除,因为WPF用户会需要用到

Fastmode的意义我感觉并不大,还吃内存。能告诉我他具体的优势吗

软件产品本来就是在适配各种可能性,你觉得意义不大,不代表别人不用

@shps951023
Copy link
Member

shps951023 commented May 10, 2024

@shaofing 是的,我合并是因为他有一个想法很好 : N次 flush 机制 可以针对特定用户以资源换取速度,我会在改进此处逻辑优化
其他的代码如留言,我会改回之前代码

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants