继续在寻找比较快的xlsx写入库,从https://github.com/TinyXlsx/TinyXlsx/ 看到它的测试结果,比c++的openXLSX快几倍,就想试用一下,仔细一看,它是个c#项目,需要.NET 8.0。
于是上微软网站下载了.NET 8.0 SDK,解压缩到c:\d\net8\目录
又下载了TinyXlsx项目源代码, 解压缩到c:\d\TinyXlsx-main\目录。
设置搜索路径并编译

set path=%path%;c:\d\net8
cd \d\tinyxlsx-maindotnet build TinyXlsx.sln --configuration Release

编译成功,但不知怎么执行,进入编译生成目标文件目录找exe文件,只找到testhost.exe,但是执行报错

cd C:\d\TinyXlsx-main\Tests\bin\Release\net8.0C:\d\TinyXlsx-main\Tests\bin\Release\net8.0>testhost
A fatal error occurred. The required library hostfxr.dll could not be found.
If this is a self-contained application, that library should exist in [C:\d\TinyXlsx-main\Tests\bin\Release\net8.0\].
If this is a framework-dependent application, install the runtime in the global location [C:\Program Files\dotnet] or use the DOTNET_ROOT environment variable to specify the runtime location or register the runtime location in [HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\x64\InstallLocation].The .NET Core runtime can be found at:- https://aka.ms/dotnet-core-applaunch?missing_runtime=true&arch=x64&rid=win10-x64

按照提示,又设置了环境变量DOTNET_ROOT,还是不对,只好请教DeepSeek

C:\d\TinyXlsx-main\Tests\bin\Release\net8.0>set  DOTNET_ROOT=c:\d\net8C:\d\TinyXlsx-main\Tests\bin\Release\net8.0>testhost
A fatal error was encountered. The library 'hostpolicy.dll' required to execute the application was not found in 'c:\d\net8'.
Failed to run as a self-contained app.- The application was run as a self-contained app because 'C:\d\TinyXlsx-main\Tests\bin\Release\net8.0\testhost.runtimeconfig.json' was not found.- If this should be a framework-dependent app, add the 'C:\d\TinyXlsx-main\Tests\bin\Release\net8.0\testhost.runtimeconfig.json' file and specify the appropriate framework.

他说:

这个错误是因为你的应用程序缺少运行时配置文件,并且没有正确设置 .NET 运行时的路径。以下是解决方案:

方法一:使用 dotnet 命令运行(推荐)

不要直接运行 testhost.exe,而是使用 dotnet 命令:

cd C:\d\TinyXlsx-main\Tests\bin\Release\net8.0
dotnet testhost.dll

方法二:发布为自包含应用程序

重新构建项目,指定为自包含发布:

cd C:\d\TinyXlsx-main
dotnet publish Tests.csproj --configuration Release --runtime win-x64 --self-contained true

然后运行发布目录中的可执行文件:

cd C:\d\TinyXlsx-main\Tests\bin\Release\net8.0\win-x64\publish
testhost.exe

方法三:修复环境变量设置

你设置的 DOTNET_ROOT 路径不正确,应该指向包含 hostfxr.dll 的目录:

set DOTNET_ROOT=C:\d\net8
set PATH=%DOTNET_ROOT%;%PATH%

然后重新运行。

方法四:检查并修复运行时配置文件

确保 testhost.runtimeconfig.json 文件存在且内容正确。如果缺失,可以创建该文件:

{"runtimeOptions": {"tfm": "net8.0","framework": {"name": "Microsoft.NETCore.App","version": "8.0.0"}}
}

方法五:重新安装或修复 .NET SDK

如果以上方法都不行,可能需要重新安装 .NET SDK:

  1. 下载最新的 .NET 8 SDK
  2. 运行安装程序
  3. 确保环境变量正确设置

最简单的解决方案

直接使用这个命令:

cd C:\d\TinyXlsx-main
dotnet test

这会自动运行测试项目,无需手动处理运行时配置问题。

建议使用方法一或直接使用 dotnet test 命令,这是最标准的运行 .NET 测试方式。

