利用DeepSeek輔助編譯c#項目tinyxlsx生成xlsx文件

繼續在尋找比較快的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)協同工作。這些服務可以獨立開發、部署和擴展,擁有自己的數…