ZhileTime.IE.Extensions.CSharpScript
1.1.5
See the version list below for details.
dotnet add package ZhileTime.IE.Extensions.CSharpScript --version 1.1.5
NuGet\Install-Package ZhileTime.IE.Extensions.CSharpScript -Version 1.1.5
<PackageReference Include="ZhileTime.IE.Extensions.CSharpScript" Version="1.1.5" />
<PackageVersion Include="ZhileTime.IE.Extensions.CSharpScript" Version="1.1.5" />
<PackageReference Include="ZhileTime.IE.Extensions.CSharpScript" />
paket add ZhileTime.IE.Extensions.CSharpScript --version 1.1.5
#r "nuget: ZhileTime.IE.Extensions.CSharpScript, 1.1.5"
#:package ZhileTime.IE.Extensions.CSharpScript@1.1.5
#addin nuget:?package=ZhileTime.IE.Extensions.CSharpScript&version=1.1.5
#tool nuget:?package=ZhileTime.IE.Extensions.CSharpScript&version=1.1.5
ZhileTime.IE
面向 .NET 10 的文件导入导出 SDK。Excel 与 CSV 支持数据导入、模板生成和校验;Excel、CSV、HTML、Word、PDF 支持导出;ASP.NET Core 适配层负责将导出结果交付为 HTTP 下载。
本页依据当前公开接口、服务注册和测试重写。业务系统负责权限、数据查询、导入结果落库与任务调度,SDK 负责文件解析、转换、渲染和输出。
NuGet · 源码 · 原件报告 · 云原生构建 · 变更记录
安装
当前源码版本:1.1.5。公开可用状态以 NuGet 和发布报告为准。
dotnet add package ZhileTime.IE.Excel --version 1.1.5
| NuGet 包 | 目标框架 |
|---|---|
| ZhileTime.IE.AspNetCore | net10.0 |
| ZhileTime.IE.Core | net10.0 |
| ZhileTime.IE.Csv | net10.0 |
| ZhileTime.IE.EPPlus | net10.0 |
| ZhileTime.IE.Excel | net10.0 |
| ZhileTime.IE.Excel.AspNetCore | net10.0 |
| ZhileTime.IE.Excel.NPOI | net10.0 |
| ZhileTime.IE.Extensions.CSharpScript | net10.0 |
| ZhileTime.IE.Extensions.RulesEngine | net10.0 |
| ZhileTime.IE.Html | net10.0 |
| ZhileTime.IE.Pdf | net10.0 |
| ZhileTime.IE.Runtime | net10.0 |
| ZhileTime.IE.Word | net10.0 |
版本、包名和目标框架由 common.props、build/packages.json 与实际项目文件生成。中央包管理项目将版本放入 Directory.Packages.props,业务项目使用 PackageReference,无需检出本仓库或添加本地 ProjectReference。
选择模块
| 需求 | 直接安装的包 | 当前实现 |
|---|---|---|
| Excel 导入、导出、动态映射 | ZhileTime.IE.Excel |
基于本仓随包维护的 EPPlus;提供工作簿、模板、追加导出和导入能力接口 |
| CSV 数据交换 | ZhileTime.IE.Csv |
CSV 导入、导出、模板及行错误结果 |
| HTML 模板渲染 | ZhileTime.IE.Html |
模板文本、流内容与文件导出 |
| Word 模板导出 | ZhileTime.IE.Word |
模板数据渲染为 Word 输出,不提供 Word 导入 |
| PDF 模板导出 | ZhileTime.IE.Pdf |
HTML 模板渲染与 wkhtmltopdf 原生转换;由有界队列调度 |
| 多格式 HTTP 导出 | ZhileTime.IE.AspNetCore |
显式注册启用的格式,统一响应写出、缓冲和释放 |
| MVC Excel 下载结果 | ZhileTime.IE.Excel.AspNetCore |
XlsxFileResult<T> 接收集合和 IExcelWorkbookExporter |
.xlsx 兼容重保存 |
ZhileTime.IE.Excel.NPOI |
已生成的 .xlsx 经 NPOI XSSFWorkbook 再保存;不是独立导入引擎,也不提供 .xls 支持 |
| 动态导入中的受信 C# 脚本 | ZhileTime.IE.Extensions.CSharpScript |
按需注册脚本编译器 |
| 动态导入中的规则表达式 | ZhileTime.IE.Extensions.RulesEngine |
按需注册规则编译器 |
Core 承载属性、导入结果和流内容契约;Runtime 承载导出文档与格式 Provider 契约;EPPlus 是底层工作簿实现。通常由所选格式包传递引入这些依赖。
从 DTO 导出并回读 Excel
下面是一个可放入 .NET 10 控制台项目的完整示例。安装 ZhileTime.IE.Excel 后运行,会写出并回读 employees.xlsx。
using System.ComponentModel.DataAnnotations;
using ZhileTime.IE.Core.Attributes;
using ZhileTime.IE.Excel;
var rows = new List<EmployeeRow>
{
new() { Name = "张三", Email = "zhangsan@example.com" }
};
var exporter = new ExcelExporter();
await using (var output = File.Create("employees.xlsx"))
{
await exporter.ExportToStreamAsync(rows, output);
}
var importer = new ExcelImporter();
var result = await importer.ImportAsync<EmployeeRow>("employees.xlsx");
if (result.HasError)
{
Console.WriteLine($"导入未通过:模板错误 {result.TemplateErrors.Count},行错误 {result.RowErrors.Count}");
return;
}
foreach (var row in result.Data)
{
Console.WriteLine($"{row.Name}: {row.Email}");
}
public sealed class EmployeeRow
{
[Required]
[ExportHeader("姓名")]
[ImportHeader(Name = "姓名")]
public string Name { get; set; } = "";
[EmailAddress]
[ExportHeader("邮箱")]
[ImportHeader(Name = "邮箱")]
public string Email { get; set; } = "";
}
ImportResult<T> 同时包含 Data、TemplateErrors、RowErrors、Exception 和 HasError。成功解析出部分行不等于整批导入成功;先评审错误结果,再由业务系统决定是否持久化。
需要用户先填写标准模板时,调用 GenerateTemplateFileAsync<EmployeeRow>("template.xlsx")。需要返回标注文件时,使用 ImportAsync<T>(输入流, 标注输出流, ...),或指定标注输出文件路径。模板级结构检查可单独使用 IExcelTemplateValidator。
流与资源所有权
优先根据消费方式选择 API:
- 已有目标流:
ExportToStreamAsync直接写入,由调用方管理目标流。 - 希望延后读取:
ExportStreamAsync返回IExportStreamContent,调用方必须释放内容对象和打开的读取流。 - 小文件需要字节数组:
ExportAsBytesAsync等便利扩展会将结果载入内存,不适合作为所有大文件的默认出口。
using var content = await exporter.ExportStreamAsync(rows);
using var input = content.OpenReadStream();
await using var output = File.Create("employees-copy.xlsx");
await input.CopyToAsync(output);
接口接受 CancellationToken;Web 请求应沿调用链传递 HttpContext.RequestAborted。返回流接口不代表工作簿计算过程是恒定内存,应按实际行数、图片和模板规模验证资源预算。
在依赖注入中使用
using Microsoft.Extensions.DependencyInjection;
using ZhileTime.IE.Excel;
services.AddExcelExporter();
services.AddExcelImporter();
导出器、导入器为作用域服务。除 IExcelExporter / IExcelImporter 聚合入口外,可以只注入需要的能力,例如 IExcelWorkbookExporter、IExcelTemplateExporter、IExcelDataImporter、IExcelTemplateGenerator;同一作用域的别名复用对应实现实例。
CSV、HTML、Word、PDF 分别提供 AddCsvExporter / AddCsvImporter、AddHtmlExporter、AddWordExporter、AddPdfExporter。PDF 转换调度器由容器管理,不应在每次请求里另建队列。
Excel 进阶入口
| 场景 | 当前入口与约束 |
|---|---|
| 列名、顺序、格式与数据校验 | DTO 使用 ExportHeader、ImportHeader 和 DataAnnotations;导入校验不替代业务规则 |
| 调用级导出覆盖 | ExcelExportOptions 设置表头过滤、单 Sheet 行数、动态字段和图片选项;不修改共享属性实例 |
| 多 Sheet 与追加 | IExcelMultiSheetImporter;Append() 创建追加上下文,再选择按行、列或 Sheet 分隔 |
| 模板导出 | IExcelTemplateExporter 接收模板与数据;模板处理逻辑见当前 Exporting/Templates 实现 |
| 图片 | 支持图片导入与导出;可限制源尺寸、像素、超时、重试和占位图 |
| 动态导入 | DynamicExcelImporter 读取 ImportMapDefinition,编译为 DynamicImportExecutionPlan 后执行 Resolve / ResolveAsync |
动态导入通过 AddDynamicExcelImporter 注册。脚本与规则能力分别显式调用 AddCSharpScriptImportTransformCompiler、AddRuleEngineImportTransformCompiler;只安装包不会自动信任或执行上传者提供的代码。定义、类型解析和可调用服务必须由应用控制。
ASP.NET Core 下载
安装 ZhileTime.IE.AspNetCore,一次注册全局选项,再组合需要的格式:
using ZhileTime.IE.AspNetCore;
builder.Services.AddIEHttpExport(options =>
{
options.MemoryThresholdBytes = 4 * 1024 * 1024;
options.ResponseBufferMemoryThresholdBytes = 1024 * 1024;
})
.AddExcelHttpExport()
.AddCsvHttpExport();
不要在同一服务集合重复调用 AddIEHttpExport。以上只启用 Excel/CSV;HTML、Word、PDF 通过对应 Add*HttpExport 显式加入。
若控制器已经有查询结果,可安装 ZhileTime.IE.Excel.AspNetCore,注入 IExcelWorkbookExporter,直接返回 new XlsxFileResult<EmployeeRow>(rows, exporter, "employees.xlsx")。响应写出层处理内容类型、文件名、请求取消和导出内容释放。
PDF 与部署边界
PDF 依赖 wkhtmltopdf 原生库和可用字体。Linux CI 的确切依赖维护在 Dockerfile.ci,部署应用应按目标操作系统与架构准备运行库,不能把 Linux x64 验证推断为所有平台均可用。
PdfConversionDispatcherOptions 默认一个工作线程、自动推导队列容量(默认四个)、入队等待 30 秒;可通过 AddPdfExporter 或 HttpExportOptions.PdfDispatcher 配置。增加工作线程需要结合实际原生转换负载评估。
上传文件大小、远程图片来源、模板来源、脚本权限、输出目录和临时磁盘容量属于应用边界。不要将未验证的导入数据直接落库,也不要把外部输入直接作为脚本或任意文件路径执行。
构建状态与报告
上方徽标动态显示最近一次原件报告状态,可能来自主干或 MR;请进入云原生构建页按分支和源码提交核对。构建通过不代表包已发布;正式发布以整批包内容核验通过及对应 Release 为准。
| 内容 | 查看入口 | 自动化行为 |
|---|---|---|
| 构建与测试 | 原件报告 → 选择构建 → 测试报告 | 每次执行生成 JUnit,展示通过、失败和跳过项 |
| 通用报告 | 原件报告 → 选择构建 → 通用报告 | 汇总版本、源码提交、测试、步骤耗时、工具链和缓存信息 |
| 原始证据 | 同一构建的构建产物 | 保存 TRX、日志、JSON/Markdown 报告及带 SHA256 的包原件 |
| 正式发布 | 发布计划 · Releases | 核验 NuGet 公开内容后创建版本页及说明,并回读确认 |
| 版本变更 | CHANGELOG | 候选流程从提交历史生成当前版本草稿,经 MR 评审后复用于 NuGet 和 Release 说明 |
详细报告需要 CODING 项目访问权限。CI 同时采集行与分支覆盖率,按模块和运行时生成独立 HTML 明细、JSON 和 SVG 徽标。进入同一构建的“通用报告 → 代码覆盖率”查看;徽标绑定该次构建,不把历史值冒充当前主干状态。详见覆盖率说明。云原生执行 MR、主干和定时构建,既有 CI 接收同一原件并展示报告;独立 CD 提升已验证包。详见云原生交付与恢复。
开发与发布
使用 global.json 指定的 SDK、PowerShell 7、Python 3,以及工具镜像中固定的 Gitleaks。
# 修改版本或包清单后刷新本页安装区域
python build/ci_report.py docs-update
# 与 CODING 相同的构建、测试、包内容和报告入口
pwsh -NoProfile -File build/ci.ps1
CI 执行脚本回归、元数据检查、密钥扫描、依赖审计、IE/Web/EPPlus 测试及 13 个包的打包,输出 JUnit、HTML、步骤日志、包清单与 SHA256 原件归档。测试数量和跳过项以每次真实报告为准。
发布采用候选 MR → 主干 CI 原件 → 注解标签 → 审批推包 → 公开内容核验 → CODING 版本页的链路。候选按提交历史计算语义版本,更新 common.props、CHANGELOG 和 README 包表,并自动创建 MR,由维护者评审合并;CD 只恢复 CI 原件,不重新打包。新流程的平台启用和验收状态见发布手册,已发布版本不可覆盖。
自动版本按 fix/perf、feat、破坏性变更分别提升 patch、minor、major;纯文档或测试变更不触发发版。无法分类的产品变更进入 NeedsReview,需要维护者明确版本与理由。已发布的标签、包和 Release 说明出现冲突时停止,不静默覆盖。
维护者可参考自动版本与发布维护,了解版本规划、API 兼容性基线、延迟收尾及定期复验。
许可证
仓库许可证见 LICENSE。本项目维护 ZhileTime 包发行线并保留上游版权声明;底层组件与传递依赖仍需遵守各自许可证。
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- CS-Script (>= 4.14.3)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.5)
- ZhileTime.IE.Core (>= 1.1.5)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
### 版本与迁移评审
经用户批准发布工程维护版本:完善云原生构建、平台配置对账、覆盖率基线、原件恢复与诊断归档,产品 API 无破坏性变更。