我实验了一下,dotnet test 命令可以执行成功,如下所示

cd C:\d\TinyXlsx-mainC:\d\TinyXlsx-main>dotnet test正在确定要还原的项目…所有项目均是最新的,无法还原。TinyXlsx -> C:\d\TinyXlsx-main\TinyXlsx\bin\Debug\net8.0\TinyXlsx.dllTests -> C:\d\TinyXlsx-main\Tests\bin\Debug\net8.0\Tests.dll
C:\d\TinyXlsx-main\Tests\bin\Debug\net8.0\Tests.dll (.NETCoreApp,Version=v8.0)的测试运行
VSTest 版本 17.11.1 (x64)正在启动测试执行,请稍候...
总共 1 个测试文件与指定模式相匹配。已通过! - 失败:     0,通过:    33,已跳过:     0,总计:    33,持续时间: 2 s - Tests.dll (net8.0)

其他命令仍然有错,看生成的文件名后缀,都是dll,可能是动态链接库,需要一个exe文件来调用,才能执行。
从TinyXlsx项目github主页剪切了如下代码,继续问DeepSeek怎么才能执行。

using TinyXlsx;using var workbook = new Workbook("fileName.xlsx");
var worksheet = workbook.BeginSheet();for (var i = 1; i <= 100; i++)
{worksheet.BeginRow().WriteCellValue(true).WriteCellValue(123456).WriteCellValue(123.456m).WriteCellValue(123.456).WriteCellValue(DateTime.Now).WriteCellValue(DateTime.Now, "yyyy/MM/dd").WriteCellValue("Text")
}
workbook.Close();

他的回答
你可以创建一个简单的控制台应用程序来运行这个代码生成 Excel 文件。以下是步骤:

方法一:创建控制台应用程序

  1. 创建新的控制台项目:
dotnet new console -n ExcelGenerator
cd ExcelGenerator
  1. 添加 TinyXlsx 包引用:
dotnet add package TinyXlsx
  1. 修改 Program.cs 文件:
using TinyXlsx;class Program
{static void Main(string[] args){using var workbook = new Workbook("fileName.xlsx");var worksheet = workbook.BeginSheet();for (var i = 1; i <= 100; i++){worksheet.BeginRow().WriteCellValue(true).WriteCellValue(123456).WriteCellValue(123.456m).WriteCellValue(123.456).WriteCellValue(DateTime.Now).WriteCellValue(DateTime.Now, "yyyy/MM/dd").WriteCellValue("Text");}workbook.Close();Console.WriteLine("Excel 文件生成完成!");}
}
  1. 编译并运行:
dotnet run

方法二:直接在现有项目中运行

如果你已经有项目,可以:

  1. 在 Program.cs 中添加代码:
using TinyXlsx;// 你的代码
using var workbook = new Workbook("fileName.xlsx");
var worksheet = workbook.BeginSheet();for (var i = 1; i <= 100; i++)
{worksheet.BeginRow().WriteCellValue(true).WriteCellValue(123456).WriteCellValue(123.456m).WriteCellValue(123.456).WriteCellValue(DateTime.Now).WriteCellValue(DateTime.Now, "yyyy/MM/dd").WriteCellValue("Text");
}
workbook.Close();
  1. 运行项目:
dotnet run

方法三:使用单元测试(如果你有测试项目)

在测试项目中创建一个测试方法:

[Test]
public void GenerateExcelFile()
{using var workbook = new Workbook("testFile.xlsx");var worksheet = workbook.BeginSheet();for (var i = 1; i <= 100; i++){worksheet.BeginRow().WriteCellValue(true).WriteCellValue(123456).WriteCellValue(123.456m).WriteCellValue(123.456).WriteCellValue(DateTime.Now).WriteCellValue(DateTime.Now, "yyyy/MM/dd").WriteCellValue("Text");}workbook.Close();Assert.That(File.Exists("testFile.xlsx"), Is.True);
}

然后运行测试:

dotnet test

运行结果

