NPOI操作EXCEL文件 ——CAD C# 二次開發

缺點:dll.版本容易加載錯誤。CAD加載插件時,沒有加載所有類庫。插件運行過程中用到某個類庫,會從CAD的安裝目錄找,找不到就報錯了。

【方案2】讓CAD在加載過程中把類庫加載到內存
【方案3】是發現缺少了哪個庫,就用插件程序加載進去

c#中三方庫操作excel多種方式,對比如下:

綜合對比

特性NPOIAspose.CellsCOM Interop (Excel.Application)
授權與成本免費開源 (Apache 2.0)商業授權 (約$3,000/開發者)免費 (需安裝Office)
依賴項純.NET庫 (無依賴)純.NET庫 (無依賴)需安裝Microsoft Office
部署環境任意環境 (服務器/客戶端)任意環境 (服務器/客戶端)僅客戶端 (需安裝Office)
性能???? (較快)???? (優化良好)? (非常慢)
功能完整性??? (基礎功能完善)????? (100%功能覆蓋)????? (原生支持)
內存占用50-100 MB100-200 MB300-500 MB+
穩定性?????????? (常崩潰)
多線程支持? 良好? 優秀? 極差
文檔支持GitHub Wiki專業技術文檔+支持MSDN文檔
學習曲線中等中等復雜
版本兼容性向后兼容好版本升級需注意Office版本強依賴

詳細分析

1. NPOI (POI for .NET)

優點:

