跳過到頁腳內容
使用 IRONXL

為什麼 ExcelDataReader 無法編寫 Excel 文件以及 IronXL 如何解決這個問題

許多開發者在尋找輕量級的解決方案來處理 C# 中的 Excel 文件時,會發現 ExcelDataReader。 然而,他們很快就會遇到一個基本的限制:儘管其名稱暗示了完整的 Excel 功能,ExcelDataReader 無法寫入 Excel 文件。 This helpful article clarifies this common misconception and presents IronXL as a comprehensive alternative that handles both reading and writing Excel documents seamlessly. 本指南的重點是幫助您以簡單明了的方式處理 Excel 寫入的限制。

在本指南中,您將學習為什麼 ExcelDataReader 不能寫入 Excel 文件,IronXL 如何成功解決這一限制,以及如何開始,並附有工作代碼示例。 此外,您還將了解如何轉換 csv 數據、用陣列對象填充列,以及如何使用不同的編碼選項在不同的文件格式之間傳遞數據。

ExcelDataReader 能夠寫入 Excel 工作簿數據嗎?

為什麼 ExcelDataReader 不能寫入 Excel 文件以及 IronXL 如何解決這個問題:圖 1 - ExcelDataReader

不,ExcelDataReader 無法寫入 Excel 文件。 這個庫專門設計用於閱讀各種格式 (XLS, XLSX, CSV) 的 Excel 文檔,雖然它是一個用於 C# 中快速讀取 Excel 文件的庫,但其實只能這樣使用。 官方 GitHub 存儲庫 甚至明確指出它是一個“用於讀取 Microsoft Excel 文件的庫”,沒有寫入功能。 當您在項目中安裝該包並引用 dll 時,您會發現它無法處理寫入的編碼、跳過行以解決數據問題,或處理通用集合中的列名和 int 值。

下面是 ExcelDataReader 可以做的,這需要一個新的 excelreaderconfiguration 實例來處理伺服器部署的文件路徑和內存設置:

ExcelDataReader 可以做的事情如下:

