解除FreeSpire.Office导出xlsx文件时的限制
既然你已经搜到了这个文章,想必已经了解FreeSpire.Office.
FreeSpire.Office它虽然是免费的,但是它也有一些限制,比如导出xlsx
文件时,限制不能操作5
个sheet以及不能超过200
行.
其实一般情况下5个sheet够用了,但是200行的限制还是有点不爽的.如果是调整到1000行的话还是满足大部分需求的.
下面就开整吧
在VS工具,使用nuget搜索安装FreeSpire.Office到项目,然后编译项目,目的就是为了获取以下几个dll文件
把Spire.XLS.dll
文件拖拽到de4dot工具撸一把.获得反混淆过的DLL文件,然后再使用dnSpy工具打开撸过的Spire.XLS-cleaned.dll
文件.
使用dnSpy工具进行调试
回顾一下上面所说的限制条件,5个sheet和200行,这个提示给我们提供了线索.下面看操作
通过dnSpy搜索功能,进行搜索200
数字/字符串,然后就是地毯式排查,打开每个搜索到的结果.我在图中红色标注的地方找到了关键代码.双击进入代码页面.
第一个
第二个
- 第一个关键代码如下,如果官方没有说明限制内容,要定位关键代码还是比较费时间的.
if (Enum550.const_1 > this.class1580_0.method_72())
{
if (Enum550.const_1 > this.class1580_0.method_72() && this.class1580_0.method_20().Count > 5)
{
for (int i = this.class1580_0.method_20().Count; i > 5; i--)
{
this.class1580_0.method_20().method_96(i - 1);
}
}
foreach (object obj in this.class1580_0.method_20())
{
Class1583 class2 = (Class1583)obj;
if (class2.method_12().method_7().Count > 200)
{
class2.method_12().method_188(200, class2.method_12().method_219().method_31());
}
}
}
通过代码可以清晰的看到判断逻辑.下面简单说明一下.
if (Enum550.const_1 > this.class1580_0.method_72() && this.class1580_0.method_20().Count > 5)
很显然这里数字5暴露了,判断5个sheetif (class2.method_12().method_7().Count > 200)
同样这里200暴露了,判断200行数据
第二个
if (@enum == Enum729.const_10)
{
if (this.Worksheets.Count > 5)
{
for (int i = this.Worksheets.Count; i > 5; i--)
{
this.Worksheets.Remove(i - 1);
}
}
foreach (object obj in this.Worksheets)
{
Worksheet worksheet = (Worksheet)obj;
if (worksheet.Rows.Length > 200)
{
worksheet.DeleteRow(201, worksheet.LastRow);
}
}
}
现在知道了关键代码剩下的就是修改代码了.如下操作. 鼠标右击->编辑方法,进入编辑模式.
修改代码,这里把5个sheet修改到1048570,同时200行数据修改到了1048570. 想必这下肯定是满足需求了.
第一个
第二个
最后保存模块,把文件名字修改为Spire.XLS.dll
,让项目使用这个DLL文件. 测试导出200行以上的数据,看看是否成功.
通过同样的方法,可以解除 Spire.Doc.dll
Spire.Pdf.dll
等限制.
结论
请支持正版! 使用nuget搜索Spire.Office
,这个就是付费正版.