首页 > 编程语言 >C#操作Excel文件三种方式详解

C#操作Excel文件三种方式详解

时间:2024-03-18 13:34:33浏览次数:14  
标签:Office C# Excel NPOI 详解 using new xls

1.OleDb方式:

  • 使用.NET Framework内置的System.Data.OleDb命名空间中的类,可以将Excel文件当作数据库来读取数据。这种方式适用于较旧版本的Excel文件(.xls格式,即Excel 2003及更早版本)。
using System.Data.OleDb;

// 创建连接字符串
string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=path_to_your_file.xls;Extended Properties='Excel 8.0;HDR=YES;'";

// 创建OleDbConnection对象
using (var connection = new OleDbConnection(connectionString))
{
    connection.Open();
    
    // 创建SQL查询语句
    string query = "SELECT * FROM [Sheet1$]"; // Sheet1是你要读取的工作表名称

    // 创建一个OleDbCommand对象并执行查询
    using (var command = new OleDbCommand(query, connection))
    {
        using (var adapter = new OleDbDataAdapter(command))
        {
            DataTable dataTable = new DataTable();
            adapter.Fill(dataTable);
            // 现在dataTable包含了从Excel文件中读取的数据
        }
    }
}

2.COM组件方式:

  • 利用Office Interop库(如Microsoft.Office.Interop.Excel),可以直接调用Excel应用程序的对象模型进行操作。这种方法允许对Excel进行更丰富的控制,包括读写数据、样式设置等,但需要在运行环境安装有完整版的Microsoft Office。
using Microsoft.Office.Interop.Excel;

// 创建Excel应用实例
Application excelApp = new Application();
Workbook workbook = excelApp.Workbooks.Open(@"path_to_your_file.xlsx");
Worksheet worksheet = workbook.Sheets["Sheet1"];

// 访问单元格数据
Range range = worksheet.Cells[1, 1]; // 获取第一行第一列单元格
string value = range.Value2.ToString();

// 写入数据
range.Value2 = "New Value";

// 关闭工作簿和应用
workbook.Close(SaveChanges: true);
excelApp.Quit();

3.第三方库NPOI:

  • NPOI是一个开源的.NET库,它不依赖于Office环境,可以读写不同版本的Excel文件,包括.xls和.xlsx格式。使用NPOI可以在服务器环境下无Office软件的情况下处理Excel文件。
using NPOI.HSSF.UserModel;
using NPOI.XSSF.UserModel;

// 根据文件格式创建Workbook对象
HSSFWorkbook hssfWorkbook = new HSSFWorkbook(); // .xls格式
XSSFWorkbook xssfWorkbook = new XSSFWorkbook(); // .xlsx格式

// 创建一个新的工作表
ISheet sheet = hssfWorkbook.CreateSheet("Sheet1");

// 在工作表中添加数据
IRow row = sheet.CreateRow(0);
ICell cell = row.CreateCell(0);
cell.SetCellValue("Hello, World!");

// 写入到文件
FileStream fileStream = new FileStream("output.xls", FileMode.Create);
if (fileExtension == ".xls")
    hssfWorkbook.Write(fileStream);
else if (fileExtension == ".xlsx")
    xssfWorkbook.Write(fileStream);

// 清理资源
fileStream.Close();
hssfWorkbook.Dispose();

总结:

  • 每种方法都有其适用场景和限制,OleDb适合简单读取老版Excel文件数据,COM组件功能全面但要求环境支持,而NPOI则提供了轻量级且无需安装Office的解决方案。

标签:Office,C#,Excel,NPOI,详解,using,new,xls
From: https://www.cnblogs.com/Z1000W/p/18079949