using ExcelDataReader;
using System.IO;
// ExcelDataReader can ONLY read files
using (var stream = File.Open("data.xlsx", FileMode.Open, FileAccess.Read))
{
    using (var reader = ExcelReaderFactory.CreateReader(stream))
    {
        // Read data from Excel
        while (reader.Read())
        {
            var value = reader.GetString(0); // Read cell value
        }
        // But there's no way to write back to the file
    }
}
using ExcelDataReader;
using System.IO;
// ExcelDataReader can ONLY read files
using (var stream = File.Open("data.xlsx", FileMode.Open, FileAccess.Read))
{
    using (var reader = ExcelReaderFactory.CreateReader(stream))
    {
        // Read data from Excel
        while (reader.Read())
        {
            var value = reader.GetString(0); // Read cell value
        }
        // But there's no way to write back to the file
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

這段代碼展示了 ExcelDataReader 的只讀性質。 該庫有效地從 Excel 文件中提取數據,但不提供像 Write()、Save() 或 SetCellValue() 這樣的方法。 需要創建報告、更新電子表格、生成新 Excel 文件、記錄信息、將結果發布到其他系統、對單元格進行評論、實現 linq 查詢或填充標籤和元數據的開發者必須另外尋找其他辦法。

IronXL 如何解決寫入問題?

為什麼 ExcelDataReader 不能寫入 Excel 文件以及 IronXL 如何解決這個問題:圖 2 - IronXL

IronXL 提供完整的 Excel 操作功能,使開發者能夠在不依賴 Microsoft Office 的情況下讀取、創建、編輯和保存 Excel 文件。 與只讀解決方案不同,IronXL 將 Excel 文件視為完全可編輯的文檔。 這種簡單的方法讓您能夠無縫處理 csv 數據、格式間的轉換和填充工作表。

如何開始使用 IronXL?

安裝 IronXL 只需一條 NuGet 命令:

Install-Package IronXL.Excel

基本實施遵循熟悉的模式:

using IronXL;
// Your first IronXL application
class Program
{
    static void Main()
    {
        // Create workbook
        WorkBook workBook = WorkBook.Create();
        WorkSheet sheet = workBook.CreateWorkSheet("Data");    
        // Write your data
        sheet["A1"].Value = "Hello Excel";
        // Save to file
        workBook.SaveAs("output.xlsx");
    }
}
using IronXL;
// Your first IronXL application
class Program
{
    static void Main()
    {
        // Create workbook
        WorkBook workBook = WorkBook.Create();
        WorkSheet sheet = workBook.CreateWorkSheet("Data");    
        // Write your data
        sheet["A1"].Value = "Hello Excel";
        // Save to file
        workBook.SaveAs("output.xlsx");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

在這裡,我們輕鬆創建了一個新的 Excel 工作簿和一個名為 "Data" 的新 Excel 工作表。 在這個新工作表中,您可以輕鬆地添加來自 CSV 文件、DataTable、數據集和其他數據源的數據。 Sep 分隔文件和各種編碼格式均在.NET Core 平台的跨平台支持。

對於從 ExcelDataReader 遷移的開發者來說,過渡涉及用 IronXL 的讀寫方法替換只讀操作。 學習曲線最低,因為 IronXL 使用了類似於 Excel 單元格引用系統的直觀語法。

Start your free trial to explore IronXL's complete feature set, or check the 全面的文檔,獲取詳細的示例和 API 參考。

基本寫入操作

用 IronXL 創建和寫入 Excel 文件 的方法簡單直接:

using IronXL;
// Create a new Excel file
WorkBook workBook = WorkBook.Create();
WorkSheet sheet = workBook.CreateWorkSheet("Report");
// Write values to specific cells
sheet["A1"].Value = "Product";
sheet["B1"].Value = "Quantity";
sheet["A2"].Value = "Widget";
sheet["B2"].Value = 100;
// Save the file
workBook.SaveAs("inventory.xlsx");
using IronXL;
// Create a new Excel file
WorkBook workBook = WorkBook.Create();
WorkSheet sheet = workBook.CreateWorkSheet("Report");
// Write values to specific cells
sheet["A1"].Value = "Product";
sheet["B1"].Value = "Quantity";
sheet["A2"].Value = "Widget";
sheet["B2"].Value = 100;
// Save the file
workBook.SaveAs("inventory.xlsx");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

此示例創建了一個新的工作簿,將數據添加到特定單元格,並保存結果。 直觀的單元格尋址(sheet["A1"])使代碼可讀且易於維護。

為什麼 ExcelDataReader 不能寫入 Excel 文件以及 IronXL 如何解決這個問題:圖 3 - 基本寫入示例輸出

高級寫入功能

IronXL 超越基本單元格寫入,支持復雜的 Excel 操作:

// Write formulas
sheet["C1"].Value = "Total";
sheet["C2"].Formula = "=B2*1.5";
// Write ranges efficiently
sheet["A3:A10"].Value = "Item";
// Apply formatting while writing
sheet["B2"].Style.Font.Bold = true;
sheet["B2"].Style.BackgroundColor = "#FFFF00";
// Write formulas
sheet["C1"].Value = "Total";
sheet["C2"].Formula = "=B2*1.5";
// Write ranges efficiently
sheet["A3:A10"].Value = "Item";
// Apply formatting while writing
sheet["B2"].Style.Font.Bold = true;
sheet["B2"].Style.BackgroundColor = "#FFFF00";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

這些功能使開發者能夠以編程方式生成專業的 Excel 報告,包含計算和格式化。 For more advanced features like conditional formatting and Excel charts, IronXL provides comprehensive documentation.

為什麼 ExcelDataReader 不能寫入 Excel 文件以及 IronXL 如何解決這個問題:圖 4 - 擴展寫入示例輸出,帶有公式和格式化

實施差異是什麼?

當比較典型的工作流程時,基本的區別就顯而易見。 考慮一個常見的要求:從一個 Excel 文件中讀取數據並創建一個修改過的版本。

ExcelDataReader 方法(不完整)

// Read with ExcelDataReader
List<string> data = new List<string>();
using (var stream = File.Open("source.xlsx", FileMode.Open))
{
    using (var reader = ExcelReaderFactory.CreateReader(stream))
    {
        while (reader.Read())
        {
            data.Add(reader.GetString(0));
        }
    }
}
// Cannot write back to Excel - need another library!
// Read with ExcelDataReader
List<string> data = new List<string>();
using (var stream = File.Open("source.xlsx", FileMode.Open))
{
    using (var reader = ExcelReaderFactory.CreateReader(stream))
    {
        while (reader.Read())
        {
            data.Add(reader.GetString(0));
        }
    }
}
// Cannot write back to Excel - need another library!
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

使用 IronXL 寫入和讀取 Microsoft Excel 文件:完整解決方案

// Read and write with IronXL
WorkBook workBook = WorkBook.Load("source.xlsx");
WorkSheet sheet = workBook.DefaultWorkSheet;
// Read existing data
string originalValue = sheet["A1"].StringValue;
// Modify and add new data
sheet["A1"].Value = originalValue.ToUpper();
sheet["B1"].Value = DateTime.Now;
// Save as new file
workBook.SaveAs("modified.xlsx");
// Read and write with IronXL
WorkBook workBook = WorkBook.Load("source.xlsx");
WorkSheet sheet = workBook.DefaultWorkSheet;
// Read existing data
string originalValue = sheet["A1"].StringValue;
// Modify and add new data
sheet["A1"].Value = originalValue.ToUpper();
sheet["B1"].Value = DateTime.Now;
// Save as new file
workBook.SaveAs("modified.xlsx");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronXL 提供一個統一的 API 來進行所有 Excel 操作。 這消除了需要混合多個庫的必要性,降低了複雜性和潛在的兼容性問題。

何時應該使用 IronXL?

當您的應用程序需要以下情況時,IronXL 至關重要:

  • 報表生成:根據數據庫查詢或 API 響應創建 Excel 報表
  • 數據導出:將應用程序和 CSV 數據轉換為 Excel 格式供用戶使用
  • 模板處理:用動態數據填充 Excel 模板
  • 電子表格自動化:用新信息更新現有文件
  • 批量處理:以編程方式修改多個 Excel 文件

這些場景單靠 ExcelDataReader 是不可能實現的。 雖然 ExcelDataReader 擅長從現有文件中提取數據,但任何需要生成或修改 Excel 文檔的需求都必須使用具有寫入功能的庫。 當您需要實現解決方案來轉換數據、從陣列對象填充列名、修復格式問題、記錄更改或將結果上傳到伺服器時,IronXL 提供完整的工具集。

業務應用特別受益於 IronXL 的全面功能。 無論是生成發票、創建庫存報告,還是生成財務報表,能夠既讀取源數據又寫入格式化輸出可簡化開發流程。

結論

ExcelDataReader 有一個特定的目的:有效地讀取 Excel 文件。 然而,現代應用程序通常需要雙向的 Excel 交互。 IronXL 通過提供單一的、連貫的庫來完全操控 Excel 來解決這一需求。 開發者不需拼湊多個工具或迴避限制,可以用一個一致的 API 處理所有 Excel 操作。

準備好超越只讀的 Excel 操作嗎? 開始使用 IronXL 的免費試用 ,在您的 .NET 應用程序中體驗完整的 Excel 控制。 要用於生產,探索包括專業支持和部署靈活性的許可選項

常見問題解答

為何 ExcelDataReader 無法撰寫 Excel 文件?

ExcelDataReader 主要設計為讀取 Excel 文件。儘管其名稱如此,其實缺乏撰寫 Excel 文件的能力,這對需要完整 Excel 功能的開發人員來說是一個限制。

撰寫 Excel 文件的全面替代方案是什麼?

IronXL 是一個全面的替代方案,允許在 C# 中讀寫 Excel 文件。它提供了處理 Excel 文件的無縫體驗。

IronXL 如何提升 C# 中的 Excel 文件處理?

IronXL 增強了 Excel 文件處理功能,提供了強大的特性,不僅能夠讀取,還能夠撰寫 Excel 文件,而這是 ExcelDataReader 無法做到的。

IronXL 能有效處理大型 Excel 文件嗎?

是的,IronXL 經過性能優化,能有效處理大型 Excel 文件,是需要處理大量數據集的應用的適用選擇。

IronXL 易於整合到現有的 C# 項目中嗎?

IronXL 設計為易於整合到 C# 項目中,提供了廣泛的 API 文件和範例,以幫助順利實施。

使用 IronXL 比 ExcelDataReader 有哪些好處?

使用 IronXL 的關鍵優勢在於它能夠撰寫 Excel 文件,此外還能讀取,提供完整的 Excel 文件操作能力。

IronXL 支援高級 Excel 功能,如公式和圖表嗎?

是的,IronXL 支援高級 Excel 功能,如公式、圖表和其他複雜功能,允許全面的 Excel 文件管理。

IronXL 可以用於 .NET Framework 和 .NET Core 項目嗎?

IronXL 與 .NET Framework 和 .NET Core 兼容,為不同 C# 項目的開發人員提供了靈活性。

使用 IronXL 有學習門檻嗎?

IronXL 用戶友好,附有詳細文檔和範例,最大限度地減少學習曲線,讓開發人員能迅速發揮其全部潛力。

IronXL 用戶有哪些支援資源?

IronXL 提供了廣泛的支援資源,包括文檔、教程和響應的支援團隊,協助用戶解決任何疑問或問題。

Jordi Bardia
軟體工程師
Jordi 在 Python、C# 和 C++ 上最得心應手,當他不在 Iron Software 展現技術時,便在做遊戲編程。在分担产品测测试,产品开发和研究的责任时,Jordi 为持续的产品改进增值。他说这种多样化的经验使他受到挑战并保持参与, 而这也是他与 Iron Software 中工作一大乐趣。Jordi 在佛罗里达州迈阿密长大,曾在佛罗里达大学学习计算机科学和统计学。