跳至页脚内容
使用 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操作能力,使开发人员能够在没有Microsoft Office依赖的情况下读取、创建、编辑和保存Excel文件。 与只读解决方案不同,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 的许可模式为不同的部署场景提供了灵活性,并且该库保持了高安全标准

下一步是什么?

ExcelDataReader具有特定的用途:高效地读取 Excel 文件。 然而,现代应用程序通常需要双向的Excel交互。 IronXL通过提供一个单一的、连贯的库,满足了这一需求,提供完整的Excel操作能力。 开发人员不必结合多种工具或绕过限制,而是可以使用一个一致的API来处理所有Excel操作。 该库通过定期更新性能改进保持最新状态。

准备好超越只读的Excel操作了吗? 以IronXL的免费试用开始,体验在.NET应用程序中的完整Excel控制。 对于生产用途,探索许可选项,这些选项包括专门的支持和部署灵活性。 需要帮助以开始吗? 请查看许可证密钥申请指南故障排除资源,以便顺利实施。

常见问题解答

为什么ExcelDataReader不能写Excel文件?

ExcelDataReader主要设计用于读取Excel文件。尽管它的名称中包含‘Excel’,但缺乏写入Excel文件的能力,这对需要完整Excel功能的开发人员而言是一个限制。

什么是ExcelDataReader的完整替代方案来编写Excel文件?

IronXL是一个全面的替代方案,允许在C#中读写Excel文件。它为处理Excel文档提供了无缝的体验。

IronXL如何增强C#中的Excel文件处理?

IronXL通过提供强大的功能来读写Excel文件,增强了Excel文件处理能力,而这些是ExcelDataReader无法做到的。

IronXL 能高效处理大型 Excel 文件吗?

是的,IronXL经过性能优化,可以有效处理大型Excel文件,使其成为需要处理大量数据集的应用程序的合适选择。

IronXL易于集成到现有的C#项目中吗?

IronXL设计为易于集成到C#项目中,提供了详尽的API文档和示例,以促进顺利的实施过程。

使用IronXL替代ExcelDataReader的好处是什么?

使用IronXL替代ExcelDataReader的主要好处是它能够写入Excel文件,除此之外还提供完整的Excel文件操作能力。

IronXL是否支持高级Excel功能,如公式和图表?

是的,IronXL支持高级Excel功能,如公式、图表及其他复杂功能,允许进行全面的Excel文件管理。

可以在.NET Framework和.NET Core项目中使用IronXL吗?

IronXL兼容.NET Framework和.NET Core,为跨不同C#项目类型的开发人员提供了灵活性。

使用IronXL是否有学习曲线?

IronXL用户友好,提供详细的文档和示例,最小化了学习曲线,使开发人员能够快速发挥其全部潜力。

IronXL用户可用的支持资源有哪些?

IronXL提供丰富的支持资源,包括文档,教程,以及响应迅速的支持团队以协助用户解决任何问题或疑问。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。