Magicodes.IE
Magicodes.IE copied to clipboard
[解决: 升级两个包] 可空字段数据为 null 升级库到2.7.1后报错 Please use DBNull instead
Actual behaviour
可空字段数据为 null , 以前版本都顺利能导出 PDF, 新版报错
System.ArgumentException:“Cannot set Column 'UnitPrice2' to be null. Please use DBNull instead.”
I'm seeing this behaviour on
- [ ] Magicodes.IE.Excel
- [x] Magicodes.IE.Pdf
- [x] Magicodes.IE.Word
- [ ] Magicodes.IE.Csv
- [x] Magicodes.IE.Html
- [ ] Magicodes.IE.AspNetCore
package versions
<PackageReference Include="Magicodes.IE.Core" Version="2.7.2" />
<PackageReference Include="Magicodes.IE.Excel" Version="2.7.2" />
<PackageReference Include="Magicodes.IE.Html" Version="2.7.2" />
<PackageReference Include="Magicodes.IE.Pdf" Version="2.7.2" />
<PackageReference Include="Magicodes.IE.Word" Version="2.7.2" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.2" />
临时解决方案 2022-12-27
- 重新编译一次 Magicodes.IE.Core
- 工程引用或者升级这两个包, 包括net4.6.1下pdf不能生成问题
<PackageReference Include="HtmlToOpenXml.dll" Version="2.3.0" />
<PackageReference Include="Haukcode.WkHtmlToPdfDotNet" Version="1.5.86" />
So how can we reproduce this?
测试代码
public partial class Program
{
public partial class Foo
{
public decimal UnitPrice { get; set; } = 1;
public decimal? UnitPrice2 { get; set; } = null;
}
public static async Task 测试IE()
{
var filePath = Path.Combine(Directory.GetCurrentDirectory(), "xxxx");
var items = new List<Foo>() { new Foo() };
var exporter = new ExcelExporter();
var result = await exporter.Export(filePath + ".xlsx", items);
Console.WriteLine(result.FileName);
var exporterWord = new WordExporter();
var resultWord = await exporterWord.ExportListByTemplate(filePath + ".docx", items);
Console.WriteLine(resultWord.FileName);
var exporterPdf = new PdfExporter();
var resultPdf = await exporterPdf.ExportListByTemplate(filePath + ".pdf", items);
Console.WriteLine(resultPdf.FileName);
var exporterHtml = new HtmlExporter();
var resultHtml = await exporterHtml.ExportListByTemplate(filePath + ".html", items);
Console.WriteLine(resultHtml.FileName);
}
}
除了ExcelExporter能跑过, 下面三个都报同样错误 System.ArgumentException:“Cannot set Column 'UnitPrice2' to be null. Please use DBNull instead.”
很奇怪的是这段代码添加到 src\Magicodes.ExporterAndImporter.Tests\PdfExporter_Tests.cs
测试能跑过. 如图
PdfExporter_Tests.cs
demo
测试代码连接到源码调试也能成功通过, 没有出错
收到,感谢!可能和.NET框架版本有关。您这边是在.NET哪个版本下报错?
demo我附上了,.net7.0Densen informatica在 2022年12月19日,06:56,xl-wenqiang @.***> 写道: 收到,感谢!可能和.NET框架版本有关。您这边是在.NET哪个版本下报错?
—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you authored the thread.Message ID: @.***>
在单元测试中,即时是使用.NET 7进行测试问题也不会出现。初步判断可能与Razor有关,后续进行跟踪优化。
我自己本地编译发布包来用没问题,所以是不是可以直接编译再发一个版本?
在单元测试中,即时是使用.NET 7进行测试问题也不会出现。初步判断可能与Razor有关,后续进行跟踪优化。
确认更新 htmltoopenxml.dll 版本可以解决问题
工程引用或者升级这两个包,可以解决问题, 包括net4.6.1下pdf不能生成问题
<PackageReference Include="HtmlToOpenXml.dll" Version="2.3.0" />
<PackageReference Include="Haukcode.WkHtmlToPdfDotNet" Version="1.5.86" />
收到,感谢!
@densen2014 你可以试试最新的包2.7.2有没有问题,我更新了Haukcode.WkHtmlToPdfDotNet
@xl-wenqiang 看到新包已经第一时间测试过了, 应该是跟我自己工程引用包有一定关系. 我有net4.8和net7.0两个环境, 覆盖winforms, webapi和blazor等等
还是报错
-
net4.8导出pdf报错
NotSupportedException: Unable to load native library. The platform may be missing native dependencies (libjpeg62, etc). Or the current platform is not supported.
使用
<PackageReference Include="Haukcode.WkHtmlToPdfDotNet" Version="1.5.86" />
解决 -
net7.0导出excel/html/pdf报错
System.ArgumentException:“Cannot set Column 'UnitPrice2' to be null. Please use DBNull instead.”
Magicodes.IE.Core 本机发布解决问题.
我最终能用的方案是
//Magicodes.IE.Core 本机发布的,否则会报 System.ArgumentException:“Cannot set Column 'UnitPrice2' to be null. Please use DBNull instead.”
<PackageReference Include="Magicodes.IE.Core" Version="2.8" />
<PackageReference Include="Magicodes.IE.Excel" Version="2.7.2" />
<PackageReference Include="Magicodes.IE.Html" Version="2.7.2" />
<PackageReference Include="Magicodes.IE.Pdf" Version="2.7.2" />
<PackageReference Include="Magicodes.IE.Word" Version="2.7.2" />
<PackageReference Include="HtmlToOpenXml.dll" Version="2.3.0" />
<PackageReference Include="Haukcode.WkHtmlToPdfDotNet" Version="1.5.86" />
测试代码
<TargetFrameworks>net7.0;net48</TargetFrameworks>
<PackageReference Include="Magicodes.IE.Core" Version="2.7.2" />
<PackageReference Include="Magicodes.IE.Excel" Version="2.7.2" />
<PackageReference Include="Magicodes.IE.Html" Version="2.7.2" />
<PackageReference Include="Magicodes.IE.Pdf" Version="2.7.2" />
<PackageReference Include="Magicodes.IE.Word" Version="2.7.2" />
public static async Task 测试IE()
{
var sw = Stopwatch.StartNew();
var filePath = Path.Combine(Directory.GetCurrentDirectory(), "xxxx");
var items = new List<Foo>() { new Foo() };
try
{
var exporter = new ExcelExporter();
var result = await exporter.Export(filePath + ".xlsx", items);
Console.WriteLine(result.FileName);
Console.WriteLine(sw.Elapsed.TotalSeconds);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
sw.Restart();
try
{
var exporterWord = new WordExporter();
var resultWord = await exporterWord.ExportListByTemplate(filePath + ".docx", items);
Console.WriteLine(resultWord.FileName);
Console.WriteLine(sw.Elapsed.TotalSeconds);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
sw.Restart();
try
{
var exporterHtml = new HtmlExporter();
var resultHtml = await exporterHtml.ExportListByTemplate(filePath + ".html", items);
Console.WriteLine(resultHtml.FileName);
Console.WriteLine(sw.Elapsed.TotalSeconds);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
sw.Restart();
try
{
var exporterPdf = new PdfExporter();
var resultPdf = await exporterPdf.ExportListByTemplate(filePath + ".pdf", items);
Console.WriteLine(resultPdf.FileName);
Console.WriteLine(sw.Elapsed.TotalSeconds);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
sw.Restart();
}
@densen2014 你可以试试最新的包2.7.2有没有问题,我更新了Haukcode.WkHtmlToPdfDotNet
难道你说的是2.7.3? 我再测测
这个我也不知道怎么整了 ExcelExporter 报错
System.IO.FileLoadException:“未能加载文件或程序集“Collections.Pooled, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项。需要强名称程序集。 (异常来自 HRESULT:0x80131044)”
收到。2.7.3的问题解决了吗?
没解决。
而且会有这个问题, 我只能 Magicodes.IE.Core 本机发布
收到
而且会有这个问题, 我只能 Magicodes.IE.Core 本机发布
已确定这个导出的问题是最近的一个提交存在Bug,麻烦更新到[2.7.4.1]后再试试。
我已经用我前面土办法处理了。搞了一周多,等你们发布新版哈,最好同时测试一下nf48和core