相关文章

  • 【GPT总结】Why Can GPT Learn In-Context?
    原文:https://ar5iv.labs.arxiv.org/html/2212.10559概述这篇论文提出了一种新的方法,利用大型预训练语言模型展示了惊人的上下文学习能力。通过少量的示范输入-标签对,它们可以在没有参数更新的情况下预测未见输入的标签。尽管在性能上取得了巨大成功,但其工作机制仍然是一个开放......
  • #c语言程序设计————实验报告
    实验项目名称:实验一熟悉C语言运行环境实验项目类型:验证性实验日期:2023年3月14日一、实验目的下载安装Devc6.0程序。了解在该系统上如何进行编辑、编译、连接和运行一个C程序。通过运行简单的C程序了解C程序的特点。二、实验硬、软件环境Windows计算机、Devc6.0三、......
  • C#数据类型(详细)
    数据类型分类: 值类型(Valuetypes)引用类型(Referencetypes)指针类型(Pointertypes)值类型(Valuetypes)---变量可以直接分配值。 值类型直接包含数据。比如 int、char、float,它们分别存储数字、字符、浮点数。当您声明一个 int 类型时,系统分配内存来存储值。下表列出了......
  • Cocos实例1:实现平面游戏中的滚动地图
    Cocos实例:实现平面游戏中的滚动地图1.应用: 在2D游戏或某些UI界面中,会经常遇到一些循环滚动的背景或元素。例如飞机大战的背景、冒险岛的双层循环滚动背景,模拟视觉效果上角色在无限背景地图中运动。2.实现原理 需要一张上下或左右在顺序排列时可以无缝衔接的背景图片,搭......
  • 还在用Calendar操作Date?Java8都弃用了,还不知道它的这款强大的工具吗?
    引言在过去的Java版本中,日期和时间的处理主要依赖于java.util.Date和java.util.Calendar类,然而随着业务系统的复杂以及技术层面的提升,这些传统的日期时间类暴露出了若干显著的不足之处。随着Java8的发布,其引入了一套全新的日期时间API,彻底改变了我们处理日期和时间的方式。传统......
  • CS 3800 python
    CS3800在线W.Schnyder2024年春季3/6/2024课业7(3月15日星期五到期)说明:此课业应在到期日之前11:59pm之前以一年级的PDF(不零件)提交。您可以在文字处理器中键入解决方案,然后将其打印到PDF,或者手工编写并提交扫描副本。写下并提交答案,就像他们是专业报告一样。如果提交不整洁(......
  • CheatEngine百度网盘加速
    1.下载安装CheatEngine通过CE官网或者CEGitHub均可以下载2.CheatEngine汉化2.1.下载中文包进入CE官网,点击右侧导航Downloads,下拉找到Translations,下载中文包2.进入CE安装目录右键点击CE图标,选择属性,找到“起始位置”进入CE安装目录后,进入languages文件夹,将解压后的zh_CN......
  • CodeForces 1943D2 Counting Is Fun (Hard Version)
    洛谷传送门CF传送门被自己的赛时智障操作气笑了。谁告诉你容斥钦定了几个要记到状态里面的。。。/tuu显然先找“好数组”的充要条件。对原数组\(a\)差分,设\(b_i=a_i-a_{i-1}\)。那么一次可以选择一对\((i,j)\)满足\(i\lej-2\),然后给\(b_i\)减\(1\),给\(b_......
  • SciTech-Mathmatics-ComplexSpace + (Discrete)Multi-Dimensional FourierTransform:
    多维\(C^k\)复数空间(k维复数空间)上的离散傅立叶变换(FourierTransform)可以合成任意的\(R^n\)几何体;\(C^k\)复数空间(k维复数空间):每一列向量,有k维度的变量;每一维度变量,是一个复数类型因变量\(z\);每一个复数类型因变量\(z\),都是时间\(t\)(\(R\)实数类型自变量)的函数,表......
  • Memcached和Redis的区别?
    MemCached数据结构单一,仅用来缓存数据,而Redis支持多种数据类型。MemCached不支持数据持久化,重启后数据会消失。Redis支持数据持久化。Redis提供主从同步机制和cluster集群部署能力,能够提供高可用服务。Memcached没有提供原生的集群模式,需要依靠客户端实现往集群中分......