成功运行后,你会在项目目录下找到生成的 fileName.xlsx 文件。文件内容包含:

  • 100 行数据
  • 每行包含:布尔值、整数、小数、浮点数、日期时间、格式化日期、文本

注意: 确保你有写入当前目录的权限,或者指定完整的文件路径,如:"C:\\temp\\fileName.xlsx"

我用方法一执行dotnet run成功,在当前目录下生成了testFile.xlsx,内容也正确。从编译生成的目标文件执行,也成功了。注意其实并不需要我提前下载tinyxlsx源代码,dotnet add package TinyXlsx命令会自动从存储库下载。

C:\d>dotnet new console -n wxlsx
已成功创建模板“控制台应用”。正在处理创建后操作...
正在还原 C:\d\wxlsx\wxlsx.csproj:正在确定要还原的项目…已还原 C:\d\wxlsx\wxlsx.csproj (用时 51 毫秒)。
已成功还原。C:\d>cd wxlsxC:\d\wxlsx>dotnet add package TinyXlsx正在确定要还原的项目…Writing C:\Users\lt\AppData\Local\Temp\tmpnhly1b.tmp
info : X.509 证书链验证将使用 .NET 选择的默认信任存储进行代码签名。
info : X.509 证书链验证将使用 .NET 选择的默认信任存储进行时间戳。
info : 正在将包“TinyXlsx”的 PackageReference 添加到项目“C:\d\wxlsx\wxlsx.csproj”。
info :   GET https://api.nuget.org/v3/registration5-gz-semver2/tinyxlsx/index.json
info :   OK https://api.nuget.org/v3/registration5-gz-semver2/tinyxlsx/index.json 194 毫秒
info : 正在还原 C:\d\wxlsx\wxlsx.csproj 的包...
info :   GET https://api.nuget.org/v3-flatcontainer/tinyxlsx/index.json
info :   OK https://api.nuget.org/v3-flatcontainer/tinyxlsx/index.json 303 毫秒
info :   GET https://api.nuget.org/v3-flatcontainer/tinyxlsx/0.2.0/tinyxlsx.0.2.0.nupkg
info :   OK https://api.nuget.org/v3-flatcontainer/tinyxlsx/0.2.0/tinyxlsx.0.2.0.nupkg 316 毫秒
info : 已使用内容哈希 r8vOZYoY7y/pw5Jf6/4b2Lq1+b/STX0KdX6HKcnuSdv+cHmDFADsifgEV65QNiFhgvI6f4+iAGXfc/Y4NkHZQQ== 从 https://api.nuget.org/v3/index.json 到 C:\Users\lt\.nuget\packages\tinyxlsx\0.2.0 安装 TinyXlsx 0.2.0。
info :   GET https://api.nuget.org/v3/vulnerabilities/index.json
info :   OK https://api.nuget.org/v3/vulnerabilities/index.json 185 毫秒
info :   GET https://api.nuget.org/v3/vulnerabilities/vulnerability.base.json
info :   GET https://api.nuget.org/v3/vulnerabilities/vulnerability.update.json
info :   OK https://api.nuget.org/v3/vulnerabilities/vulnerability.base.json 278 毫秒
info :   OK https://api.nuget.org/v3/vulnerabilities/vulnerability.update.json 515 毫秒
info : 包“TinyXlsx”与项目“C:\d\wxlsx\wxlsx.csproj”中指定的所有框架均兼容。
info : 包“TinyXlsx”(版本为 0.2.0)的 PackageReference 已添加到文件“C:\d\wxlsx\wxlsx.csproj”。
info : 将资产文件写入磁盘。路径: C:\d\wxlsx\obj\project.assets.json
log  : 已还原 C:\d\wxlsx\wxlsx.csproj (用时 2.25)。C:\d\wxlsx>dotnet run
Excel 文件生成完成!C:\d\wxlsx>cd C:\d\wxlsx\bin\Debug\net8.0C:\d\wxlsx\bin\Debug\net8.0>wxlsx
Excel 文件生成完成!

