跳至页脚内容
使用 IRONXL

为什么ExcelDataReader不能写入Excel文件以及IronXL如何解决这一问题

许多开发人员在搜索轻量级的解决方案以在C#中处理Excel文件时发现了ExcelDataReader。 然而,他们很快就会遇到一个基本的限制:尽管其名称暗示着全面的Excel功能,ExcelDataReader却无法写入Excel文件。 这篇有用的文章澄清了这一常见误解,并提出了IronXL作为全面的替代方案,能够无缝地同时处理读取写入Excel文档。 本指南的重点是帮助您以简单的方式应对Excel写入限制。

在本指南中,您将了解为什么ExcelDataReader不能写入Excel文件,IronXL如何成功解决该限制,以及如何开始,附带工作代码示例。 此外,您还将发现如何转换csv数据,使用数组对象填充列,以及使用各种编码选项在不同文件格式之间传递数据。

ExcelDataReader能写入Excel工作簿数据吗?

为何ExcelDataReader不能写入Excel文件以及IronXL如何解决这一问题:图1 - ExcelDataReader

不,ExcelDataReader无法写入Excel文件。 该库专为读取各种格式(XLS、XLSX、CSV)的Excel文档而设计,虽然它是一种为在C#中读取Excel文件而编写的快速库,但这实际上就是它的全部功能。 官方GitHub存储库甚至明确声明这只是一个"读取Microsoft Excel文件的库",没有写入能力。 当您在项目中安装该包并引用dll时,您会发现它无法处理写入的编码,不能通过跳过行来解决数据问题,也无法处理通用集合中的列名和整数值。

以下是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、数据集及其他数据源的数据。 .NET核心平台支持Sep分隔文件和各种编码格式。

对于从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");
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报告,附带计算和格式化。 对于更高级的功能,如条件格式化Excel图表,IronXL提供了全面的文档。

为何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为所有Excel操作提供统一的API。 这消除了混合多个库的需求,降低了复杂性和潜在的兼容性问题。

何时应该使用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功能的开发人员而言是一个限制。

什么是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 机器人,将他对技术的热爱与创造力相结合。