using (var fs = new FileStream("test.xlsx", FileMode.Create)) { IWorkbook workbook = new XSSFWorkbook(); // xlsx格式 ISheet sheet = workbook.CreateSheet("Sheet1"); // 添加數據 IRow row = sheet.CreateRow(0); row.CreateCell(0).SetCellValue("Hello"); row.CreateCell(1).SetCellValue("NPOI"); workbook.Write(fs); }
  • 💰?零成本:完全免費,Apache 2.0許可

  • 🚀?高性能:內存操作,處理速度快

  • ???無依賴:不依賴Office,適合服務器端使用

  • 📦?輕量級:NuGet包僅5-10MB

  • 🔄?格式支持:完美支持xls/xlsx格式

缺點:

  • ???高級功能有限

    • 數據透視表支持不完善

    • 復雜圖表功能較弱

    • 條件格式實現復雜

  • 📚?文檔不足:官方文檔較簡略,依賴社區示例

  • 🧩?API設計:部分接口不夠直觀

適用場景:?報表導出、數據導入導出、簡單格式操作等基礎需求

2. Aspose.Cells

優點:

  • 🧩?功能全面

    • 100% Excel功能覆蓋

    • 完美支持數據透視表、高級圖表

    • 公式計算引擎

    • 格式轉換(PDF/HTML/CSV等)

  • ?

  • 3. COM Interop (Excel.Application)

    優點:

    🛡??穩定可靠:商業級質量保證

  • 📊?高性能處理:優化的大數據量處理

  • 🔄?版本兼容:支持從Excel 97到最新格式

  • 🔌?原生支持:100% Excel功能兼容

  • 🧩?VBA移植:可直接轉換VBA代碼

  • 🎨?所見即所得:實時可視化操作

最終建議

  1. 優先選擇NPOI?- 對于大多數場景足夠且免費

  2. 投資Aspose當

    • 需要處理復雜Excel功能

    • 要求高穩定性

    • 預算允許($3,000+/開發者)

  3. 完全避免COM互操作?- 除非在受控客戶端環境且無替代方案

您遇到的"Evaluation Only"問題正是Aspose商業授權的典型表現。若預算有限,遷移到NPOI是明智選擇,盡管可能需要調整部分高級功能實現方式。

        public void Npoi(){try{// 步驟1:創建 XSSF 工作簿(對應 .xlsx 格式)using (IWorkbook workbook = new XSSFWorkbook()){// 步驟2:刪除默認創建的所有工作表(新建工作簿默認有一個 "Sheet1")while (workbook.NumberOfSheets > 0){workbook.RemoveSheetAt(0); // 按索引刪除工作表(從0開始)}// 步驟3:創建名為 "乘法表" 的新工作表ISheet sheet = workbook.CreateSheet("乘法表");// 步驟4:設置表頭(第一行第一列,合并單元格 A1-I1)IRow headerRow = sheet.CreateRow(0); // 行索引從0開始(第一行)ICell headerCell = headerRow.CreateCell(0); // 列索引從0開始(第一列)headerCell.SetCellValue("九九乘法表");// 合并單元格(行范圍:0-0,列范圍:0-8,對應 A1 到 I1)CellRangeAddress headerMergeRegion = new CellRangeAddress(0, 0, 0, 8);sheet.AddMergedRegion(headerMergeRegion);// 步驟5:生成九九乘法表內容(從第二行開始,行索引1)for (int i = 1; i <= 9; i++) // 外層循環:被乘數(1-9){IRow dataRow = sheet.CreateRow(i); // 創建第 i+1 行(行索引i)for (int j = 1; j <= i; j++) // 內層循環:乘數(1到被乘數){ICell cell = dataRow.CreateCell(j - 1); // 列索引 = j-1(從0開始)cell.SetCellValue($"{j}*{i}={i * j}"); // 格式示例:"2*3=6"}}// 步驟6:設置列寬(可選,根據內容自適應寬度)for (int col = 0; col < 9; col++){sheet.AutoSizeColumn(col); // 自動調整列寬以適應內容}// 調用格式設置函數(核心封裝功能)SetSheetFormat(sheet);// 步驟7:獲取桌面路徑并保存文件string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);string savePath = Path.Combine(desktopPath, "九九乘法表.xlsx");using (FileStream fs = new FileStream(savePath, FileMode.Create, FileAccess.Write)){workbook.Write(fs); // 將工作簿寫入文件流}Z.ed.WriteMessage($"Excel 文件已成功保存到:{savePath}");}}catch (Exception ex){Z.ed.WriteMessage($"操作失敗,錯誤信息:{ex.Message}");}}/// <summary>/// 封裝:設置工作表格式(字體加粗、邊框、對齊、自動列寬)/// </summary>/// <param name="sheet">需要設置格式的工作表</param>static void SetSheetFormat(ISheet sheet){IWorkbook workbook = sheet.Workbook; // 獲取工作簿引用(用于創建樣式)#region 樣式定義// 表頭字體樣式(加粗)IFont headerFont = workbook.CreateFont();headerFont.FontHeightInPoints = 12; // 字體大小headerFont.Boldweight = (short)FontBoldWeight.Bold; // 加粗// 內容單元格樣式(邊框+居中對齊)ICellStyle contentStyle = workbook.CreateCellStyle();contentStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; // 水平居中contentStyle.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center; // 垂直居中// 設置黑色細邊框(上下左右)contentStyle.BorderTop = BorderStyle.Thin;contentStyle.BorderBottom = BorderStyle.Thin;contentStyle.BorderLeft = BorderStyle.Thin;contentStyle.BorderRight = BorderStyle.Thin;contentStyle.TopBorderColor = IndexedColors.Black.Index;contentStyle.BottomBorderColor = IndexedColors.Black.Index;contentStyle.LeftBorderColor = IndexedColors.Black.Index;contentStyle.RightBorderColor = IndexedColors.Black.Index;// 表頭單元格樣式(合并后單獨設置)ICellStyle headerStyle = workbook.CreateCellStyle();headerStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;headerStyle.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;headerStyle.SetFont(headerFont); // 應用加粗字體#endregion#region 處理表頭格式// 表頭行(第0行)IRow headerRow = sheet.GetRow(0);if (headerRow != null){// 合并后的表頭單元格(A1)ICell headerCell = headerRow.GetCell(0);if (headerCell != null){headerCell.CellStyle = headerStyle; // 應用表頭樣式}}#endregion#region 獲取表格最大行和列int maxRow = sheet.LastRowNum; // 最后一行索引(從0開始)int maxCol = 0;// 遍歷所有行獲取最大列數for (int rowNum = 0; rowNum <= maxRow; rowNum++){IRow row = sheet.GetRow(rowNum);if (row != null && row.LastCellNum > maxCol){maxCol = row.LastCellNum; // 記錄當前行的最大列數}}#endregion#region 應用內容格式(所有單元格)for (int rowNum = 0; rowNum <= maxRow; rowNum++){IRow row = sheet.GetRow(rowNum) ?? sheet.CreateRow(rowNum); // 確保行存在for (int colNum = 0; colNum < maxCol; colNum++){ICell cell = row.GetCell(colNum) ?? row.CreateCell(colNum); // 確保單元格存在cell.CellStyle = contentStyle; // 應用內容樣式(邊框+對齊)}}#endregion#region 自動調整列寬for (int colNum = 0; colNum < maxCol; colNum++){sheet.AutoSizeColumn(colNum); // 自動調整列寬// 適當增加列寬(避免內容過緊)sheet.SetColumnWidth(colNum, sheet.GetColumnWidth(colNum) + 1000);}#endregion}/// <summary>/// 生成九九乘法表數據到指定工作表/// </summary>/// <param name="sheet">目標工作表</param>

唯一文件名:? ? ? ? ??
? ? ? ? ? ? ? ?

 ?string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);string dateTimeStr = DateTime.Now.ToString("yyyyMMdd_HHmmss");string savePath = Path.Combine(desktopPath, $"九九乘法表_{dateTimeStr}.xlsx");

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/84095.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/84095.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/84095.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Go字符串切片操作詳解:str1[:index]

在Go語言中&#xff0c;return str1[:index] 是一個??字符串切片操作??&#xff0c;它截取字符串的一部分。讓我們深入解析這個操作的含義和原理&#xff1a; 基本語法和含義 str1&#xff1a;原始字符串[:index]&#xff1a;切片操作符str1[:index]&#xff1a; ??起始…

NVIDIA Dynamo:數據中心規模的分布式推理服務框架深度解析

NVIDIA Dynamo&#xff1a;數據中心規模的分布式推理服務框架深度解析 摘要 NVIDIA Dynamo是一個革命性的高吞吐量、低延遲推理框架&#xff0c;專為在多節點分布式環境中服務生成式AI和推理模型而設計。本文將深入分析Dynamo的架構設計、核心特性、代碼實現以及實際應用示例&…

408第一季 - 數據結構 - 棧與隊列的應用

括號匹配 用瞪眼法就可以知道的東西 棧在表達式求值運用 先簡單看看就行&#xff0c;題目做了就理解了 AB是操作符,也是被狠狠加入后綴表達式了&#xff0c;然后后面就是*&#xff0c;只要優先級比棧頂運算符牛逼就放里面&#xff0c;很顯然&#xff0c;*比牛逼 繼續前進&#…

Ubuntu 下開機自動執行命令的方法

Ubuntu 下開機自動執行命令的方法&#xff08;使用 crontab&#xff09; 在日常使用 Ubuntu 或其他 Linux 系統時&#xff0c;我們常常需要讓某些程序或腳本在系統啟動后自動運行。例如&#xff1a;啟動 Clash 代理、初始化服務、定時同步數據等。 本文將介紹一種簡單且常用的…

jpackage 打包 jar包 為exe可執行程序

jpackage --input target/ --main-jar note.jar --runtime-image H:/Dpanbeifeng/apps/finalshell/jre --type app-image --dest output/ --main-class com.textmanager.Main --icon logo2.png --name 貓咪快筆記 jpackage 打包指令詳細介紹 jpackage 概述 jpackage 是…

H5移動端性能優化策略(渲染優化+弱網優化+WebView優化)

一、渲染優化&#xff1a;首屏速度提升的核心?? ??1. 關鍵頁面采用SSR或Native渲染?? ??適用場景??&#xff1a;首頁、列表頁、詳情頁等強內容展示頁面 ??優化原理??&#xff1a; ??SSR&#xff08;服務端渲染&#xff09;??&#xff1a;在服務端生成完整…

Matlab | matlab中的圖像處理詳解

MATLAB 圖像處理詳解 這里寫目錄標題圖像處理 MATLAB 圖像處理詳解一、圖像基礎操作1. 圖像讀寫與顯示2. 圖像信息獲取3. 圖像類型轉換二、圖像增強技術1. 對比度調整2. 去噪處理3. 銳化處理三、圖像變換1. 幾何變換2. 頻域變換四、圖像分割1. 閾值分割2. 邊緣檢測3. 區域分割五…

keysight是德科技N9923A網絡分析儀

keysight是德科技N9923A網絡分析儀 簡  述&#xff1a;N9923A 是一款使用電池供電的便攜式射頻矢量網絡分析儀&#xff0c;其中包括全 2 端口網絡分析儀、電纜和天線測試儀、故障點距離測試儀、功率計以及 1 通道和 2 通道矢量電壓表。 主要特性與技術指標 網絡分析儀 * 2…

idea不識別lombok---實體類報沒有getter方法

介紹 本篇文章&#xff0c;主要講idea引入lombok后&#xff0c;在實體類中加注解Data&#xff0c;在項目啟動的時候&#xff0c;編譯不通過&#xff0c;報錯xxx.java沒有getXxxx&#xff08;&#xff09;方法。 原因有以下幾種 1. idea沒有開啟lombok插件 2. 使用idea-2023…

本地主機部署開源企業云盤Seafile并實現外部訪問

Seafile是一個開源、專業、可靠的云存儲平臺&#xff1b;解決文件集中存儲、共享和跨平臺訪問等問題。這款軟件功能強大&#xff0c;界面簡潔、操作方便。 本文將詳細的介紹如何利用本地主機部署 Seafile&#xff0c;并結合nat123&#xff0c;實現外網訪問本地部署的 Seafile …

【從0-1的CSS】第1篇:CSS簡介,選擇器以及常用樣式

文章目錄 CSS簡介CSS的語法規則選擇器id選擇器元素選擇器類選擇器選擇器優先級 CSS注釋 CSS常用設置樣式顏色顏色名稱(常用)RGB(常用)RGBA(常用)HEX(常用)HSLHSLA 背景background-colorbackground-imagebackground-size 字體text-aligntext-decorationtext-indentline-height 邊…

SpringBoot+MySQL家政服務平臺 設計開發

概述 基于SpringBootMySQL開發的家政服務平臺完整項目&#xff0c;該系統實現了用戶預約、服務管理、訂單統計等核心功能&#xff0c;采用主流技術棧開發&#xff0c;代碼規范且易于二次開發。 主要內容 系統功能架構 本系統采用前后端分離架構&#xff0c;前端提供用戶交互…

3.1 HarmonyOS NEXT分布式數據管理實戰:跨設備同步、端云協同與安全保護

HarmonyOS NEXT分布式數據管理實戰&#xff1a;跨設備同步、端云協同與安全保護 在萬物互聯的時代&#xff0c;數據的跨設備流轉與安全共享是全場景應用的核心需求。HarmonyOS NEXT通過分布式數據管理技術&#xff0c;實現了設備間數據的實時同步與端云協同&#xff0c;為開發…

高保真組件庫:數字輸入框

拖入一個文本框。 拖入一個矩形,作為整個數字輸入框的邊框,邊框顏色為灰色DCDEE2,圓角半徑為4。 拖入一個向上的箭頭圖標作為增加按鈕,再拖入一個矩形,將向上箭頭圖標放入矩形內。矩形:18x15,邊框顏色DCDEE2,邊框左下可見,箭頭圖標:8x5,矩形置底,組合在一起命名”增…

【力扣鏈表篇】19.刪除鏈表的倒數第N個節點

題目&#xff1a; 給你一個鏈表&#xff0c;刪除鏈表的倒數第 n 個結點&#xff0c;并且返回鏈表的頭結點。 示例 1&#xff1a; 輸入&#xff1a;head [1,2,3,4,5], n 2 輸出&#xff1a;[1,2,3,5]示例 2&#xff1a; 輸入&#xff1a;head [1], n 1 輸出&#xff1a;[]…

論文筆記——相干體技術在裂縫預測中的應用研究

目錄 相關地震知識補充地震數據的認識地震幾何屬性 相干體算法定義基本原理第一代相干體技術&#xff1a;基于互相關的相干體技術&#xff08;Correlation&#xff09;第二代相干體技術&#xff1a;基于相似的相干體技術&#xff08;Semblance&#xff09;基于多道相似的相干體…

wpf ListBox 去除item 單擊樣式

在WPF中去除ListBox項的單擊樣式&#xff0c;可以通過修改ItemContainerStyle來實現。以下是解決方案&#xff1a; <ListBox><ListBox.ItemContainerStyle><Style TargetType"ListBoxItem"><Setter Property"Background" Value"…

A Execllent Software Project Review and Solutions

The Phoenix Projec: how do we produce software? how many steps? how many people? how much money? you will get it. i am a pretty judge of people…a prank

Android 視圖系統入門指南

1. View&#xff1a;界面的最小單位 本質&#xff1a;屏幕上的一個矩形區域&#xff0c;能顯示內容或接收觸摸。比喻&#xff1a;就像樂高積木&#xff0c;是組成界面的最小單位。常見子類&#xff1a; TextView&#xff08;文字積木&#xff09;、Button&#xff08;按鈕積木…

【走好求職第一步】求職OMG——見面課測驗4

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答題&#xff0c;大家注意呀&#xff01;博主碼字不易點個關注吧~~ 1.單選題(2分) 下列不屬于簡歷撰寫技巧原則的是&#xff08; A &#xff09; A.具體性 B.相關性 C.匹配性 2.單選題(2分) 筆試的下一步一般是:( B &…