跳過到頁腳內容
使用 IRONXL

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

ExcelDataReader 只能讀取 Excel 文件,不能寫入 Excel 文件。 IronXL 提供全面的解決方案,可無縫處理讀取和寫入操作,實現包括寫入功能在內的完整 Excel 操作。

許多開發者在尋找用 C# 處理 Excel 檔案的輕量級解決方案時發現了 ExcelDataReader。 然而,他們很快就遇到了一個根本性的限制:儘管它的名稱表明它具有完整的 Excel 功能,但 ExcelDataReader 無法寫入 Excel 文件。 本文澄清了這個常見的誤解,並將IronXL介紹為一個全面的替代方案,它可以無縫地處理Excel 文件的讀取和寫入。 本指南的重點是幫助您以簡潔的方式處理 Excel 的編寫要求。

在本指南中,您將了解為什麼 ExcelDataReader 無法寫入 Excel 文件,IronXL 如何解決此限制,以及如何透過可運行的程式碼範例開始使用。 此外,您還將學習如何轉換 CSV 資料、使用陣列物件填充列以及使用各種編碼選項在不同的檔案格式之間傳遞資料。 無論您是建立ASP.NET 應用程式還是使用.NET MAUI ,了解這些限制對於選擇合適的程式庫至關重要。

ExcelDataReader 能否寫入 Excel 工作簿資料?

! ExcelDataReader GitHub 倉庫截圖,顯示專案描述、建置狀態和支援的 Excel 檔案格式表格,突出顯示其唯讀特性

不,ExcelDataReader 無法寫入 Excel 檔案。 該庫專為讀取各種格式(XLS、XLSX、CSV)的 Excel 文件而設計。 雖然它是用於在 C# 中快速讀取 Excel 檔案的庫,但它的功能僅限於此。 官方 GitHub 倉庫明確指出,這是一個"用於讀取 Microsoft Excel 文件的庫",不具備寫入功能。 安裝軟體包並在專案中引用 DLL 後,您會發現它無法處理寫入編碼、跳過行以修復資料問題,也無法在通用集合中使用列名和整數值。

以下是 ExcelDataReader 可以執行的操作,需要一個新的 ExcelReaderConfiguration 實例來處理伺服器部署的檔案路徑和記憶體設定:

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
    }
}
Imports ExcelDataReader
Imports System.IO

' ExcelDataReader can ONLY read files
Using stream = File.Open("data.xlsx", FileMode.Open, FileAccess.Read)
    Using reader = ExcelReaderFactory.CreateReader(stream)
        ' Read data from Excel
        While reader.Read()
            Dim value = reader.GetString(0) ' Read cell value
        End While
        ' But there's no way to write back to the file
    End Using
End Using
$vbLabelText   $csharpLabel

此程式碼示範了 ExcelDataReader 的唯讀特性。 該函式庫可以有效率地從 Excel 檔案中提取數據,但沒有提供 Write()、Save() 或 SetCellValue() 之類的方法。 需要建立報表更新電子表格、產生新的 Excel 檔案、記錄資訊、將結果發佈到其他系統、對儲存格進行註解、實作 LINQ 查詢或填入標籤和元資料的開發人員必須另尋他處。 當您需要將資料匯出到 Excel以程式設計方式建立 Excel 圖表時,這種限制就顯得尤為明顯。

IronXL 如何解決寫作難題?

IronXL for .NET 主頁展示了無需 Microsoft Office 即可讀寫 Excel 文件的 C# 程式碼範例,並提供下載選項和全面的功能。

IronXL 提供完整的 Excel 操作功能,可讓開發人員讀取、建立、編輯和儲存 Excel 文件,而無需依賴 Microsoft Office。 與唯讀解決方案不同,IronXL 將 Excel 檔案視為完全可編輯的文件。 這種簡單直接的方法讓您可以處理CSV 資料轉換、在不同格式之間轉換,並無縫填入表格。 該程式庫支援多種平台,包括WindowsmacOS ,甚至Docker 容器

如何開始使用 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");
    }
}
Imports IronXL

' Your first IronXL application
Class Program
    Shared Sub Main()
        ' Create workbook
        Dim workBook As WorkBook = WorkBook.Create()
        Dim sheet As WorkSheet = workBook.CreateWorkSheet("Data")
        ' Write your data
        sheet("A1").Value = "Hello Excel"
        ' Save to file
        workBook.SaveAs("output.xlsx")
    End Sub
End Class
$vbLabelText   $csharpLabel

在這裡,我們輕鬆地建立了一個新的 Excel 工作簿和一個名為"資料"的新 Excel 工作表。 在這個新工作表中,您可以輕鬆地新增來自CSV 檔案資料表資料集和其他資料來源的資料。 .NET Core 平台支援分隔符號分隔的檔案和各種編碼格式。 IronXL 也能無縫處理Excel 元資料工作表管理

對於從 ExcelDataReader 遷移的開發人員來說,過渡涉及將唯讀操作替換為 IronXL 的讀寫方法。 IronXL 的學習曲線非常平緩,因為它使用了與 Excel 儲存格引用系統類似的直覺式語法。 您可以輕鬆地選擇儲存格區域套用格式,甚至可以為儲存格新增超連結

立即開始免費試用,探索 IronXL 的完整功能集,或查閱詳盡的文件以獲取詳細範例與 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");
Imports IronXL

' Create a new Excel file
Dim workBook As WorkBook = WorkBook.Create()
Dim sheet As WorkSheet = 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")
$vbLabelText   $csharpLabel