为了测试写xlsx文件的效率,让他每行随机生成不同的数字、日期、字符串,结果如下

using TinyXlsx;
using System;class Program
{static void Main(string[] args){var random = new Random();using var workbook = new Workbook("fileName.xlsx");var worksheet = workbook.BeginSheet();for (var i = 1; i <= 100; i++){// 生成随机数据var randomBool = random.Next(2) == 1;var randomInt = random.Next(1000000);var randomDecimal = (decimal)(random.NextDouble() * 1000);var randomDouble = random.NextDouble() * 1000;var randomDate = DateTime.Now.AddDays(random.Next(-365, 365));var randomText = $"Text_{random.Next(1000)}_{Guid.NewGuid().ToString().Substring(0, 8)}";worksheet.BeginRow().WriteCellValue(randomBool).WriteCellValue(randomInt).WriteCellValue(randomDecimal).WriteCellValue(randomDouble).WriteCellValue(randomDate).WriteCellValue(randomDate, "yyyy/MM/dd").WriteCellValue(randomText);}workbook.Close();Console.WriteLine("Excel 文件生成完成!");}
}

我把循环上限改为1000000,用前面的编译本地文件命令生成的文件执行。

C:\d\wxlsx>dotnet publish wxlsx.csproj --configuration Release --runtime win-x64 --self-contained true正在确定要还原的项目…所有项目均是最新的,无法还原。wxlsx -> C:\d\wxlsx\bin\Release\net8.0\win-x64\wxlsx.dllwxlsx -> C:\d\wxlsx\bin\Release\net8.0\win-x64\publish\C:\d\wxlsx>..\timer64 C:\d\wxlsx\bin\Release\net8.0\win-x64\publish\wxlsx
Excel 文件生成完成!Kernel  Time =     0.171 =    6%
User    Time =     2.328 =   92%
Process Time =     2.500 =   99%    Virtual  Memory =     17 MB
Global  Time =     2.506 =  100%    Physical Memory =     37 MB

2秒钟生成了100万行7列的xlsx文件,大小是76MB,用压缩工具检查,它包含共享字符串sharedStrings.xml文件,但其中没有条目,每个字符串都内联保存在sheet1.xml中。

补记
继续下载了.NET 8.0 SDK Linux版, 在WSL中体验,结果操作与windows版几乎完全一致,而且比Windows版更好的是,在下载成功页面提供了详细配置命令。以下是操作步骤


:/mnt/c/d# mkdir dotnet
:/mnt/c/d# cd dotnet
:/mnt/c/d/dotnet# tar xf ../dotnet-sdk-8.0.413-linux-x64.tar.gz
:/mnt/c/d/dotnet# export DOTNET_ROOT=/mnt/c/d/dotnet
:/mnt/c/d/dotnet# export PATH=$PATH:/mnt/c/d/dotnet:/mnt/c/d# dotnet new console -n lxlsx
:/mnt/c/d# cd lxlsx
:/mnt/c/d/lxlsx# dotnet add package TinyXlsx修改Program.cs并保存:/mnt/c/d/lxlsx# dotnet publish lxlsx.csproj --configuration Release --runtime linux-x64 --self-contained trueDetermining projects to restore...Restored /mnt/c/d/lxlsx/lxlsx.csproj (in 5.9 sec).lxlsx -> /mnt/c/d/lxlsx/bin/Release/net8.0/linux-x64/lxlsx.dlllxlsx -> /mnt/c/d/lxlsx/bin/Release/net8.0/linux-x64/publish/
:/mnt/c/d/lxlsx# time /mnt/c/d/lxlsx/bin/Release/net8.0/linux-x64/publish/lxlsx
Excel 文件生成完成!real    0m5.609s
user    0m3.271s
sys     0m0.458s

生成时间略长,生成的文件也略大,约83MB。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/94384.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/94384.shtml
英文地址,请注明出处:http://en.pswp.cn/web/94384.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

构建现代高并发服务器:从内核机制到架构实践

引言:高并发的挑战与演进 在当今互联网时代,高并发处理能力已成为服务器的核心竞争力。传统的"一个连接一个线程"(Thread-per-Connection)模型由于资源消耗巨大、上下文切换成本高和可扩展性差,早已无法应对数万甚至百万级的并发连接需求。现代高并发服务器基于…

1SG10MHN3F74C2LG Intel Stratix 10 系列 FPGA

1SG10MHN3F74C2LG 是 Intel 推出的 Stratix 10 系列 FPGA 家族中的高端型号&#xff0c;它基于 Intel 与 TSMC 合作的 14 纳米 FinFET 工艺制造&#xff0c;是面向超高性能计算、数据中心加速、5G 通信基础设施、以及高端网络设备的旗舰级可编程逻辑器件。这颗 FPGA 以极高的逻…

IIS访问报错:HTTP 错误 500.19 - Internal Server Error

无法访问请求的页面&#xff0c;因为该页的相关配置数据无效。 由于权限不足而无法读取配置文件解决办法&#xff1a;文件夹添加用户权限Everyone文件夹->鼠标右键->属性->安全->组或用户名->编辑->添加->录入Everyone->检查名称->一路点确定

AI对口型唱演:科技赋能,开启虚拟歌者新篇章

最近在短视频平台闲逛&#xff0c;发现不少朋友都在玩“AI对口型唱演”&#xff0c;这类视频简直成了新晋流量密码。从热门歌曲到经典台词&#xff0c;配上夸张的口型和表情&#xff0c;分分钟就能冲上排行榜前排。不过问题也来了——市面上这么多专用软件&#xff0c;到底哪家…

爬虫逆向--Day16Day17--核心逆向案例3(拦截器关键字、路径关键字、请求堆栈、连续请求)

一、入口定位入口定位-- 关键字搜索-- 方法关键字--最简单&#xff0c;最高效的 排第一-- encrypt 加密-- decrypt 解密-- JSON.stringify 给一个JS对象做Json字符串处理的把一个对象转换为Json字符串JSON.stringify({a:1,b:"2"}){"a":"1…

RuoYi-Vue3项目中Swagger接口测试404,端口问题解析排查

一 问题概述版本&#xff1a;ruoyi前后端分离版&#xff0c;ruoyi版本3.9.0 前端Vue3 后端Spring Boot 2.5.15 本地测试环境ruoyi界面中系统工具下的系统接口集成了Swagger&#xff0c;当对其页面上的接口进行请求测试时却发生了404报错。具体表现如下图二 问题排查 1、与Vue2进…

elasticsearch 7.x elasticsearch 使用scroll滚动查询一页,删除一页,影响后面滚动的查询吗

目录 一 scroll说明 1.1 问题 1.2 scroll分页的机制 1.3 案例分析 一 scroll说明 1.1 问题 elasticsearch 使用scroll滚动查询一页&#xff0c;删除一页&#xff0c;影响后面滚动的查询吗&#xff1f; 答案是&#xff1a; 在 Elasticsearch 中使用 Scroll API 进行“…

MacBook Pro M1升级Burp Suite2025.8

一、安装最新Burp Suite2025.8 下载最新Burp Suite2025.8安装包&#xff1a; Burp Suite Release Notes 下载安装包后&#xff0c;双击安装即可&#xff0c; 二、调整Burp Suite2025.8配置&#xff1b; 工具包下载地址&#xff1a;文件分享 将下载的jar包放到app目录下即可 …

开发避坑指南(30):Vue3 表格动态增加删除行解决方案

需求背景 在Vue3环境中&#xff0c;动态增加或者删除表格的行&#xff0c;该怎么实现&#xff1f;如下图&#xff1a;实现分析 不同于传统js&#xff0c;jquery等框架的面向dom编程&#xff0c;vue中是面向数据编程。对变量的增删自动绑定到dom节点的增删上&#xff0c;所以在v…

RTSP/RTMP vs WebRTC:实时视频技术选型的务实之路

引言&#xff1a;错配的代价 在实时视频的技术选型中&#xff0c;WebRTC 曾一度被许多团队视为“唯一的正确答案”。凭借浏览器原生支持、点对点传输以及端到端的低时延特性&#xff0c;它确实在在线会议、互动课堂等场景中展现了极大优势。然而&#xff0c;当这些团队尝试把同…

图表组件SciChart WPF再升级:v8.9带来油气井图、新交互与可视化增强

SciChart WPF Charts是一个实时、高性能的WPF图表库&#xff0c;专为金融、医疗和工程应用而设计。使用DirectX和SciChart WPF专有渲染引擎&#xff0c;以及约50种2D和3D WPF图表类型、灵活的API和五星级支持&#xff0c;SciChart非常适合需要极端性能和光滑交互式图表的项目。…

基于5G NR NTN与DVB-S2X/RCS2的机载卫星通信终端性能分析

5G NR NTN与DVB-S2X/RCS2代表了两种不同的卫星通信技术路线&#xff0c;分别针对航空通信的不同需求场景提供差异化解决方案。5G NR NTN作为蜂窝网络向太空的延伸&#xff0c;具备低延迟、双向通信优势&#xff0c;而DVB-S2X/RCS2则专注于高带宽广播和回传控制&#xff0c;两者…

show-overflow-tooltip使用当内容过多不展示...

Element UI的show-overflow-tooltip属性依赖于检测文本内容的实际宽度与容器宽度的比较&#xff0c;当使用<div>等块级元素时&#xff0c;会破坏这个检测机制。解决方案移除div包装&#xff1a;直接在模板中使用文本内容&#xff0c;不要用div包装使用span代替div&#x…

关于 svn无法查看下拉日志提示“要离线”和根目录看日志“no data” 的解决方法

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/150703535 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

嵌入式八股文面试题总结(QT、RTOS、Linux、ARM、C/C++)(持续更新)

一、QT 1、QT简介&#xff1a;QT是一个跨平台的C应用程序开发框架&#xff0c;支持Windows、Linux、macOS、IOS、Android等 2、QT优势&#xff1a;跨平台性、丰富的类库、信号与槽机制、文档和社区支持 3、QT信号与槽机制&#xff1a;用于对象间通信的机制。当一个对象状态发生…

从 JUnit 深入理解 Java 注解与反射机制

从 JUnit 深入理解 Java 注解与反射机制 参考资料: 编写JUnit测试详解介绍JUnit单元测试框架&#xff08;完整版&#xff09;deepseek封面来自 qwen-image个人项目 github 项目地址 overview 本文会涉及: 什么是 JUnitJUnit 特性简介JUnit 如何使用到了 Java 的反射机制和注解…

VC2022连接mysql

前言 目前想用Visual Studio 2022 C访问mysql数据库。尝试下来&#xff0c;步骤如下&#xff1a; 一、下载Mysql连接的驱动 从这个链接开始下载&#xff1a;https://dev.mysql.com/downloads/c-api/ 点进去后&#xff1a; 我以上两个都下载了&#xff0c;主要还是用第一个&a…

Apache HTTP Server:深入探索Web世界的磐石基石!!!

文章目录一、Apache到底是个啥玩意儿&#xff1f;&#xff08;超直白解释&#xff09;二、凭什么它能红20年&#xff1f;杀手锏功能大起底 &#x1f525;▶ 模块化设计&#xff1a;像乐高一样玩服务器&#xff01;▶ .htaccess文件&#xff1a;网站主的魔法手册 ✨▶ 跨平台王者…

centos搭建gitlab服务器

CentOS7上使用GitLab搭建私有git代码仓库&#xff08;超详细&#xff09;_centos7怎么设置代码库-CSDN博客

微服务:现代软件架构的主流范式

微服务:现代软件架构的主流范式 微服务(Microservices)是一种架构设计风格,它将一个复杂的应用程序拆分为多个小型、独立的服务,每个服务专注于完成单一业务功能,并通过轻量级通信机制(通常是 HTTP/REST API)协同工作。这些服务可以独立开发、部署和扩展,拥有自己的数…