此範例建立一個新的工作簿,為指定儲存格新增資料,並儲存結果。 直覺的單元格尋址(sheet["A1"])使程式碼易於閱讀和維護。 您亦可將資料寫入 CSV 檔案,或匯入現有的 Excel 檔案進行修改。

Excel電子表格,展示了一個簡單的產品庫存表,帶有格式化的表頭和範例資料條目,演示了基本的寫作能力。

有哪些進階寫作功能可用?

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";
// Add borders and alignment
sheet["A1:C1"].Style.Border.TopBorder = IronXL.Styles.BorderType.Thick;
sheet["A1:C1"].Style.HorizontalAlignment = IronXL.Styles.HorizontalAlignment.Center;
// 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";
// Add borders and alignment
sheet["A1:C1"].Style.Border.TopBorder = IronXL.Styles.BorderType.Thick;
sheet["A1:C1"].Style.HorizontalAlignment = IronXL.Styles.HorizontalAlignment.Center;
' 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"
' Add borders and alignment
sheet("A1:C1").Style.Border.TopBorder = IronXL.Styles.BorderType.Thick
sheet("A1:C1").Style.HorizontalAlignment = IronXL.Styles.HorizontalAlignment.Center
$vbLabelText   $csharpLabel

這些功能使開發人員能夠以程式設計方式產生專業的 Excel 報告,包括計算和格式設定。 IronXL 支援編輯公式套用儲存格樣式以及設定資料格式。 對於條件格式設定Excel 圖表等更進階的功能,IronXL 提供了全面的文件。 您甚至可以合併儲存格凍結窗格,以呈現更佳的資料展示效果。

Excel電子表格,顯示產品及其數量,使用公式計算總計,應用格式(包括邊框和顏色),示範進階編寫功能。

其他進階功能包括行與列的自動調整大小背景圖案與顏色,以及邊框對齊。 IronXL 亦支援命名範圍命名表格,以建立更條理分明的試算表結構。

實現方式有何不同?

比較典型的工作流程時,根本差異就顯而易見了。 考慮一個常見的需求:從一個 Excel 檔案讀取資料並建立一個修改過的版本。 此情境常見於處理 VB.NET 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!
Imports System.IO
Imports ExcelDataReader

Dim data As New List(Of String)()
Using stream = File.Open("source.xlsx", FileMode.Open)
    Using reader = ExcelReaderFactory.CreateReader(stream)
        While reader.Read()
            data.Add(reader.GetString(0))
        End While
    End Using
End Using
' Cannot write back to Excel - need another library!
$vbLabelText   $csharpLabel

當您需要清除儲存格複製儲存格或執行任何修改操作時,此限制便會造成問題。 ExcelDataReader 的架構根本不支援輸出操作。

IronXL 如何提供完整的解決方案?

// 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;
// Add rows and columns dynamically
sheet.InsertRow(2); // Insert a new row at position 2
sheet.InsertColumn(3); // Insert a new column at position C
// 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;
// Add rows and columns dynamically
sheet.InsertRow(2); // Insert a new row at position 2
sheet.InsertColumn(3); // Insert a new column at position C
// Save as new file
workBook.SaveAs("modified.xlsx");
' Read and write with IronXL
Dim workBook As WorkBook = WorkBook.Load("source.xlsx")
Dim sheet As WorkSheet = workBook.DefaultWorkSheet
' Read existing data
Dim originalValue As String = sheet("A1").StringValue
' Modify and add new data
sheet("A1").Value = originalValue.ToUpper()
sheet("B1").Value = DateTime.Now
' Add rows and columns dynamically
sheet.InsertRow(2) ' Insert a new row at position 2
sheet.InsertColumn(3) ' Insert a new column at position C
' Save as new file
workBook.SaveAs("modified.xlsx")
$vbLabelText   $csharpLabel

IronXL 為所有 Excel 操作提供統一的 API。 這樣就無需混合使用多個庫,從而降低了複雜性並減少了潛在的兼容性問題。 您只需透過簡單的函式呼叫,即可新增列與行對儲存格範圍進行排序,甚至對列與行進行分組與取消分組

何時該使用 IronXL?

當您的應用程式需要以下功能時,IronXL 將變得必不可少:

  • 報表生成:根據資料庫查詢或 API 回應建立 Excel 報表
  • 資料匯出:將應用程式與 CSV 資料轉換為 Excel 格式供使用者使用
  • 範本處理:將動態資料填入 Excel 範本
  • 試算表自動化:使用新資訊更新現有檔案
  • 批次處理:透過程式碼修改多個 Excel 檔案

僅憑 ExcelDataReader 無法實現這些場景。 雖然 ExcelDataReader 擅長從現有文件中提取數據,但任何生成或修改 Excel 文件的需求都需要一個具有寫入功能的庫。 當您需要實作轉換資料、從陣列物件填入列名、修復格式問題、記錄變更或將結果發佈到伺服器的解決方案時,IronXL 提供了一套完整的工具集。 該函式庫甚至支援 Blazor 應用程式,且無需 Excel Interop 即可運作。

IronXL 的全面功能尤其有利於商業應用。 無論是產生發票、建立庫存報告或產生財務報表,讀取來源資料和寫入格式化輸出的能力都能簡化開發流程。 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 在佛罗里达州迈阿密长大,曾在佛罗里达大学学习计算机科学和统计学。

鋼鐵支援團隊

我們每週 5 天,每天 24 小時在線上。
聊天
電子郵件
打電話給我